日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DirectX视口变换矩阵详解

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DirectX视口变换矩阵详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

視口變換在投影變換之后,視口變換的作用是將投影平面上的點轉換為屏幕上的點,這是一個縮放的過程。

投影變換的作用是將viewing frustum(視景體)中的場景投影到一個平面上,這個平面就是投影平面,在DirectX中,使用近剪裁平面作為投影平面(z=1),關于透視投影的矩陣求解,請參考透視投影詳解



視口變換則是將這個cuboid中的物體變換到視口中,見下圖。


其中
cuboid的坐標范圍是

?

viewport的坐標范圍是

注:由上圖知,視口的起點為(X, Y),寬高分別為WidthHeightx軸向右為正,y軸向下為正,y軸的方向與三維坐標正好相反。視口是一個2D平面,但是在viewport變換中,Z坐標也是跟著變換的,只是在這個圖中沒有體現。

先求變換矩陣的第一列

Cuboid中的左上角點(-1, 1, 0, 1)映射到viewport中的起點(X, Y, MinZ, 1),

Cuboid中的右上角點(1, 1, 0, 1)映射到viewport中的點(X+Width, Y, MinZ, 1),

假設變換矩陣的第一列為[x’, y’, z’, 1]T據矩陣乘法有

[-1, 1, 0, 1]* [x’, y’, z’, 1]T?= X

[1, 1, 0, 1]* [x’, y’, z’, 1]T?= X+Width

對應的兩個方程為

-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’,但結果不變,下同)

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

組合以上各列,得到視口變換矩陣

?



本文轉自zdd博客園博客,原文鏈接:http://www.cnblogs.com/graphics/archive/2009/10/13/1582773.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的DirectX视口变换矩阵详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。