投影矩陣之z座標推導

2021-09-24 04:39:17 字數 1709 閱讀 8384

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

這是用結論去反推過程,過程再得到結論,這樣的邏輯我覺得不對,我認為,應該是先得到x,y,z各自的關係式,才去構造出投影矩陣。

推導x,y座標

向量投影到近平面,然後對映到ndc,就可以得到,在此不贅述。

(下文ze同z,都是投影前向量座標(觀察空間座標))

式1.1

式1.2

重點討論如何推導z座標

z座標的轉換關係,並不是投影得到的,而是根據我們的需要:

1、表示物體原有的前後關係。

2、對映到標準裝置座標,從(-n,-f)對映到(-1,1)(使用右手座標系)。

3、近處精度更大;因為精度有限,當場景中有許多物體時,按照重要程度來說,首先保證近處物體前後關係是正確;所以要讓近處物體的z座標有更大的表示範圍。

關鍵在於3,在這篇文章(中的深度精度部分有提到,如何讓近處有更大表示範圍,文章中是對映到(0,1),對映到(-1, 1)也是一樣的道理。

這裡我認為,不只是z' = a*1/z + b可以達到我們的需求,z' = a*1/z² + b也可以,還可以構造很多關係式都可以達到我們的需求,但是我們的最終目標是構造乙個投影矩陣,投影矩陣*向量/齊次座標=對映後的向量。

整理式1.1,式1.2

式2.1

式2.2

整理後,式2.1、式2.2分母都有ze,因此選擇z'(ndc) = a*1/z(觀察空間) + b,即可以和x,y的關係式對應起來,又滿足我們的需求

(2019.08.15補充:使用1/z還有乙個重要的原因在於,光柵化時,需要進行透視校正插值,因為z'(ndc)與1/z(觀察空間)是線性關係(證明:或《3d遊戲與計算機圖形學中的數學方法》 第3版,第5.4章節),所以z'(ndc) = a*1/z(觀察空間) + b,另外,如果z'(ndc)直接儲存為z(觀察空間) ,等到進行透視校正插值,再進行轉換,這樣做是不好的,因為透視校正插值是逐片元操作,就要重複非常多次的運算,直接儲存為a*1/z(觀察空間) + b,是逐頂點操作,運算次數就少很多)

z'(ndc) = a*1/z + b,(-n, -f)對映到(-1,1)

式2.3

式2.1,式2.2,式2.3就可以整理出投影矩陣(負號提取到分母)

投影矩陣推導

投影變換是計算機圖形學的基礎,理解並推導投影矩陣也是很有必要的。正交投影比較簡單,沒有透視失真效果 近大遠小 而透視投影比較符合人類的眼睛感知,平行線在遠處會相交於一點。投影是通過乙個4x4的矩陣來完成的,將視錐對映成標準觀察體 齊次裁剪空間 opengl採用的是右手座標系,z軸朝螢幕向外,因此觀察...

OpenGL 投影矩陣的推導

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

旋轉座標轉換的矩陣推導

旋轉座標轉換的矩陣推導 介紹略,去網上查吧 旋轉變換一般是按照某個圓心點,以一定半徑r旋轉一定的角度 為了簡單起見我們給出下面的情景 假定點a x,y 想經過旋轉變換到達b x y 已知旋轉角度 和點a座標,計算出點b 要計算點b則分別計算他的x 和y 分量 根據矩陣乘法計算規則,可以推出 只要給出...