【问题标题】:Order of Multiplication for Building Transformation matrix for 2D Camera in XNA/FNAXNA/FNA中二维相机变换矩阵的乘法阶数
【发布时间】:2020-08-27 08:46:58
【问题描述】:

我正在阅读有关 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;
        }

我似乎无法理解为什么矩阵从左到右相乘,而实际上它们不应该从右到左相乘(右是要应用的第一个转换)?我似乎无法掌握这实际上是如何工作的。任何见解都会非常有帮助。

谢谢

【问题讨论】:

    标签: c# matrix camera xna transformation


    【解决方案1】:

    XNA 矩阵是主要行:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 2021-08-14
      • 2021-12-26
      • 2012-12-27
      • 1970-01-01
      • 2013-11-30
      • 2016-06-20
      相关资源
      最近更新 更多