DirectX 视口学习
什么是viewport?
假設你站在一個密封的房子里,這個房子只有一個很小的窗口,你站在窗口前面,通過這個窗口你可以觀察到外面的世界,那么這個窗口就相當于一個視口,而外面的世界就是3D中的場景。
視口有以下幾個屬性,長度和寬度,為了確定窗口的位置,還需要一個左上角坐標。
為了支持Z-Buffer,還需要兩個深度值,分別是zMin, zMax,表示最小深度和最大深度。
這就是視口的定義。
在D3D中,視口用下面的結構體來表示,X和Y表示視口的左上角坐標,Width和Height表示窗口的寬度和高度,MinZ和MaxZ表示Z-buffer的最小值和最大值。
typedef struct D3DVIEWPORT9 {
? ? DWORD X;
? ? DWORD Y;
? ? DWORD Width;
? ? DWORD Height;
? ? float MinZ;
? ? float MaxZ;
} D3DVIEWPORT9, *LPD3DVIEWPORT9;
?
DirectX視口變換矩陣
視口變換在投影變換之后,視口變換的作用是將投影平面上的點轉換為屏幕上的點,這是一個縮放的過程。
投影變換的作用是將viewing frustum(視景體)中的場景投影到一個平面上,這個平面就是投影平面,在DirectX中,使用近剪裁平面作為投影平面(z=1),
視口變換則是將這個cuboid中的物體變換到視口中;
其中cuboid的坐標范圍是,
而viewport的坐標范圍是,
視口變換矩陣,
?
總結
以上是生活随笔為你收集整理的DirectX 视口学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源空间数据库学习
- 下一篇: MySQL 空间数据库支持入门学习