DirectX视口变换矩阵详解
視口變換在投影變換之后,視口變換的作用是將投影平面上的點(diǎn)轉(zhuǎn)換為屏幕上的點(diǎn),這是一個(gè)縮放的過程。
投影變換的作用是將viewing frustum(視景體)中的場(chǎng)景投影到一個(gè)平面上,這個(gè)平面就是投影平面,在DirectX中,使用近剪裁平面作為投影平面(z=1),關(guān)于透視投影的矩陣求解,請(qǐng)參考透視投影詳解
視口變換則是將這個(gè)cuboid中的物體變換到視口中,見下圖。
其中cuboid的坐標(biāo)范圍是
?
而viewport的坐標(biāo)范圍是
注:由上圖知,視口的起點(diǎn)為(X, Y),寬高分別為Width和Height,x軸向右為正,y軸向下為正,y軸的方向與三維坐標(biāo)正好相反。視口是一個(gè)2D平面,但是在viewport變換中,Z坐標(biāo)也是跟著變換的,只是在這個(gè)圖中沒有體現(xiàn)。
先求變換矩陣的第一列
Cuboid中的左上角點(diǎn)(-1, 1, 0, 1)映射到viewport中的起點(diǎn)(X, Y, MinZ, 1),
Cuboid中的右上角點(diǎn)(1, 1, 0, 1)映射到viewport中的點(diǎn)(X+Width, Y, MinZ, 1),
假設(shè)變換矩陣的第一列為[x’, y’, z’, 1]T據(jù)矩陣乘法有
[-1, 1, 0, 1]* [x’, y’, z’, 1]T?= X
[1, 1, 0, 1]* [x’, y’, z’, 1]T?= X+Width
對(duì)應(yīng)的兩個(gè)方程為
-1*x’ + 1*y’ + 0*z’ + 1*w’ = X
1*x’ + 1*y’ + 0*z’ + 1*w’ = X+Width
解之得
x’ = Width/2
y’ = 0
z’ = 0
w’ = x + Width/2
再求第二列
列方程(這里省略了x’,z’,但結(jié)果不變,下同)
y’ + 1*w’=Y
-1*y’ + 1*w’=Y+Height
解之得
y’ = -Height/2
w’ = Y + Height/2
最后求第三列
列方程
0*z’ + 1*w’ = MinZ
1*z’ + 1*w’ = MaxZ
解之得
z’ = MaxZ – MinZ
w’ = MinZ
組合以上各列,得到視口變換矩陣
?
本文轉(zhuǎn)自zdd博客園博客,原文鏈接:http://www.cnblogs.com/graphics/archive/2009/10/13/1582773.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的DirectX视口变换矩阵详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据销售管理服务提供商InsideSa
- 下一篇: 用友互联网战略的变与不变