3D 投影矩阵学习1
先看一下名詞;
在矩陣數學中,也有一個名詞叫投影矩陣,其定義為:
? ? 若矩陣A既是對稱矩陣,又是冪等矩陣,則稱A為投影矩陣。
這里說的是3D世界中的投影矩陣;其作用是幫助把3D物體顯示在2維計算機平面。
什么是投影
? ? 計算機顯示器是一個二維表面,所以如果你想顯示三維圖像,你需要一種方法把3D幾何體轉換成一種可作為二維圖像渲染的形式。這就是投影做的。
? ? 最簡單情形,把3D對象投影到2D表面的方法是簡單的把每個坐標點的z坐標丟棄。這過于簡單,并且在大多數情況下不是有用。
? ? 在OpenGL或者DirectX中,在3D攝像機空間中的點需要映射到視錐體近裁剪面上(也就是投影面)才能在屏幕上看到。
? ? 投影公式將變換你的幾何體到一個新的空間體中,稱為規范視域體(canonical view volume),規范視域體的精確坐標可能在不同的圖形API之間互不相同,作為討論,把它認為是從(-1, -1, 0)延伸至(1, 1, 1)的盒子,這也是Direct3D中使用的。
? ? 一旦所有頂點被映射到規范視域體,只有它們的x和y坐標被用于映射到屏幕上。這并不代表z坐標是無用的,它通常被深度緩沖用于可見度測試。這就是為什么變換到一個新的空間體中,而不是投影到一個平面上。
? ? 左手坐標系,攝像機俯視z軸正方向,y軸朝上并且x軸朝右。這是Direct3D中使用的坐標系。下面使用此坐標系。對于右手坐標系系統來說,在計算方面沒有明顯差異,在規范視域體方面有一點區別。
? ? 投影方法,最常見的2種:正交和透視。
正交投影(Orthographic Projection)
? ? 正交投影,之所以這么稱呼是因為所有的投影線都與最終的繪圖表面垂直,是一種相對簡單的投影技術。
? ? 視域體,也就是包含所有你想顯示的幾何體的可視空間——是一個將被變換到規范視域體的軸對齊盒子;
? ? Direct3D提供了D3DXMatrixOrthoOffCenterLH()()方法構造一個正交投影矩陣;方法名中的"LH"代表了你正在使用左手坐標系。
? ? 正交投影矩陣有一個簡化形式。考慮幾點: 首先,在可見空間中,攝像機定位在原點并且沿著z軸方向觀看。第二,你通常希望你的視野在左右方向上延伸的同樣遠,并且在z軸的上下方向上也延伸的同樣遠。如果是這樣的情況,那么z軸正好直接穿過你視域體的的中心,所以得到了r = -l并且t = -b。換句話說,你可以把r, l, t和b一起忘掉,簡單的把視域體定義為1個寬度w和1個高度h,以及裁剪面f和n。這樣將得到簡化的版本:
? ? ?
? ? Direct3D中D3DXMatrixOrthoLH()方法實現簡單版本。
透視投影(Perspective Projection)
? ? 透視投影是稍復雜的一種投影方法,并且用的越來越平凡,因為它創造了距離感,因此會生成更逼真的圖像。
? ? 從幾何上說,這種方法與正交投影不同的地方在于透視投影的視域體是一個平截頭體——也就是,一個截斷的金字塔,而不是一個軸對稱盒子。
? ? Direct3D的D3DXMatrixPerspectiveOffCenterLH()方法實現了透視投影公式。
? ? Direct3D的D3DXMatrixPerspectiveLH()方法生成簡化版本的矩陣。
?
看如下圖,正交和透視投影的示意;
一個是直線(右邊),一個是斜線;透視投影更真實些;
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的3D 投影矩阵学习1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win32汇编ListBox最简Demo
- 下一篇: 使用 Spring Boot CLI 运