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);
}

Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


243 views

Leave a Reply


bir * 4 =

Benzer Yazılar:

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ş, toplam243 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.


Category: Bilgisayar Grafiği (Computer Graphics)