3 回答

TA貢獻2019條經(jīng)驗 獲得超9個贊
這里有些混亂。
在此處輸入圖片說明
OpenGL 在對象空間和世界空間中是慣用右手的。
但是在窗口空間(又稱屏幕空間)中,我們突然左手了。
這是怎么發(fā)生的?
我們從右手到左手的方式是在glOrtho或glFrustum投影矩陣中輸入負的z縮放比例。將z縮放為-1(同時保持x和y不變)具有更改坐標系的手性的效果。
對于glFrustum,
far和near應(yīng)該是正數(shù),far > near。說遠 = 1000,近 = 1。然后C =-(1001)/(999)= -1.002。
有關(guān)更多詳細信息和圖表,請參見此處。
從正交角度看,glOrtho生成如下矩陣:
在此處輸入圖片說明
在此,left,right,bottom和top只是左垂直,右垂直,底部水平,頂部水平剪切平面(resp)的坐標。
在近及遠的飛機,然而,在不同的規(guī)定。的鄰近參數(shù)定義為
Near:到更近的深度裁剪平面的距離。如果平面要在查看器后面,則此距離為負。
遠:
zFar 到更遠的深度裁剪平面的距離。如果平面要在查看器后面,則此距離為負。
這里我們有一個典型的規(guī)范視圖
典范
因為z乘數(shù)是(-2 /(far-near)),所以負號有效地將z縮放為-1。這意味著“ z” 在視圖轉(zhuǎn)換過程中是左旋的,這對于大多數(shù)人來說并不為人所知,因為他們只是在OpenGL中作為“右手”坐標系工作。
所以,如果你打電話
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
然后NEAR PLANE 在你前面10個單位。你在哪?為什么在原點處將x軸向右,將y軸置于頭頂上,而將鼻子指向負z軸(這是默認設(shè)置,“默認情況下,攝像頭位于原點,指向負z軸,并且具有(0,1,0)的向上矢量。“)。因此,近平面位于z = -10。遠平面在您身后10個單位,z = + 10。

TA貢獻1829條經(jīng)驗 獲得超9個贊
僅NDC
您應(yīng)該只注意到OpenGL只知道NDC!那是左手坐標系。
無論您使用哪種坐標系-左手坐標系還是右手坐標軸坐標系-都需要鏡像到NDC。如果愿意,您可以將世界空間完全作為左手坐標系處理。
為什么我們通常在世界空間中使用右手坐標系?
我認為這很傳統(tǒng)。就是這樣。也許它只是想?yún)^(qū)別于DirectX。
- 3 回答
- 0 關(guān)注
- 2501 瀏覽
添加回答
舉報