问题描述
我正在阅读有关XNA中的2D摄像头的信息,并遇到了用于创建转换矩阵的功能。
public Matrix get_transformation(GraphicsDevice graphicsDevice)
{
_transform = // Thanks to o KB o for this solution
Matrix.CreateTranslation(new Vector3(-_pos.X,-_pos.Y,0)) *
Matrix.CreateRotationZ(Rotation) *
Matrix.CreateScale(new Vector3(Zoom,Zoom,1)) *
Matrix.CreateTranslation(new Vector3(ViewportWidth * 0.5f,ViewportHeight * 0.5f,0));
return _transform;
}
我似乎无法理解为什么矩阵从左到右相乘,实际上实际上不应该从右到左相乘(右是要应用的第一个变换)?我似乎无法掌握其实际工作原理。任何见解都将真正有帮助。
谢谢
解决方法
XNA矩阵是行专业的:
这意味着向量是行,而不是列,因此乘法顺序是从左到右。在您的示例代码中,将按照以下顺序应用变换:首先旋转,然后缩放,然后平移。还应考虑到行专业矩阵只是列专业矩阵的转置,因此,可以使用通常使用“列专业”约定从教科书中了解的所有数学,只需对矩阵进行转置。