OpenGL ile Bağıl Hareket


Yazan : Şadi Evren ŞEKER

Bilgisayar grafiklerinde bir nesnenin diğer nesnelere bağlı olarak hareket etmesi mümkündür. Bunu sağlamak için bir varlık ağaç yapısı üzerinden bütün nesneler birbirine bağlanır. Ardından bağlı nesneleri çağıran bir dolaşma (traverse) fonksiyonu özyineli (recursive) olarak çalışır ve bütün nesneleri doğru sıra ile ve doğru şekil dönüşümleri ile (transformation) çizer.

Bu ağaç yapısının tanımlanması aslında C dilindeki yapılar (structs) ile mümkündür. Ağacı oluşturan her düğümün (node) yapısı aşağıda verilmiştir:

Düğüm Yapısı:

typedef struct treenode
{
Glfloat m[16];
void (*f)();
struct treenode *sibling;
struct treenode *child;
} treenode;

Yukarıdaki kodda bir şekli oluşturan veri bilgisi tanımlanmıştır. Bu veri ünitesinde bir dönüşüm matrisi (m) bir fonksiyon göstericisi (function pointer) ve komşu ve çocuklarını gösteren birer gösterici (pointer) bulunmaktadır.

Atama işlemi:

Aşağıdaki kod örneğinde yukarıda tanımlanmış olan yapının (struct) içerisine ilgili değerler atanmıştır (örnek olarak)

treenode torso_node, head_node, lua_node, … ;
/* use OpenGL functions to form transformation matrices */
glLoadIdentity();
glRotatef(theta[0], 0.0, 1.0, 0.0);
/* move modelview matrix to m */
glGetFloatv(GL_MODELVIEW_MATRIX, torso_node.m)
torso_node.f = torso_draw; /* torso_draw() draws torso */
torso_node.sibling = NULL;
torso_node.child = &head_node;

Dolaşma Fonksiyonu:

Son olarak yukarıda tanımlanan ve içerisine değer atanan yapıyı dolaşan ve dolaşırken ekrana basan fonksiyon aşağıda verilmiştir:

void traverse(treenode *root)
{
if(root == NULL) return;
glPushMatrix();
glMultMatrix(root->m);
root->f();
if(root->child != NULL)
traverse(root->child);
glPopMatrix();
if(root->sibling != NULL)
traverse(root->sibling);
}


« OpenGL ile Malzeme Özellikleri (Material Properties)   |   Bağlama (Coupling) »



Yorumlar

Kullanıcı girişi yaparak ya da zorunlu olan * alanlarını doldurarak yorum yapabilirsiniz.

İsminiz *

Email adresiniz *

Web siteniz

Mesajınızı buraya yazabilirsiniz:

Bu Yazı Hakkında

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'OpenGL ile Bağıl Hareket' isimli yazı 30 Dec 2008 tarihinde, saat: 12:29 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 629 defa okunmuştur.

Benzer yazıları Bilgisayar Grafiği (Computer Graphics) kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Yazarın Kitabı

Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
Yapılan Son Yorumlar
Yakın Yazılar
Bağlantılar