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