ローカル/モデルの位置から最終クリップ スペースの位置まで
3 つの変換マトリックス:
射影: 射影変換行列
ビュー座標系をクリップ空間座標系
に変換しますビュー: 変換行列の表示
モデル座標系をビュー座標系に変換(カメラの位置を移動)
モデル: モデル変換行列
ローカル座標をモデル座標系/ゲーム世界座標系(絶対座標)に変換
位置: 頂点のローカル座標
ローカル座標系(相対座標系)
位置とモデルの座標系の原点は、要件に基づいて開発者によって定義されます。
モデルと位置行列データにそれぞれ対応するワールドとモデルの座標系:
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 では、行列は 列優先の順序 で保存され、これは行列の配置と計算順序に影響します。この保存方法は、WebGL での行列の定義方法と使用方法に影響します。 WebGL で列優先の行列を操作するときの一般的な方法をいくつか示します。
M = | m11 m21 m31 m41 | | m12 m22 m32 m42 | | m13 m23 m33 m43 | | m14 m24 m34 m44 |
WebGL では、この行列は列順の 1 次元配列として表されます。
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 ];
gl.uniformMatrix4fv(location, false, matrix);
ここで、false は行列を転置しないことを示します。 WebGL はデフォルトで列優先の順序を使用するため、JavaScript の標準 Math ライブラリはデフォルトで行優先の順序を使用する可能性があるため、データ形式がこの要件と一致していることを確認してください。
結果の行列 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 中国語 Web サイトの他の関連記事を参照してください。