Home Index Search Links About Us
[LinuxFocus Image]
[Navegation Bar]
  News   Archives   Companies   Tips  

3 Boyutlu G�r�n�m

Yazar: Miguel Angel Sepulveda

�eviri: Burcu Sar�soy


Di�er konular� �zerinde uzunca bir gezinimden sonra 3 boyutlu grafikleri OpenGL alt�nda tart��mya var�yoruz. S�ze yalan s�yleyerek bunun kolay oldu�unu s�ylemenin alemi yok , ��nk� kolay de�il. 3 boyut uygulamalar�n�n iyi OpenGL programc�lar� �zellikle animasyonlar Cebir , Analitik Geometri Fizik (Mekanik) ve elbette biraz da say�sal analizde bilgili olmal�lar.

 Bu serilerin kalan k�sm�n� herkes i�in elimden geldi�ince anla��l�r d�zeye indirmeye �al��aca��m. Maalesef gereken �eylerden sadece bir ka�� olan  e�riye polinomik (polynomial) yakla��m y�zeyler ve d�zlemin �� boyutlu uzaydaki matematiksel g�sterilimi , vekt�rler, matrisler hakk�ndaki bilgileri size veremem.

  Ge�en haftalar boyunca bu kar���k konuyu nas�l b�y�k bir kitlenin anlamas�n� sa�lar�m diye d���nd�m. standart kitaplar ad�m ad�m yakla��m izlerler. Ben de ge�en iki  makalemde hemen hemen ayn� y�ntemi izledim. Bu yolu daha fazla takip etmemeye karar verdim ��nk�  her okuyucunun kendi kodunu yazma noktas�na gelmesi uzun zaman alacakt�. Bunun yerine ba�ka bir   metodu   kullanmaya c�ret ettim. Bunu "�ok tedavi" olarak adland�rmaya karar verdim .Bu makale benim 3 boyutlu similasyonlar�mdan bir tanesinin demosunun kodunu i�erecek, ve ben bu kodu bit bit a��klamaya �al��aca��m. Asl�nda standart OpenGL kitaplat�nda normal olarak i�lenenleri detayl� bi�imde a��klayaca��m. Fakat inan�yorumki aniden sona atlamak ve okuyucuya kod �rneklerini baz� ilgin� �eylerle vermek kullan�c�lar�n kodlar� denemesini ve baz� �eylerle u�ra�mas�n� sa�lar.Buna ra�men �imdilik okuyuculara her�eyin tam olarak nas�l �al��t���n� anlatamayaca��m. Umar�m ki bu methot �al���r ve insanlar bu y�ntemi daha h�zl� ve daha do�ru bulur.
 
  Ge�ti�imiz 6 ay boyunca Pittsburg �niversitesinde jel ve polimer similasyonlar�n�n geli�tirilmesini destekleyen nesne y�nelimli uygulma �zerinde �al��t�m. Bu proje �oktan tamam�yla geli�tirildi. Bilgisayar bilimlerinden pek �ok insan i�in fizik ilgin�tir , ��nk� jel basit olarak polimerlerden olu�mu� bir sinir a��d�r. Ve sinir a�lar� i�in geli�tirilmi� pek �ok teknik jel yap�lar�na uygundur. Bu uygulaman�n stripped down edilmi� birka� objesini toplad�m ve ../../common/May1998/example2.tar.gz ad� alt�nda basit bir demo olarak paketledim. Bu paket Linux'ta di�er Unix'lerde veya GLUT kurulmu� Windows 95 / NT ' de derlenebilir. Bu demo (ba�lanm�� monomerlerden olu�an zincir ) hareket halindeki tek polimeri baz� �s�larda ��zelti i�inde as�l� kal�rken g�sterir. The dynamics are tantalizing. It looks  like a snake on stimulants! It is very lively due to the collisions of solvent molecules. You will not see  the solvent, as it is taking care of through the equations of motion of the polymer.

                              Example2 polimer zinciri boyunca her d���m�n (monomerin) koordinatlar�n�
                              izler animasyonun her karesinde monomerlerin koordinatlar�nda bir k�re �izeriz ve sonra
                               monomerlerden monomerlere giden silindirleri kullanarak onlar� birle�tiririz. Ba�l�ca iki temel 3 boyutlu ��e var : K�re ve silindir. Herhangi bir molek�lde monomerler aras�ndaki uzakl�k zamanla de�i�ti�inden b�t�n ba�lant�lar� sadece bir silindir kullanarak ��zemeyiz, silindir o andaki iki monomer aras� uzakl��a ba�l� olarak tekrar �l�eklendirilmelidir.

         Soru1: 1 y�ksekli�inde bir yatay silindir ve bir k�re olmak �zere iki tane 3 boyutlu nesneye sahipsiniz. her iki nesnenin merkezi koordinatlar�n orjininde olsun. E�er polimerler hakk�nda bildi�iniz sadece d���mlerin x y z koordinatlar�n�n s�ras� ise esas silindirin polimer ba�lant�lar�n� olu�turmak i�in nas�l �l�eklendirecek, d�nd�recek ve ta��yacaks�n�z?
 
        Anlayamad���m bir sebebten dolay� bilgisayarc�lar kartezyen koordinatlar�n anlam�n� belirginle�tirmi�ler x: yatay y: d��ey z: g�zlemciye giden. Buna dikkat edin ��nk� matematik veya bilim taban�n�z varsa bu sizi kar��t�racakt�r. Animasyon penceresinin �st b�l�m�nde o anki zaman� , polimerin o anki �s�s�n� i ortalama �s�s�n� , ��zeltinin �s�s�n�, friction of the solvent ve d�� kameran�n d�nme a��s�n� bilmenizi sa�layacak bir bilgilendirme banner '� var. Polimerin b�t�n y�zlerini tam olarak g�stermek yerine kamera polimerin etraf�nda yava��a d�ner.

         Ger�ekten benim bu demo i�in se�ti�im polimer uzunlu�u polimerin kendi d�nmesini gerektirmeyecek kadar k�sa example2.cxx dosyas�ndaki POLYMERLENGTH tan�m�n� 2 ile 100 aras�nda de�i�tirebilirsiniz. Kameran�n d�nmesinin sebebi kullan�c�n�n g�r�ne bir problemi yani (koordinat sisteminin de�i�mesi) canland�rmas�n� istememdir. Ve hareket denkemlerinde kullan�lan d���mlerin koordinatlar� kullan�c�n�n bak�� a��s�na ba�l� de�ildir. (Genel kordinatlardad�r)  Bu koordinatlar bilgisayar ekran�n�n iki boyutlu x-y koordinatlar�na d�n��t�r�lmelidir. G�r�� a��s�n�n her de�i�ti�inde polimer i� koordinatlar�n� iki boyutlu ekran koordinatlar�na �eviren form�ller de�i�ir.

        Soru 2: Bu problemi nas�l ��zersiniz? hareket denklemlerinin genel koordinatlardan iki boyutlu viewpoint koordinatlar�na d�n��t�r�lmesi �ok fazla cebir gerektirdi�inden konumuzun d���ndad�r. ��nk� uygulanmas� �ok zordur ve pek �ok hata olu�abilir.
 
         �kinci sorunun cevab� �ok basit sadece bir se�ene�imiz var : 3 boyutlu polimer modelinin genel koordinatlarda ifadesi ve bu koordinatlar�n �er�evenin (frame) render edilmesi s�ras�nda iki boyutlu g�r�� noktas� (viewport) koordinatlar�na �evrilmesi. Bu d�n���m� yapmak i�in OpenGL genelde donan�m d�zeyinde desteklenir .(OpenGL kart� olanlar fark� g�rebilirler) Ama OpenGL'in bu konuya nas�l yakla�t���n� incelemeden �nce isterseniz 3 boyutlu genel koordinatlardan  2 boyutlu pencere koordinatlar�na ge�i�te ka� tane d�n���m yap�ld���na bakal�m.

                                                                        �ncelikle Modelview koordinat d�n���m� gelir.
                                                                        Bu d�n���m genel koordinatlar� g�zlemcinin g�zlerinin
                                                                        ( kamera ) yerine ba�l� 3 boyutlu g�z koordinatlar�na
                                                                        d�n��t�r�r. Bu d�n���m�n Modelview olarak adland�r�lmas�n�n
                                                                        sebebi, bu d�n���m�n benzer pek�ok aral�klara uygulanabilmesidir.
                                                                        Modelleme ve g�r�nt�leme uygulamalar�ndan ikincisi bir
                                                                        photo-camera'n�n bir st�dyoya yerlle�tirilmesi ve tam
                                                                        kar��daki g�r�nt�n�n fotograf olarak adland�r�lmas�, di�eri ise
                                                                        ilgilenilen objelerin kamera �n�ne yerle�tirilmesi olarak
                                                                        d���n�lebilir.

                                                                        D�n���m�n pipeline'�n� takip edersek  g�z koordinatlar�n�n
                                                                        projeksiyon koordinat d�n���mlerine ge�irildi�ini g�r�r�z.
                                                                        Bu d�n���m�n amac� �imdilik gizli kalacak.
                                                                        Kameran�n g�r�� y�n�nde  ve objelerin  g�r�� alan� i�ine
                                                                        yerle�tirilmesinden sonra, OpenGL g�r�n�m�n ne kadar�n�n
                                                                        bilgisayar ekran�na aktar�lmas� gerekti�ini bilmek
                                                                        isteyecektir. Orne�in, kamera �ok uzaktaki bir da�a
                                                                        y�nlendirilmi� olabilir. Bu durumda g�r�� alan� �ok b�y�k bir
                                                                        alan� belirtecektir. Bilgisayarlar sadece sonlu �eyleri ele
                                                                        alabilece�inden g�r�nt�n�n ne kadar�n� kesece�imizi
                                                                        belirtmek zorunday�z. Bu d�n���m ayn� zamanda
                                                                        gizli y�zeylerin kald�r�lmas�yla da ilgilenir. Sonda
                                                                        ula��lacak koordinatlar Clip koordinatlar�d�r. Hat�rlars�n�z
                                                                         ki, bu durum 3 boyutlu objelerin her zaman kamera �n�ne
                                                                        d��mesi i�in yeterli de�ildir. Fakat, projeksiyon d�n���m�n�
                                                                        tan�mlayan kesilmi� y�zeylerin i�inde olmal�d�r. Pek�ok 3
                                                                        boyutlu persfektif �zellikleri ( konik, ortagonal, ... ) bu
                                                                        a�amada uygulanabilir.

�u an i�in ne persfektif b�ul�nmenin ne de clip koordinatlar� ile normalle�tirilmi� ara� koordinatlar� aras�ndaki fark� incelemeye giri�meyece�iz. �imdilik bu gerekli de�il.

Son �nemli koordinat d�n���m� "G�r�� noktas� d�n���m�" . Burada,  b�t�n 3 boyutlu d�n���mlerden ge�en 3 boyutlu koordinatlar son i� olarak bilgisayar ekran�n�n 2 boyutlu y�zeyine i�lenir.

Koordinat d�n���mleri matrislerle ( iki boyutlu say� dizileri ile ) ifade edilir. Yukar�daki her bir d�n���m i�in ayr� bir matris kullan�l�r. Bu matrisler �er�eveyi render etmeden �nce program�n herhangi bir yerinde tan�mlanabilirler. OpenGL her sahnenin ba��nda birtak�m matris d�n���mlerini uygular. Bu, �ok ak�lc� ve yararl� bir tekniktir ve biz bunu daha ilerideki yaz�larda inceleyece�iz. �u an i�in, gelin kodu inceleyelim ve bu d�n���mlerin nas�l ve nerede uyguland���n� g�relim. example2.cxx dosyas�nda tan�d�k oldu�unuz yeniden �ekillendirme fonksiyonlar� var.

void mainReshape(int w,int h){

//VIEWPORT TRANSFORMATION
glViewport(0,0,w,h);

//PROJECTION TRANSFORMATION
glMatrixMode(GL_PROJECTION);
glLoad Identity();
glFrustum(wnLEFT,wnRIGHT,wnBOT,wnTOP,wnNEAR,wnFAR);

//MODELWIEW TRANSFORMATION
glMatrixMode(GL_MODELVIEW);

...............
glViewport(x,y,w,h) direktifi,g�r�nt� alan�n�n d�n���m�n� sa�lar : x ve y ��geni g�ren pencerenin sol alt k��e
koordinatlar� ve 'w' ve 'h'  de g�r�� alan�n�n boyutlar�d�r.
B�t�n numaralar pixel (parantezler) i�inde verilir.
Ard�ndan glMatrix Mode() ,son matrisi se�mek i�in kullan�l�r , planlanan d�n���m�n belirlenmesine ba�lamak i�in
GL_PROJECTION parametresiyle �ag�r�l�r. Herhangi bir matris d�n���m� belirlenmeden �nce (k��e koordinatlar�n�
etkilemeyen) birle�im matrisi y�klemek tavsiye edilir.Bu i�lem son matrisi birle�tirmeye ba�layan glLoad Identity() ile
yap�l�r. Daha sonra s�ra �� boyutlu perspektifin bildirimine gelir; glFrustum(sol,sa�,alt,�st,yaki�,uzak) cumlesi sa�,sol,alt,�st,yak�n
ve uzak pozisyonlarda kesi�en y�zeyleri bildirir.Bu numaralar g�z koordinatlar�nda belirlenir ve say�lar�n b�y�kl�kleri de g�r�nt�
alan�nda (bilgisayar ekran�) yerle�tirilen bo�luk hacimlerinin �eklini (b�ylelikle perspektifini ) belirler. Bu belki kar���k
g�runebilir;benim al��mam da bir sure ald�. Hakk�nda bir al��kanl�k kazanabilmek i�in yap�lacak en iyi �ey �esitli say�lar
denemektir; yaln�z her zaman hat�rlanmas� gereken �u ki; hangi say�y� se�erseniz se�in model-viewed (�rnek al�nan) nesne
kesi�en y�zeylerin i�inde kalmal�d�r. Aksi takdirde ekranda hi�bir �ey g�rnmeyecektir. Planlanan d�n���m�n belirlenmesi i�in
farkl� yollar da var. Zaman i�inde bu konulardan da bahsedece�iz.
Final olarak ge�erli matrisi (�rnek alinan) modelview harf kal�b�yla degi�tiririz. Bu i� i�in tekrar GL_MODELVIEW
parametresini kullanarak glMatrixMode() �zelli�inden yararlan�r�z. mainReshape() �zelli�i di�er ilgisiz �eylerle devam eder ve
biter. Burada �nemli olan �udur: As�l pencere yeniden �ekillendirilirken bu �zellik, g�r�nt� alan�n� ve planlanan d�n���m�
belirlendi. Son olarak da (�rnek al�nan) modelview matrisi ge�erli duruma getirdi.
Bundan sonra, mainDisplay() �zelli�i modelview (�rnek al�nan) d�n���m�n belirtilmesine son verir ve polimeri scene() ile
tamamlar:

void mainDisplay(){
glutSetWindow(winIdMain);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Renkleri netle�tirir ve (derinlik verir) depth buffers
//Bu ,tahtayi silmek gibidir

//MODELVIEW DONUSUMUNE DEVAM: Kameray� kur ve yerle�tir
glLoadIdentitiy(); //Birle�imi ge�erli matrise y�kle
glTranslatef(0.0,0.0,-4.0); //Kameray� 4 ad�m geri g�t�r
//kameray� -z y�n�n� g�sterir �ekilde b�rak�r�z. Asl�nda bu, arkadaki g�r�nt�y� -z y�n�nde
//4 ad�m hareket ettirerek ger�ekle�ir. Ekaranda yaln�zca izlenen hacmin i�inde kalan
//g�r�nt� elemanlar� g�z�k�r. (Daha sonra planlanan d�n�s�m k�sm�na bak�n�z)

//Zinciri olu�turmak
glSaclef(0.5,0.5,0.5);
glRotatef(Aci,0,1,0);
scene();

glutSwapbuffers();
};

Umar�m iki alt pencere kullanarak okuru �ok �a��rtmam���md�r. Sonu�lar� alt pencerelere bagl� olarak a��klam�yorum; ��nk�
bu bir �nceki b�l�mde (windows management) zaten ele al�nm��t�. E�er ��pheli olan bir k�s�m varsa l�tfen geri d�n�p haf�zan�z�
tazeleyiniz.
Bu �zellik olduk�a a��k ve basittir. �lk �nce glClear rengi siler ve (derinlik verir) depth buffers.Depth buffer (derinlik
verilmesi) simdi �� boyutta �nemlidir; ��nk� her k��enin z koordinati, sakl� y�zeyleri ve y�zeylerin yer degi�tirmesini saptamak
i�in test edilmelidir. Ardindan birle�im matrisi ge�erli modelview matris �zerine y�kleriz ve 3 modelling d�n���m� �ag�r�r�z:

glTranslate(xt,yt,zt),,bu ge�erli koordinat sistemini (xt,yt,zt) vekt�rleriyle ta��r. Bizim durumumuzda bu i�lem kameray� z'de
4 birim geri g�t�rme etkisini yarat�r ki bu da �rnekten uzaktad�r. E�er bunu yapmasayd�k kamera orjinde, sahnenin ortas�nda
kalacakt� ve �ok az �ey g�rebilecektik.
glScalef(xs,ys,zs),ad�ndan da anla��laca�� gibi koordinat sistemlerini s�ras�yla x,y,z eksenleri boyunca xs,ys,zs fakt�rleriyle
�l��lendirmeye yarar. Bu �l��lendirme koordinat sisteminin d�nyada kabul g�rm�� koordinat sistemine uymas� i�in gereklidir.
glRotatef(aci,vx,vy,vz), ge�erli koordinat sistemini (vx,vy,vz) normal vekt�r� etraf�nda belli a��larla d�nd�r�r. Bu
bizim, kameran�n d�nd�g� izlenimini vermek i�in kulland�g�m�z bir hiledir. Asl�nda d�nen sahnedir. Kameray� hareket ettirmenin
ba�ka bir�ok yolu olmas�na ra�men �u anda en kolay� budur.

Son bir uyar�: Modelling d�n�s�mlerin s�ras� �ok onemlidir. Her koordinat sistemi �ag�r���m�zda Modelview matrise ne
oldu�unu anlamam�z gerekir. Her d�n���m Ti matemaksel olarak bir Mi matrisiyle temsil edilir. Bir dizi d�n���m�n superposition
i ,Tn Tn-1....T1 (�rne�in: yer degi�tirme+�l��lendirme+d�nd�rme) matematiksel olarak bir tek matrisle temsil edilir.M=Mn
Mn-1.......M1
.S�ralama en can al�c� noktad�r; ��nk� karma��k M d�n���m� bir k��eye uyguland�g�nda d�n���mler ters s�rada ger�ekle�ir.
 

M v = Mn Mn-1 .... M1 v

Ilk olarakM1, sonraM2, vb... ve en son olarak da Mn Kod �rne�imizde transformansyonlar� yandaki s�raya g�re belirttim:
translasyon-> �l�eklendirme -> d�nm��. Bundan dolay�, d�nya koordinatlar�ndak� modelimizin her noktas� grafik ekran�na
yans�t�lmadan �nce d�nm�� -> �l�eklendirilmi� -> �evirilmis olmal�d�r.

Kod yazarken, bu transformasyonlar�n ters s�ras�n� her zaman akl�n�zda bulundurun, aksi taktirde �ok �a��rt�c� sonu�lar
bulabilirsiniz.

scene ?> fonksiyonu polimer obje uzerindeki 3D-�eviricisini �al��t�r�r. 3D modelinin sonradan nas�l in�a edildi�ini anlamak i�in
Gd-OpenGL.cxx dosyas�na gidip member fonksiyonu draw GdPolymer ? P ye bir g�z atmak gerekir. Polimer zincirindeki b�t�n
par�alardan ge�en bir ana halka vard�r ; �yle ki bu halka X, Y, Z koordinatlar�n� tekrar bulup getirir ve o b�lgede bir k�re �izer
ve sonra birbirine halen bagl� olan par�alardaki ba�lar boyunca silindirler �izer. Soru 1'i hat�rl�yor musunuz? ��te size bir olas�
��z�m ... Daha h�zl� bir ��z�m �retebilirseniz bizim de haberimiz olsun.

Okuyucunun Polimer �evirme rutinini tamamiyle anlayabilmesi i�in bir �ey daha var. glPushMatrix?> ve glPopMatrix?> ne i�e
yarar ?

Polimer modelinde sadece 2 tane geometrik temel vard�r ; biri merkezi orijinde olan 0.40 yar��apl� bir k�re, di�eri ise y�ksekli�i
1.0 yar��ap�
0.40 olan bir dogru silindir. Polimer, kureleri ve silindirleri d�zg�n bir pozisyonda yerle�tirmek i�in bu iki temeli ve
transformasyonlar serisini kullanmak suretiyle yap�l�r. glCalList ?Par�a> ve glCalList?Silindir> komutlar�ndan her biri her i�leme
konuldu�unda orijinde yeni bir k�re ve silindir �evirilmi� olur. K�releri X, Y, Z koordinatlar�na ta��mak i�in bir translasyona
ihtiyac�m�z var ?bkz. glTranlatef?X, Y, Z>>; Bir silindiri bir ara zincir gibi �evirmek ve yerle�tirmek daha zor olur ��nk� ilk
ba�ta silindiri ara zincir kadar b�y�k yapman�z laz�m ve daha sonra onu do�ru y�ne �evirmeniz laz�m. ?Benim hesap y�ntemime
g�re rotasyon transformasyon �eklinde bir derecelendirme kullan�l�r>

3D modelini inssa etmek i�in hangi metod kullan�l�rsa kullan�ls�n ona hi� ��phe yok ki o ek transformasyonlara, tranzlasyonlara
ve rotasyonlara ihtiya� olacak. scene ?> fonksiyonu �a��r�ld���nda OpenGL pozisyon makinas�ndaki mevcut matris
MODELVIEW matrisidir. Daha �nce de belirtti�imiz gibi, bu, modelin d�nya koordinatlarinin clipping koordinatlar�na
projeksiyonunu temsil eden matristir. Bu ciddi bir sorundur ; modelview matrisi hala ge�erli matris iken, 3D modelini
kurmak i�in uygulanan her ilave transformasyon ge�erli matrise eklenecek ve modelview tranformasyonunu tahrip etme
�eklindeki arzulanmaz bir sonuca yol a�acakt�r. Bununla yap�lan iki temel i�lem vard�r ; glPushMatrix?> ile uygulanan stack
push ve gl PopMatrix?> ile uygulanan pop. scene?> fonksiyonun kaynak kodunu bir kere daha inceleyiniz ve her par�an�n
k�resini tercume etmeden �nce MODELVIEW matrisini stack'in i�ine g�ndermek i�in bir kereli�ine push i�lemini �a��rd���m�zda
dikkat ediniz. Halkan�n sonunda da MODELVIEW matrisini geri getirmek i�in pop i�lemini �a��r�n�z. Polimer s�ralar�n� �eviren
i�eride bulunan halkan�n kendi push'u ve pop operasyonlar� vard�r ; �yle ki bunlar skalayi izole eder ve k�re ile silindirleri
etkileyen tranzlasyonda transformasyonlar� �evirir.

3D tranformasyonlari matris stacklari hakk�nda s�ylenecek �ok s�z yok. Bu makalede biz sadece her iki konuyu yuzeysel bir
�ekilde anlatt�k. �u an i�in bu kadarl�k bir anlat�m yeterli olur, ilgilenen okuyucunun kaynak kodunu kendisi arast�rmas� ve kendi
3D modellerini geli�tirmesi gerekir. Kod �rne�i 2'de daha �nce arast�r�lmamm�� baz� �ehreleri de kullan�r: materyaller ve
���kland�rma. Edisyonlar�n tart��mas�n� daha sonraki bir makaleye b�rak�yoruz. Bir dahaki sefere matris stacklerini ve 3D
tranformasyonlar�n� daha derin bir �ekilde anlataca��z. Hareket eden bir robotu OpenGL komutlar�yla nas�l y�nlendirece�imizi
de g�sterece�iz. O zamana kadara OpenGL ile iyi vakiti ge�irmeye bak�n.


Daha �ok Bilgi ��in:
© 1998 Miguel Angel Sepulveda
Bu sanaly�renin bak�m� Miguel A Sepulvedataraf�ndan yap�lmaktad�r.