Opengl’den Directx’e geçiş dönemi

Gerçekten sancılı bir dönemmiş. Henüz directx e yeni başladım ve opengl den ne kadar çok farklı olduğu görülebiliyor.

En başta glut tarzı bir çok işi basitleştiren bir arayüzün (bir adı vardı ama unuttum şimdi) yokluğu hissettiriyor. Bir pencere açabilmek ve bunu opengl e bağlamak glut ile hazır fonksiyonlar ile yapılırken directx de her şeyi biz yapıyoruz. Tabi bu çok daha fazla esneklik sağlıyor ve daha iyi öğrenmemize yarıyor ama en basit uygulamalar için bile fazladan ~200 satır kod anlamına geliyor. Çoğunlukla copy paste olsa da okunabilirliği feci oranda düşürüyor. Aslında bir ara bunları basitleştirecek bir kütüphane yazmak geliyor içimden ama ondan önce öğrenecek çok şey var.

Bir diğer sıkıntı da opengl de tek bir fonksiyonla yaptığımız şeylerin directx de çok uzun sürmesi. Mesela glRotatef yerine şöyle bir şey diyoruz.

[code language='c++']

D3DXMATRIX matRotateY;
D3DXMatrixRotationY(&matRotateY, index);
d3ddev->SetTransform(D3DTS_WORLD, &(matRotateY));
[/code]

Bizleri düşünen birisi bunun için hazır bir kütüphane yazmış, çok hoş duruyor ama henüz kullanma fırsatım olmadı.

http://www.adamdawes.com/programming/windows/directx_matrixtransforms.html

Bir diğer zorluk da bana sanki directx için daha az kaynak var gibi geliyor. opengl de herhangibir konuda bir yığın örnek bulunabilirken directx’de bu durum daha sıkıntılı gibi.

Directx te şu an en çok ilgilendiğim konu shader lar. Basitçe tanımlamak gerekirse shader dediğimiz GPU üzerinde çalışabilecek programcının yazdığı uygulamalar. 3 çeşidi var: vertex shader, pixel shader ve geometry shader.

c++ dan farklı bir dil HLSL: ile yazılıyor. Açılımı High Level Shading Language ama gözüme o kadar da ‘high’ gelmedi. Ama bir diğer seçenek olarak assembly ile de yazılabiliyor ki buna göre tabi çok daha yüksek seviye kalıyor tabi =)

Şurada shader lar için basit bir kaç örnek var (ayrıca oyunu da oynayın muhteşem yapmış adam)

http://www.facewound.com/tutorials/shader1/

Öğrendikçe daha ayrıntılı bilgiler vermeye çalışacağım, kendime iyice kavramak için bir yaz süre vardım, fazla bir sayılır ama yazın sıcağında pek heves kalmıyor =)