1

我的轮换有点问题。我的模型旋转了,但随后稍微偏离了不在中心的摄像机角度位置。这是我的轮换代码,正确吗?

matrix m = matrix.createrotationZ(MathHelper.ToRadian(30))
matrix object = matrix.createtranslation(objectPos) * m;
4

1 回答 1

1

正如 Lucius 在他的评论中指出的那样,矩阵表示一系列线性变换。将它们相乘的顺序很重要。

RotationMatrix*TranslationMatrix表示“在模型空间中围绕其轴旋转此模型,然后将旋转后的模型转换为世界空间。”

TranslationMatrix*RotationMatrix表示“将此模型转换为世界空间,然后围绕世界原点旋转模型。”

更改矩阵乘法的顺序。

*顺便说一句,当您开始向序列添加更多转换时,使用运算符进行矩阵相乘会很快变得昂贵。它最终可能会创建许多从未实际使用过的额外矩阵。您可以通过使用类上的静态Multiply()方法来优化它Matrix

于 2013-03-22T13:30:10.450 回答