日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

DirectX视口变换矩阵详解

發(fā)布時(shí)間:2025/3/21 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DirectX视口变换矩阵详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

視口變換在投影變換之后,視口變換的作用是將投影平面上的點(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),寬高分別為WidthHeightx軸向右為正,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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。