OpenGL之變換

OpenGL之變換

渲染3D場景時頂點在最終被渲染到屏幕上之前需經過四類變換

變換(TRANSFORMATION) 簡介
視圖變換(VIEW transformation) 設定攝影機CAMERA的位置
模型變換(MODEL transformation) 移動、旋轉、縮放多邊型模型,將模型局部坐標轉為世界坐標.
投影變換(PROJECTION transformation) 設定視口面積和裁剪平面,用於確定那些多邊型模型位於視口之內.
視口變換(Viewport transformation) 將剪切坐標影射到2D視口(屏幕)
模型視圖變換(modelview transformation) OpenGL將視圖變換與模型變換組合成單獨的模型視圖變換

視圖變換(VIEW transformation) 即攝影機的設定有三種放法,先將觀察矩陣載入單位矩陣glLoadIdentity();相機為於原點,朝向為負Z軸,上方向量為正Y軸.

視圖變換(VIEW transformation) 簡介
gluLookAt () 設定攝影機的位置和方向
glRotatef ()與glTranslatef() 攝影機CAMERA固定在原點,使用旋轉和平移在世界坐標中移動所有模型

模型變換(MODEL transformation)是指通過平移、縮放、旋轉將模型定位與定向

模型變換(MODEL transformation) 簡介
平移glTranslatef() 模型沿向量進行移動
旋轉glRotatef() 模型繞向量進行旋轉
縮放glScalef() 在XYZ三軸指定不同縮放係數放大或縮小模型

投影變換(PROJECTION transformation)是指設定視口面積和裁剪平面,它在模型變換與視圖變換之後執行,用於確定那些多邊型模型位於視口之內.在設定投影之前需要選擇投影矩陣堆棧glMatrixMode(GL_PROJECTION);和載入單位矩陣glLoadIdentity();OpenGL支持兩類投影

投影變換(PROJECTION transformation) 簡介
透視投影

glFrustum()

gluPerspective()

用於3D世界的顯示與真實世界一樣, 多邊型模型呈現近大遠小
正交投影

glOrtho()

gluOrtho2D()

不考濾與攝影機的距離,顯示多邊型模型真實的大小,常用於CAD軟件和2D遊戲

視口變換(Viewport transformation)發生在投影變換之後,視口是指渲染的2D窗口的大小和方向

視口變換(Viewport transformation) 簡介
glViewport() 每當窗口大小發生改變都要重設視口大小

矩陣堆棧

OpenGL的變換運算均對矩陣堆棧的棧頂進行操作.

OpenGL矩陣堆棧 簡介
Modelview Matrix Stack 模型視圖矩陣堆棧
Projection Matrix Stack 投影矩陣堆棧
TEXTURE Matrix Stack 紋理矩陣堆棧
ATTRIB Matrix Stack 屬性矩陣堆棧
CLIENT ATTRIB Matrix Stack 剪切屬性矩陣堆棧
NAME Matrix Stack

 

評論