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
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
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
OpenGL Geometrik Nesneler (Geometric Objects)
Mafsallı Tasarım (Articular Design)
OpenGL Nesne Seçimi (Object Picking)
OpenGL ve Kamera Görüntüsü (Camera Viewing)
Yönlü Graflar (Directed Graphs)
Brent Algoritması (Brent's Algorithm)
OpenGL ile Arkayüz (Opengl Backface)
OpenGL ile Malzeme Özellikleri (Material Properties)
Dik İzdüşüm (Orthogonal, Orthographic Projection)
Varlık-Durum Tablosu (Symbol Instance Table)
OpenGL ile Aydınlatma (Lighting)
Bağlantılar