OpenGL Projeksiyon Matrisleri

Ortografik projeksiyon :

Ortografik Projeksiyon

OpenGL de kamera koordinat sistemi eksenlerinde tanımlanan dikdörtgen hacime görünüm hacmi (view volume) denilir. Bu hacmi bir kutu ve 6 tane düzlem ile belirleriz bunları tanımlayan 6 sayı kamera merkezinden her düzlemin uzaklığıdır. Bu sayılar sol,sağ,alt,üst,yakın,uzak (left,right,bottom,top,near,far) isimleri ile tanıtılır. Uzak - yakın doğrultusu derinlik olarak adlandırılır ve bu değerler her zaman pozitif verilir. Diğer değerler için işaret önemlidir. Derinlikler ise kameraya olan mesafe olarak düşünülür ve pozitif rakamlar ile tanımlanır.

Ortografik projeksiyonda kameradan uzaklaştıkça küçülme etkisi olan perspektif daralma yoktur. Mekanik parçaların çizimi için uygundur.

Ortografik (paralel) projeksiyon için 4x4 dönüşüm matrisi aşağıdaki şekilde tanımlanır.

\[\begin{pmatrix} \frac{2}{\text{sağ} - \text{sol}} & 0 & 0 & -\frac{\text{sağ} + \text{sol}}{\text{sağ} - \text{sol}} \\ 0 & \frac{2}{\text{üst} - \text{alt}} & 0 & -\frac{\text{üst} + \text{alt}}{\text{üst} - \text{alt}} \\ 0 & 0 & -\frac{2}{\text{uzak} - \text{yakın}} & -\frac{\text{uzak} + \text{yakın}}{\text{uzak} - \text{yakın}} \\ 0 & 0 & 0 & 1 \end{pmatrix} \]

Matris Satırlarının Açıklamaları:

İlk sıra:
\[\frac{2}{sağ-sol}\] X koordinatlarını [sol,sağ] aralığından [-1,1] aralığına ölçekler.
0 Y doğrultusunda kesme (shearing) yok.
0 Z yönünde kesme yok.
\[-\frac{sağ+sol}{sağ-sol}\] X koordinatlarını [-1,1] aralığında merkezlemek için taşıma.
İkinci sıra:
0 X yönünde kesme yok.
\[\frac{2}{üst-alt}\] Y koordinatlarını [alt,üst] aralığından [-1,1] aralığına ölçekler.
0 Z yönünde kesme yok.
\[-\frac{üst+alt}{üst-alt}\] Y koordinatlarını [-1,1] aralığında merkezlemek için taşıma.
Üçüncü sıra:
0 X yönünde kesme yok.
0 Y yönünde kesme yok.
\[-\frac{2}{uzak-yakın}\] Z koordinatlarını [yakın, uzak] aralığından [-1,1] aralığına ölçekler.
\[-\frac{uzak+yakın}{uzak-yakın}\] Z koordinatlarını [-1,1] aralığında merkezlemek için taşıma.
Dördüncü sıra:
0 X yönünde kesme yok.
0 Y yönünde kesme yok.
0 Z yönünde kesme yok.
1 Homojen koordinatlar değişmedi.

glOrtho Fonksiyonu:

glOrtho fonksiyonu argümanları ile sağ, sol, üst, alt, yakın, uzak değerleri ayarlanabilir.

Bu değerler görüntüleme hacminin sınırlarını belirler ve projeksiyon matrisinin hesaplanmasında kullanılır.

Perspektif Projeksiyon

Ortografik Projeksiyon

Perspektif projeksiyonda kameradan uzaklaştıkça daralma oluşur. Görüntü hacimi (view volume) artık bir dikdörtgen prizma ile gösterilir. Uzaktaki nesneler küçüldüğü için görüntü hacmi büyür prizma bunu görselleştirir. OpenGL perspektif matrisi daralma etkisini nesneleri küçülten bir ölçekleme dönüşümü ile sağlar. Matris aşağıdaki gibidir

Önemli Parametreler:

Aspect: Görüntü oranı (w/h)
fovy: Dikey görüş açısı
Near: Yakın kesme düzlemi
Far: Uzak kesme düzlemi

Perspektif Projeksiyon Dönüşüm Matrisi:

\[ \begin{pmatrix} \frac{2\cdot yakın}{sağ-sol} & 0 & \frac{sağ+sol}{sağ-sol} & 0 \\ 0 & \frac{2\cdot yakın}{üst-alt} & \frac{üst+alt}{üst-alt} & 0 \\ 0 & 0 & -\frac{uzak+yakın}{uzak-yakın} & -\frac{2\cdot uzak\cdot yakın}{uzak-yakın} \\ 0 & 0 & -1 & 0 \end{pmatrix} \]