LWJGL的Matrix4f.mul方法是预乘还是后乘?

Cya*_*ime 4 java matrix lwjgl matrix-multiplication

只是想知道 LWJGL 的 Matrix4f.mul 方法是前置还是后置乘法。或者说有什么方法可以选择吗?

bfi*_*man 5

根据 javadoc,Matrix4f.mul将:

将右侧矩阵乘以左侧矩阵,并将结果放入第三个矩阵中。

public static Matrix4f mul(Matrix4f left, Matrix4f right, Matrix4f dest)
Run Code Online (Sandbox Code Playgroud)

因此,要实现后乘,请使用现有矩阵作为参数left,并使用新矩阵作为right参数。如果您为 提供一个空对象dest,该函数将为您分配一个新对象Matrix4f,并从函数调用中返回它。

我通常考虑矩阵乘法的方式是首先应用距离向量“最近”的矩阵。例如:

Perspective  *  View  *  Model  *  Vec4
Run Code Online (Sandbox Code Playgroud)

从最接近向量的矩阵开始,您可以看到首先应用模型变换,然后是视图变换,最后是透视变换。

在您的代码中,上面的内容将如下所示:

Matrix4f MVP = Matrix4f.mul(View, Model, null);
Matrix4f.mul(Perspective, MVP, MVP);

Vector4f result = Matrix4f.transform(MVP, Vec4, null);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

编辑:上面是我倾向于连接变换的方式,但由于矩阵乘法是关联的,因此以下内容也应该有效:

Matrix4f MVP = Matrix4f.mul(Perspective, View, null);
Matrix4f.mul(MVP, Model, MVP);

Vector4f result = Matrix4f.transform(MVP, Vec4, null);
Run Code Online (Sandbox Code Playgroud)