梳理 Opengl ES 3.0 (三)頂點坐標變換


先來個宏觀上的理解:

其實這塊邏輯是個標准流程,而且其他地方介紹的也很多了,這里簡單提下。

坐標轉換,其實是不同坐標系之間的變換,一個渲染頂點,要想讓它呈現在屏幕上的某個位置,是需要讓這個頂點經過一個個坐標系的變換來進行的,每經過一個坐標系,它的坐標就會使用矩陣來執行變化一次,最終變化成為屏幕上的位置。

第一個Object Coordinates,這個比較好理解,就是模型的局部坐標系。這種坐標一般是美術建模的時候就會設定的,當然使用程序代碼繪制出來的坐標自然是代碼指定的。

比方說,一個坦克,美術在設計時,模型的幾何中心點就作為了整個模型的坐標原點,那么炮管上某個頂點的位置就是相對於幾何中心的一個偏移,假定為(0,1,1)。

第二個World Coordinates。還是坦克的例子,當游戲運行時,顯然是會把坦克擺放在場景里的某個出生點位置,假定為(500,500,1000)的位置,這個位置是相對於整個關卡的原點的。這一步的坐標變換,就是要計算出指定頂點相對於這個關卡原點的坐標。這個就是世界坐標了。

第三個Eye Coordinates。到這一步,坐標原點變成了攝像機的位置,以攝像機為原點,計算出指定頂點的坐標。

第四個Clip Coordinates。這一步最重要的是投影矩陣的構建,這個矩陣的推導過程,在這里,是應該要仔細研究下。重要的是帶了個w參數,用來計算下一步的NDC

所謂投影,就是投到了近裁剪面上。

 

 

 第五個,Normal Device Coordinates.

 

這個圖僅供參考。其實就是把上一步計算出來的坐標,映射成一個比例關系的坐標,這個比例是這樣對應的,假設視錐體的四個面為Left,Right,Bottom,Top,Near,Far

X域的值,從 [Left,Right] 映射到 [-1,1]

Y域的值,從 [Bottom,Top] 映射到 [-1,1]

Z域的值,從 [Near,Far] 映射到 [-1,1]

如果指定的頂點在視錐體里,就會被映射到這個Cube里,這個坐標系的中心點是(0 ,0, 0)。

第六個,windon coordinates.其實就是窗口坐標轉換了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM