4

只是想知道 LWJGL 的 Matrix4f.mul 方法是先乘还是后乘。或者,如果有办法选择。

4

1 回答 1

5

根据 javadoc,Matrix4f.mul将:

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

public static Matrix4f mul(Matrix4f left, Matrix4f right, Matrix4f dest)

因此,要实现后乘,请将现有矩阵用作left参数,并将新矩阵用作right参数。如果您为 提供一个空对象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 回答