23 Nisan 2014 Çarşamba

İz düşüm Dönüşümleri(perspektif izdüşüm) (1)

İz düşüm Dönüşümleri(perspektif izdüşüm) (1)

İz düşüm nedir
Uzaydaki bir cisim, bir düzlem önünde tutulup bu cisme karşıdan bakılacak olursa , cismin düzlem üzerine bir görüntüsü düşer . İşte cisimlerin düzlem üzerine ışık ışınları yolu ile düşürülen bu görüntüsüne İzdüşüm denir.
Openglde izdüşüm
İzdüşüm dönüşümü kamera için lens seçimini belirlemek gibidir.
projection dönüşümleri 
Bu uygulamayı inceleye bilirsiniz.
Görüş alanını göz önünde tutmanın yanında, izdüşüm dönüşümünde nesnelerin nasıl ekran üzerine izdüşümünün yaratıldığına terim olarak görebiliriz. OpenGL izdüşümleri iki temel tipi kullanmaktadır, perspektif izdüşüm, Ortografik izdüşüm.
NOT:Kod yazarken iz düşüm dönüşümlerini uygulamadan önce
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

çağırmayı unutmayın. Böylece komut model-görüntü matrisi yerine iz düşüm matrisini etkiler ve dolayısıyla iz düşüm dönüşümlerini birleştirilmez. Her bir izdüşüm dönüşüm komutu tamamen özel bir dönüşümü tanımladığından, bir izdüşüm dönüşümünü bir diğeri ile birleştirilmesi genellikle tercih edilmez.
izdüşüm dönüşümünün amacı iki şekilde kullanılabilen bir görüntüleme hacmi tanımlamaktır. Görüntüleme hacmi bir nesnenin ekrana nasıl yansıtıldığını belirler ve hangi nesne veya nesne parçasının son görüntüden kırpılacağını tanımlar. Bahsettiğimiz görüş-noktasını görüntü hacminin bir ucunda olduğunu düşünebilirsiniz.

Perspektif izdüşümler
Günlük hayatta nesneleri nasıl gördüğünüzü eşleştiren perspektif izdüşümün bir türüdür.Perspektif Cisimlerin uzaklaştıkça görünüşleri gerçek görünüşlerinden farklılaşarak ufalmasıdır.Openglde bu işlem,görüş noktasına daha yakın olan nesnelerin daha uzaktakilere oranla görüntü hacminin daha büyük bir orantısını kapladığından daha büyük görünmesini saglar ,görüntü noktasına uzak olan nesnelerde daha küçük görünmesini saglamaktadır. Bu projeksiyon metodu animasyon, görsel simülasyon ve bir derece gerçekçilik arayan uygulamalar için yaygın şekilde kullanılır çünkü çalışma şekli göz veya kameraya benzer. Openglnin İki temel perspektif komutu vardır,glFrustum(),gluPerspective()
void glFrustum(GLdouble left, GLdouble right,GLdouble bottom, GLdouble top,GLdouble near, GLdouble far);

glFrustum bir perspektif projeksiyon matrixsi oluşturur bu matrix belirlenen gecerli (glMatrixMode) matrix ile çarpılır ve görüntü hacmi elde edilir,görüntü hacmi şu parametrelerle tanımlanır: (left, bottom, -near) ile (right, top, -near),yakın kırpma düzleminin sırasıyla sol alt ile üst sağ köşelerinin (x, y, z) koordinatlarını belirler; near ve far, görüş-noktasından yakın ve uzak kırpma düzlemlerine olan mesafelerdir.



Görüntü hacmi yukarıdaki resimde gösterildiği gibi altı düzlemle çakışır. Bu düzlemlerin dışında kalan nesne veya nesne parçaları son görüntüde kırpılır. glFrustrum()’un simetrik bir görüntü hacmi tanımlamanızı gerektirmediğine dikkat edin.Fonksiyonun diger özelliklerini incelemek için opengl 2.1 referans sayfalarına bakınız.
gluPerspective()
void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear, GLdouble zFar);

Simetrik-görüntü elde etmek için bir matris yaratır ve onu geçerli matrisle(glMatrixMode) çarpar. fovy görüntü alanının yz-düzlemi içindeki açısıdır; değeri [0.0, 180.0] aralığında olmak zorundadır. aspect, genişliği yüksekliğine bölünmüş görüntü oranıdır. near ve far değerleri z-ekseni boyunca görüş-noktası ile kırpıcı düzlemler arasındaki mesafelerdir


Tıpkı glFrustrum()’la olduğu gibi, gluPerspective() ile yaratılan görüntü hacminin varsayılan yönelimini değiştirmek için de dönüş ve çeviriler uygulayabilirsiniz. Bu tür dönüşümler olmadan görüş-noktası orijinde kalır ve görüş-çizgisi negatif z-ekseninden aşağı doğru bakar.gluPerspective() ile görüntü alanı için uygun değerler seçmek zorundasınız, aksi halde görüntü çarpık görünebilir. Mükemmel bir görüş alanı elde etmek için gözlerinizin ekrandan normalde ne kadar uzak olduğunu ve pencerenin ne kadar büyük olduğunu belirleyin ve pencerenin büyüklük ve mesafe altında karşılık geldiği açıyı hesaplayın.Kamera analojisi makalesindeki kup örneginde glFrustrum()fonksiyonunu

gluPerspective(60.0, 1.0, 1.5, 20.0);



 ile degiştirip degerleriyle oynayabilirsiniz ,konuyu kavramak açısından,ayrıca opengl 2.1 referans sayfalarından fonksiyonun diger özelliklerini inceleyin.

Hiç yorum yok:

Yorum Gönder