透視投影矩陣的一些概念


 

圖一

image

 

透視矩陣把物體投影到一個距離攝像機為N的一個平面上,用圖一可以看,我們把P投影近裁剪面P’點

我們定義兩個點

imageimage

根據相似三角形原理我們得到公式1

image

那么

image因為z值永遠都是N,但是我們可以用來存儲一些其他信息,比如原來的Z值

換種寫法

image

用齊次坐標系表達的話

image

那么我們根據P P’推導下投影矩陣

 

image

得到投影矩陣

image

到這里我們 image。經過除以齊次坐標得到真正的投影空間坐標。一般透視矩陣讓人難於理解是因為,他還把其他一步功能糅雜在里面,把兩步操作隱藏在一個矩陣中。

我們知道Camera可是區域是個梯形椎體,在計算中,對於計算機的椎體的裁決(裁剪掉攝像機外圍的不可見點)計算比較復雜。我們如何使裁剪變的更容易呢。如果所有的都變換的一個規正的形狀中就比較好了,比如說一個立方體或者一個長方體中。這樣就比較好判斷。只要根據長寬高比值比較就可以判斷是否在攝像機的中,如果不在就剔除掉。所以在透視矩陣是分為兩步 透視乘法變換,變換到canonical view volume(CVV)規則觀察體。在中間還有一步是CVV裁剪。后面再進行透視除法,得到真正的投影點

。我們今天只討論透視乘法和透視除法兩步。我們這里先討論DX情況下CVV空間,OpenGL參數有些差異。等下說明,原理一樣

image

image

我們在先在DX情況下討論。

先說下Z軸,Z軸在[0,1]我們定義近的裁剪面距離為N,遠的裁剪面距離為F,

image

變換得到

image

 

那么投影矩陣現在可以寫成

image

 

現在計算X軸和Y軸 x在[-1,1] y[-1,1],定義屏幕左右邊界為 right和left  屏幕上下邊界為 top和bottom

image

 

先計算X軸的情況

image

我們這里分為兩種情況,一種是特殊,一種是普通

特殊情況是 right left 大小相同 一正一負,投影點正好在屏幕中心點

另一個通用的是左右兩邊不對稱。投影點不在屏幕中心點

我們先討論特殊情況,也是我們一般碰到的,屏幕的中心在投影點,左右對稱

那么上面公式可以變換成

image

我們可以發現在公式中

image

定義屏幕寬是640分辨率,中心是0 右邊是-320 左邊是 320

image

得到

image

image

同樣

image

現在的投影點p'寫成

image

那么我們根據P P’推導下投影矩陣

image

那么現在的投影矩陣是

image

這個就是我們推導的投影矩陣了,我們同樣跟MSDN的

D3DXMatrixPerspectiveLH

https://msdn.microsoft.com/en-us/library/windows/desktop/bb205352(v=vs.85).aspx

投影矩陣比對下

image

image

 

發現是一樣的,證明推導沒錯。

MSDN里面還有種寫法是傳入參數 屏幕的寬高比 和 鏡頭視角大小

D3DXMatrixPerspectiveFovLH

https://msdn.microsoft.com/en-us/library/windows/desktop/bb205350(v=vs.85).aspx

image

這里鏡頭視角是取Y-Z平面的視角大小,我們也可以用X-Y平面看推導出來。但是推導出投影矩陣的有差異

image

如圖根據三角函數我們可以推導出以下公式

image

那么矩陣中 元素我們可以換種寫法

image

根據寬高比

image

那么投影矩陣可以寫成

image

我們跟MSDN里面的對比下是一樣的

image

 

繼續我們剛剛討論 屏幕中心不在投影點的情況,那么就沒有消除

image

 

image

 

同樣

image

 

現在P'的寫法

image

反推導矩陣

image

 

image

MSDN里面

D3DXMatrixPerspectiveOffCenterLH

https://msdn.microsoft.com/en-us/library/windows/desktop/bb205353(v=vs.85).aspx

就是這種推導,比對下

image

當我們屏幕中心在投影點的時候 Left+Right = 0 Top+Bottom =0 ,代入,其實和特殊矩陣是一樣的

 

OpenGL 待續


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM