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