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

Order of Multiplication for Building Transformation matrix for 2D Camera in XNA/FNA

我在阅读 XNA 中的 2D Camera 时遇到了这个用于创建变换矩阵的函数。

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)

这意味着向量是行,而不是列,所以乘法顺序是从左到右。在您的示例代码中,变换将按以下顺序应用:首先旋转,然后缩放,然后平移。还要考虑到Row Major矩阵只是Column Major矩阵的转置,所以你从教科书上知道的通常使用Column Major约定的数学都可以使用,你只需要转置矩阵。