投影矩陣推導

2021-07-04 08:00:22 字數 1610 閱讀 6795

投影變換是計算機圖形學的基礎,理解並推導投影矩陣也是很有必要的。正交投影比較簡單,沒有透視失真效果(近大遠小)。而透視投影比較符合人類的眼睛感知,平行線在遠處會相交於一點。

投影是通過乙個4x4的矩陣來完成的,將視錐對映成標準觀察體(齊次裁剪空間)。

opengl採用的是右手座標系,z軸朝螢幕向外,因此觀察方向是朝著z軸負方向的,那麼將x,y,z座標從區間[l, r], [b,t], [-n, -f]對映到[-1, 1]的函式為:

得到投影矩陣:

當然也可以用乙個平移和縮放矩陣的級聯矩陣,來達到一樣的效果。

directx則是採用左手座標系,z軸和觀察方向是一致的,因此只需要將z軸座標從[n, f]對映到[0, 1],x和y軸則和opengl是一樣的。

設p(px, py, pz, 1)是在視錐體內的一點,那麼它在近平面z=-n上的投影點,利用相似三角形原則,可以得到:

類似於正交投影,將x,y軸座標對映到[-1, 1]區間內,得到:

然而和正交投影不同,z軸的座標並不是線性的。在光柵化過程中,必須對z座標的倒數進行插值,因此需要建立1/z的對映函式,這樣就可以對投影深度進行插值,對映函式的形式如下:

將[-n, -f]對映到[-1, 1],可以得到:

解這個簡單的二元一次方程組,可以得到a,b的值

這樣就得到了z軸上的對映函式:

3d點(x, y, z)等價於齊次座標(-xpz, -ypz, -zpz, -pz),因此x,y,z分量都乘以-pz得到:

得到投影矩陣:

變換後的齊次座標,w分量為-pz,

directx的區別在於近平面為z=n,並且要將[n, f]對映到[0, 1],經過類似的計算,可以得到

《3d遊戲與計算機圖形學中的數學方法》

《實時計算機圖形學2nd》

OpenGL 投影矩陣的推導

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

投影矩陣之z座標推導

看了好幾篇關於投影矩陣的文章,在z座標的推導上,沒有提到為什麼z 和1 z成線性關係,而是通過結論中的投影矩陣,即已知z za b w,並且x和x y和y 關係式中分母都有 z,所以w為 z,然後 n,f 對映到 1,1 求出a b,得到z 和z的關係。這是用結論去反推過程,過程再得到結論,這樣的邏...

墨卡托投影推導

為啥一堆人都說墨卡托投影是從圓心向圓柱面發射線,反正我覺得不是那樣,不然公式顯然就不對了 也可能是我馬虎 後來去wiki查了一下,找到了公式的推導.x r 0 y rln tan 4 2 qquad y r ln left tan left right right x r 0 y r ln tan ...