2013-02-21 26 views
0

我最近開始學習OpenGL,並且就GL和着色器的通信而言,我已經獲得了很好的能力,但是我對座標系有點不清楚。在OpenGL中,創建透視投影矩陣對於對象的座標有什麼影響?

我使用的是OpenGL ES 2.0,所以我必須自己做所有的矩陣管理。我終於明白了以下幾點:

  1. 爲了觀察正確的結果乘以矩陣作爲模型*視*投影(這是非常合情合理的矩陣乘法是不可交換的)。

  2. 模型矩陣表示繪圖基元的縮放,旋轉,平移等。在三維空間中移動基元涉及到應用於該矩陣的轉換。

  3. 視圖矩陣表示許多人引用它的「相機」。對象與查看器之間的距離以及對象周圍的眼睛旋轉來自對該矩陣的轉換。

  4. 最後,透視矩陣表示場景存在的3D空間。我遵循一些主要使用透視方法使用視場和高寬比的示例。這是我的困惑開始的地方。

原始座標在區間+ - [0,1]中以浮點形式給出。但透視矩陣表示從近Z到遠Z的3D空間(我已經分別看到它們分別爲0和100)。我很困惑,原始的座標如何映射到這個空間。顯然,我的線性代數技巧並不像我希望他們那樣強大。任何人都可以澄清這些點如何映射到這個空間?例如,許多示例將立方體定義爲+ - (.5,.5,.5)。我使用near-z = 0,far-z = 100的透視martrix和整個顯示器的縱橫比,這是否意味着立方體總是在這些維度中的每一個的.5處?我的意思是,如果透視矩陣從x = -5到x = 5,x座標最終是0.5(-5)= -2.5?

+1

「*將矩陣乘以模型*視圖*投影*」如果這是您觀察到的,這是因爲您的矩陣是轉置的。 – 2013-02-21 19:31:34

回答

1

要了解的頂點是如何映射,你要明白什麼的Open GL確實得到他們的最終形式,稱爲頂點「標準化設備座標」空間,這從ž去= -1到z = 1

首先,將視空間頂點乘以投影矩陣。然後,頂點除以它的第4個或「w」分量。這就是所謂的perspective divide

知道這些信息後,就可以導出公式。 This page解釋了進入投影矩陣以將視圖z座標映射到投影z座標的數學運算。如果你不關心的推導,可以向下滾動才能看到最終的結果,那就是:

zn = (-(f+n) * ze/(f-n) - 2*f*n/(f-n))/(-ze) 

其中鋅是標準化設備座標Z,澤爲Z在視圖(或眼睛)座標, f是遠剪輯平面,n是近剪輯平面。

如果您檢查公式,您會注意到,如果頂點的z分量等於n,則它將映射到-1。如果它等於f,則它映射到1,在它之間,它遵循雙曲函數從-1到1。

+0

這是另一個很好的[網站](http://www.scratchapixel.com/lessons/3d-advanced-lessons/perspective-and-orthographic-projection-matrix/opengl-perspective-projection-matrix/)他們映射 – pauld 2013-02-21 22:37:34