3 回答

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

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