OpenGL ile Perspektif

Yazan : Şadi Evren ŞEKER

OpenGL kullanılarak perspektif değerlerinin 3 boyutlu uzayda uygulanması için aşağıdaki verilerin belirlenmesi gerekir:

Yukarıdaki maddelerden ilki opengl ortamında, glLookAt fonksiyonu ile programlanmaktadır.

glLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);

Yukarıdaki değerleri verilen fonksiyonun kullanımı aşağıdaki şekilde gösterilmşitir:

Buna göre eye (x,y,z) değerleri kameranın konumunu, at(x,y,z) değerleri kameranın baktığı noktayı ve son olarak up(x,y,z) değerleri de kameranın baktığı yönle nasıl bir açı yaptığını (bu eksen etrafında ne kadar döndürüldüğünü) belirlemek için kullanılan kerteriz noktalarıdır.

Yukarıdaki maddelerden sonuncusu olan perspektifin çizim ortamında uygulanması da aşağıdaki şekilde gösterilmiştir:

Yukarıdaki şekilde, solda duran bir kameranın, sağdaki bir çizim ortamını nasıl görüntülediği tasvir edilmiştir. Burada 6 adet değer perspektifin hesaplanması ve kamera görüntüsünün oluşturulmasında önemli rol oynar:

Yukarıda verilen bu değerlere göre bir çizim ortamının uzak ve yakın iki limit arasındaki perspektifini alıp bir kamera görüntüsü üzerine yansıtmak mümkün olabilir.

Bu işlem sırasında aşağıdaki matris (masfuf) kullanılır:

		   (					   )
		   |  __________			   |
		   |  right-left       0       A       0   |
		   |					   |
		   |	  0	  __________   B       0   |
		   |		  top-bottom		   |
		   |	  0	       0       C       D   |
		   |					   |
		   |	  0	       0       -1      0   |
		   (					   )

Yukarıdaki bu matirs perspektifi hesaplarken aşağıdaki komutu kullanmaktadır:

	  void glFrustum( GLdouble left,
			  GLdouble right,
			  GLdouble bottom,
			  GLdouble top,
			  GLdouble zNear,
			  GLdouble zFar	)

Dolayısıyla perspektifin uygulanması istenen bir çizim alanında glFrustum fonksiyonu yukarıdaki parameterelerle çağırılarak 3 boyutlu uzayda iki ekran (yakın ve uzak ekranlar (clipping window)) arasındaki perspektifi hesaplamaktadır.

Bu hesaplanma sırasında uygulanacak olan perspektif ise gluPerspective fonksiyonu ile aşağıdaki şekilde verilir:

gluPerspective (theta, aspect, dnear, dfar)

Bu fonksiyondaki theta perspektifin yaptığı dönüş açısını, aspect en/boy oranını, dnear ve dfar ise sırasıyla yakın ve uzak perspektif panellerine olan uzaklığı vermektedir.  gluPerspective ve glFrustum fonksiyonları aşağıdaki gibi beraber kullanılırlar:

glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0, 1.0, 1.5, 20.0);
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
glMatrixMode (GL_MODELVIEW);

Yukarıdaki örnekte MatrixMode öncelikle projection’a ayarlanmmış ardından Birim matris ile şekil değiştirme matrisi atanmış ve ilgili perspektif değerleri çizim ortamına uygulanmıştır.

yukarıdaki kodda glFrustum fonksiyonuna verilen değerlere bakıldığında sol-sağ aralığı 1.0 ile -1.0 aralığında , üst-alt aralığı da 1.0 ile -1.0 aralığında olmaktadır. Dolayısıyla bir kare görüntü kameraya yansıtılacak ve şekillerin en/boy oranı 1′e 1 olarak görüntülecenektir. Ayrıca yakın düzlem 1.5 ve uzak düzlem 20 olarak verilmiştir. Bunun anlamı bu uzaklıklar arasında kalan şekiller gluPerspective fonksiyonunda verilen perspektif değerlerine göre yansıtılacaktır.

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


201 views

Leave a Reply


altı - 2 =

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'OpenGL ile Perspektif' isimli yazı 02 Dec 2008 tarihinde, saat: 06:39 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam201 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)