Displaylist Kullanımı

Displaylist Kullanımı:

Displaylist 'ler uygulamalarımızda bize hızlı işlem yapma olanağı kazandıran oldukça yararlı yapılardır. Basit olarak: bir dizi OpenGL komutunu çalıştırılmak üzere bir displaylist içine toplarsınız ve o listeyi oluşturursunuz. Daha sonra bu displaylist 'i uygulama komutunu her verdiğiniz zaman yaptığınız tüm işlemler hızlı bir biçimde OpenGL sistemi tarafından uygulanır.

Displaylist 'leri kullanmanın şüphesiz en büyük getirisi bize hız kazandırmalarıdır. Örneğin bir dizi OpenGL işlemini (çizim, transformasyon, durum değişimi vb.) devamlı olarak uygulamanız gerektiği durumlarda displaylist 'ler içerisinde bu uygulamayı yaparsanız bu komutların daha hızlı biçimde gerçekleştirildiğini görürsünüz. Çünkü her görüntü oluşturma işlemi sırasında poligon çizimleri ile ilgili emirler ve durum değişikliği komutları OpenGL sisteminde görüntü oluşturma döngüsü içerisinde en baştan işlenmek zorunda olacaktı. Displaylist içerisinde bu komutları verdiğiniz zaman ise, OpenGL sistemi gerekli optimizasyonları yapar ve displaylist 'i uygulama komutu geldiğinde içindeki yönergeleri daha hızlı bir biçimde işler.

Şimdi basit bir örnek ile diplaylist kullanımını görelim. İlk olarak OpenGL sisteminden oluşturacağımız displaylist için kullanacağımız bir tanıtıcı numara (id) istiyoruz.

int id;
id = glGenLists(1);


OpenGL sistemi içerisinde birçok displaylist tanımlayabilirsiniz. Her displaylist diğerinden bir sayı ile ayrılır. Yukarıdaki fonksiyon sistemden böyle bir numara almamızı sağlar. Şimdi ise bu numarayı kullanarak diplaylist oluşturma komutunu verelim:

glNewList(id,GL_COMPILE);

İlk parametre biraz önce aldığımız id değeridir. İkinci parametre ise diplaylist 'in türünü belirtmekte kullanılır. Bu parametre neredeyse tüm pratik kullanımlarda GL_COMPILE şeklinde olmalıdır. Artık sırada displaylist içine istediğimiz OpenGL komutlarını girmeye geldi. Bu komutlar diplaylist çağırıldığı zaman otomatik olarak uygulanacaktır. Biz örneğimizde kırmızı bir üçgen çizdirelim:

glColor3f(1,0,0);
glBegin(GL_TRIANGLES);
        glVertex3f(-0.5,-0.5,0.0);
        glVertex3f(0.5,0.0,0.0);
        glVertex3f(0.0,0.5,0.0);
glEnd();

Son olarak ise diplaylist 'i sona erdiren komutu kullanmalıyız.

glEndList();

Artık displaylist 'imiz oluşturulmuş ve kullanılmaya hazır haldedir. Şimdi programlarınızda bir üçgen çizdirmek istediğiniz herhangi bir yerde glCallList(id); diyerek diplaylist 'i uygulayabilir ve kırmızı üçgeninizi çizdirebilirsiniz. GLUT programlarınızda renderScene() yordamı bu çağırımı yapmanız gereken yerdir.

glCallList(id);

Displaylist 'ler OpenGL uygulamalarınızı daha hızlı hale getirmek için kullanabileceğiniz en basit ve kullanımı kolay yöntemlerden biridir. Özellikle bir seri çizim işlemini birçok defa uygulamanız gerektiği durumlarda diplaylist 'leri kullanmanızı şiddetle tavsiye ederim.

Deniz Aydınoğlu :: 2002 ::




Bu yazının bulunduğu site: OyunYapimi.org
http://www.oyunyapimi.org

Bu yazı için adres:
http://www.oyunyapimi.org/modules.php?name=Sections&op=viewarticle&artid=11