我的轮换有点问题。我的模型旋转了,但随后稍微偏离了不在中心的摄像机角度位置。这是我的轮换代码,正确吗?
matrix m = matrix.createrotationZ(MathHelper.ToRadian(30))
matrix object = matrix.createtranslation(objectPos) * m;
我的轮换有点问题。我的模型旋转了,但随后稍微偏离了不在中心的摄像机角度位置。这是我的轮换代码,正确吗?
matrix m = matrix.createrotationZ(MathHelper.ToRadian(30))
matrix object = matrix.createtranslation(objectPos) * m;
正如 Lucius 在他的评论中指出的那样,矩阵表示一系列线性变换。将它们相乘的顺序很重要。
RotationMatrix
*TranslationMatrix
表示“在模型空间中围绕其轴旋转此模型,然后将旋转后的模型转换为世界空间。”
TranslationMatrix
*RotationMatrix
表示“将此模型转换为世界空间,然后围绕世界原点旋转模型。”
更改矩阵乘法的顺序。
*
顺便说一句,当您开始向序列添加更多转换时,使用运算符进行矩阵相乘会很快变得昂贵。它最终可能会创建许多从未实际使用过的额外矩阵。您可以通过使用类上的静态Multiply()
方法来优化它Matrix
。