4

LWJGL の Matrix4f.mul メソッドが乗算前または乗算後かどうか疑問に思っています。または、選択する方法がある場合。

4

1 に答える 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 に答える