1. 程式人生 > >OpenGL 投影矩陣的推導

OpenGL 投影矩陣的推導

計算機顯示器是一個2D平面。OpenGL渲染的3D場景必須以2D影象方式投影到計算機螢幕上。GL_PROJECTION矩陣用於該投影變換。首先,它將所有定點資料從觀察座標轉換到裁減座標。接著,這些裁減座標通過除以w分量的方式轉換到歸一化裝置座標(NDC)。本文主要推導正交投影矩陣和透視投影矩陣。

注意NDC和相機座標系的不同,NDC是左手座標系,方向和相機座標系是相反的。下圖是正交投影視景體和NDC座標系的比較

OpenGL <wbr>投影矩陣的推導

透視投影

函式1:void glFrustum(GLdouble  left,GLdouble  right,GLdouble bottom,GLdouble  top, GLdouble  

nearVal,GLdouble  farVal);

left,right指明相對於垂直平面的左右座標位置

bottom,top指明相對於水平剪切面的下上位置

nearVal,farVal指明相對於深度剪切面的遠近的距離,兩個必須為正數

矩陣推導:

OpenGL <wbr>投影矩陣的推導

函式2:gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)

這幾個引數分別用於建立透視投影的視景體:

fovy:指定視景體的視野的角度,以度數為單位,y軸的上下方向

aspect,這個好理解,就是實際視窗的寬高比,即x/y

zNear,這個呢,表示你近處,的裁面,

zFar表示遠處的裁面,

矩陣推導:(對應於下圖第二列的情況)

OpenGL <wbr>投影矩陣的推導
   OpenGL <wbr>投影矩陣的推導

正交投影 

函式: glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdoublenear,GLdouble far);

這幾個引數分別用於建立平行視景體的左右上下邊界以及遠近裁剪面的為位置。

矩陣推導:

OpenGL <wbr>投影矩陣的推導

關於投影變換的經典例程:

文章參考:http://www.songho.ca/opengl/gl_projectionmatrix.html