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