[線代] 透視矩陣意義
大家好
是這樣的
小弟最近剛接觸到需要利用C++寫繪圖相關的東西
而說到繪圖就必須提到openGL這個東東
在寫openGL的時候有遇到需要了解一些線代的東西
由於推導過程中並不是很懂
所以就來請教大家了
根據查到的資料
一般真實世界所看到的東西,以及對應的坐標系
若是想要轉換到螢幕讓我們看見
(簡單的說就是要將3D的東西轉換到2D平面並讓我們看起來有立體的效果)
就必須透過投影坐標轉換,而且是非線性的
其中座標轉換又有分透視矩陣以及正交矩陣兩種
專門教Direct3D/openGL繪圖的參考書有直接告訴我最終的轉換矩陣為何
以openGL為例
我手邊的書告訴我透視矩陣的值為
[ W/H * cot(0.5*θ) , 0 , 0 , 0 ]
Proj4*4 = [ 0 , cot(0.5*θ) , 0 , 0 ]
[ 0 , (Zf+Zn)/(Zn-Zf) , 0 ,0 ]
[ 0 , 0 , 2*Zn*Zf/(Zn-Zf) ,0 ]
其中Zn為近平面 (near plane)
Zf為遠平面(far plane)
W,H分別為螢幕的寬與高
我想知道這個矩陣是怎麼推出來的? @@
上網查了一下
找到一個說明似乎比較詳細的
(簡體網址,不喜勿入)
http://wenku.baidu.com/view/176cd766ddccda38376baf53.html###
雖然他是推導direct3D版的
前面也都至少還能看得懂
但在投影片第93,94頁就不懂了
這邊看不懂為何要令 w = Pz
還有在第95頁令第四列第三行元素是為 1
@#$%^&*....
更別提之後令啥Pz =α*z+β了
這部分我想了很久都還是想不出來
也不知道是不是他寫錯或是我哪裡沒搞懂 @@
所以就上來請教大家了
如果發問過程中有術語或觀念弄錯的也請大家不吝指教了
在此就先謝謝大家囉!
--
▍ ▍ ╯╰ ╯╰ ◢◣ ◢◣ 我最愛的 柏柏龍~ 柏柏龍~
◢██◣ ╮╭ ▎▎╮╭ ▎▎ 柏柏龍~ 柏柏龍~
⊙ ⊙ ◢ ◣ ⊙ ⊙ ◣ 人人心中都有柏柏龍~
≡ ▼ ≡ ▲▲ ● ● ≡ ▼ ≡ ■ ■ ■ ■ 憤怒就永遠不會消失~
皿 ◢⊙⊙◣ ≡皿 ≡ 皿 炸是最美的擁有~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.179.30