從本地/模型位置到最終剪輯空間的位置
三變換Maxtrix:
投影:投影變換矩陣
將視圖座標系轉換為裁切空間座標系
視圖:視圖變換矩陣 將模型座標系轉換為視圖座標系
(移動相機位置)
模型:模型轉換矩陣 將本地座標轉換為模型座標系/遊戲世界座標系(絕對座標)
Postition:頂點的局部座標
局部座標系(相對座標系)
位置和模型座標係原點由開發者根據需求定義。
Absolute(World) Y+ axis Y (0, 1, 0) | | Local(Model) Y+ axis | | / | | / | | | ---------- o (1, 0, 1) ← Local(Model) Origin ---- Local X+ axis | / | | / | | / | | / | | / | |______________________/______|__________ X (1, 0, 0) Absolute(World) X+ axis / Local(Model) Z+ axis / / / Z (0, 0, 1) Absolute(World) Z+ axis分別對應模型和位置矩陣資料的世界座標系和模型座標系:
2. WebGL 預設使用列主順序,而 C 預設使用行主順序。
## 矩陣定義與排列 使用列優先儲存時,矩陣的列會依序儲存。例如,按列優先順序的 4x4 矩陣
M 如下所示:
const matrix = [ m11, m21, m31, m41, // First column m12, m22, m32, m42, // Second column m13, m23, m33, m43, // Third column m14, m24, m34, m44 // Fourth column ];M = | m11 m21 m31 m41 | m11 m21 m31 m41 | m11 m21 m31 m41 | m11 m21 m31 m41 | m12 m22 m32 m42 | m12 m22 m32 m41 | m12 m22 m32 m42 | m12 m22 m32 m42 m12 m22 m32 m42 | m12 m22 m32 m42 m12 m22 m32 m32 43 | m13 m23 m33 m43 | m13 m23 m33 m43 | m13 m23 m33 m43 | m14 m24 m34 m44 |
gl.uniformMatrix4fv(location, false, matrix);
一致的矩陣與陣列格式
將矩陣資料傳遞給 WebGL 著色器時,必須使用一致的格式。例如,當傳遞 4x4 轉換矩陣時,WebGL 的uniformMatrix4fv 函數期望數組會按列優先順序排列: 這裡, false 表示矩陣不應該轉置。由於 WebGL 預設使用列優先順序,請確保資料格式符合此要求,因為 JavaScript 的標準數學庫可能預設使用行優先順序。所得矩陣M可以表示為變換矩陣T、R和S的積:
M = T ⋅ R ⋅ S
在此等式中:
依照列優先順序,此序列首先套用縮放,然後套用旋轉,最後套用平移。
let modelMatrix = mat4.create();// 建立單位矩陣
Absolute(World) Y+ axis Y (0, 1, 0) | | Local(Model) Y+ axis | | / | | / | | | ---------- o (1, 0, 1) ← Local(Model) Origin ---- Local X+ axis | / | | / | | / | | / | | / | |______________________/______|__________ X (1, 0, 0) Absolute(World) X+ axis / Local(Model) Z+ axis / / / Z (0, 0, 1) Absolute(World) Z+ axis
以上是[WebGL] [基礎]非蒙皮模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!