OpenGL中的座標系與矩陣

2021-06-16 20:58:25 字數 3196 閱讀 8594

1.

opengl圖形管線(顯示流程)

模型變換(modeling transformation)

mc(

模型座標

, child ->

parent

) ->

wc(

世界座標

標準c語言的矩陣為行主序,即m[i][j]表示第i行、第j列。 opengl中的矩陣為

列主序,即m[i][j]表示第i列、第j行。 以下所有矩陣都為列主序矩陣!

mc(模型座標

) ->

wc(世界座標

3.視點

變換(viewing transformation)

wc(

世界座標

) ->

vc(觀察座標

,即觀察座標系下的區域性座標

)設定視點

glulookat(eyex, eyey, eyez,                      //視點(相機)座標

centerx, centery, centerz,       //參考點(場景中心點)座標

upx, upy, upz);                          //向上向量

opengl根據glulookat()的引數計算

視景矩陣。觀察座標係以視點為原點,以視線方向(參考點至視點方向)為+z軸。下圖中mglulookat為觀察座標轉換為世界座標的轉換矩陣, opengl中的視景矩陣modelviewmatrix為該矩陣的逆矩陣,世界座標經逆矩陣變換後變為觀察座標。

4.投影變換(projection transformation)

vc(觀察座標

)->

pc (

投影座標

)->

nc(

歸一化座標

)

設定正交投影的投影範圍

glortho(xmin, xmax,     //觀察座標系中的x範圍

ymin, ymax,     //觀察座標系中的y範圍

znear, zfar);     //觀察座標系中的z範圍

opengl根據glortho()的引數計算投影矩陣。這個矩陣的作用就是將座標進行正交投影並且將投影後的座標歸一化 (轉換到-1到1之間),且六面體的中心在觀察座標系的原點。同時右手座標系轉換為左手座標系!

投影示意圖:

5.視口變化(viewport transformation)

nc(

歸一化座標

) ->

dc (

裝置座標

)

設定視口

glviewport(x, y,           //視口的左下角座標(畫素單位)

width,        //視口的寬度

height);     //視口的高度

opengl根據glviewport()的引數計算視口矩陣。將歸一化的x,y座標值轉換為畫素座標,但z座標值(深度值)轉換為0到1之間!

opengl的畫素座標系

opengl中的畫素座標系,原點位於左下角,x軸向右,y軸向上。

OpenGL 世界座標系

世界座標系 在opengl中,世界座標系是以螢幕中心為原點 0,0,0 且是始終不變的。你面對螢幕,你的右邊是x正軸,上面是y正軸,螢幕指向你的為z正軸。長度單位這樣來定 視窗範圍按此單位恰好是 1,1 到 1,1 即螢幕左下角座標為 1,1 右上角座標為 1,1 這是採用了歸一化的結果 當前繪圖座...

OpenGL 座標系詳解

opengl最終將圖形渲染到的裝置螢幕本質上是2d的,我們對圖形進行渲染的過程就是將3d場景轉換為最終的2d場景的過程。opengl中定義的點從使用者構造模型的區域性座標系,經過模型變換轉為世界座標系,再經過視變換轉換為相機座標系,再經過投影變換轉換為裁剪座標系,再進行透視除法轉換為規範化裝置座標系...

座標系與變換矩陣

1.世界座標系和模型幾何變換 settransform d3dts world,world 物體在圖形學中通常通過乙個4x4矩陣來表示三圍物體的空間幾何變換,表示三圍物體在世界空間中集合變換的矩陣稱為世界變換矩陣,簡稱世界矩陣,在direct3d中通過為direct3d裝置介面設定世界矩陣完成其模型...