XNA / FNA中2D相机的建筑变换矩阵的乘法顺序

问题描述

我正在阅读有关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矩阵是行专业的:

https://docs.microsoft.com/en-us/previous-versions/windows/silverlight/dotnet-windows-silverlight/bb197911(v=xnagamestudio.35)

这意味着向量是行,而不是列,因此乘法顺序是从左到右。在您的示例代码中,将按照以下顺序应用变换:首先旋转,然后缩放,然后平移。还应考虑到行专业矩阵只是列专业矩阵的转置,因此,可以使用通常使用“列专业”约定从教科书中了解的所有数学,只需对矩阵进行转置。