LWJGL の Matrix4f.mul メソッドが乗算前または乗算後かどうか疑問に思っています。または、選択する方法がある場合。
質問する
2016 次
1 に答える
5
javadoc によると、次のようにMatrix4f.mul
なります。
右の行列に左の行列を掛けて、結果を 3 番目の行列に配置します。
public static Matrix4f mul(Matrix4f left, Matrix4f right, Matrix4f dest)
したがって、ポスト乗算を実現するには、既存のマトリックスをleft
パラメーターとして使用し、新しいマトリックスをright
パラメーターとして使用します。に null オブジェクトを指定するdest
と、関数は新しいオブジェクトを割り当て、Matrix4f
関数呼び出しからそれを返します。
行列の乗算について私が通常考える方法は、ベクトルに「最も近い」行列が最初に適用されるというものです。例えば:
Perspective * View * Model * Vec4
ベクトルに最も近いマトリックスから開始すると、モデル変換が最初に適用され、次にビュー変換が適用され、最後にパースペクティブ変換が適用されることがわかります。
コードでは、上記は次のようになります。
Matrix4f MVP = Matrix4f.mul(View, Model, null);
Matrix4f.mul(Perspective, MVP, MVP);
Vector4f result = Matrix4f.transform(MVP, Vec4, null);
お役に立てれば!
編集:上記は変換を連結する傾向がある方法ですが、行列の乗算は連想的であるため、次の方法も機能するはずです。
Matrix4f MVP = Matrix4f.mul(Perspective, View, null);
Matrix4f.mul(MVP, Model, MVP);
Vector4f result = Matrix4f.transform(MVP, Vec4, null);
于 2012-09-09T01:47:13.613 に答える