【发布时间】:2012-01-29 19:03:38
【问题描述】:
这里有两段不同的代码
这就是我的开始
Vector2 hold = Vector2.Transform(pos1, mat1);
Matrix inv = Matrix.Invert(mat2);
Vector2 pos2 = Vector2.Transform(hold, inv);
这就是我被告知的简化版
Matrix matrix1to2 = mat1 * Matrix.Invert(mat2);
Vector2 pos2 = Vector2.Transform(pos1, matrix1to2);
我不明白的是,为什么简化版的第一行不是
Matrix matrix1to2 = Matrix.Invert(mat2)*mat1;
因为在矩阵顺序中,右边的东西会首先生效,而在原来的情况下,我们首先将 mat1 相乘
编辑: 下图显示了所需的操作顺序
http://www.riemers.net/images/Tutorials/XNA/Csharp/Series2D/mat1.png
教程说要创建你使用的这个转换;
Matrix carriageMat = Matrix.CreateTranslation(0, -carriage.Height, 0) * Matrix.CreateScale(playerScaling)
* Matrix.CreateTranslation(xPos, yPos, 0) * Matrix.Identity;
如果顺序是从左到右,为什么会这样?
【问题讨论】:
-
我认为这是一个gamedev.stackexchange.com 的问题。您将在那里获得更多反馈。
-
谢谢,我会试试的。那我应该关闭它吗?
-
如果你愿意。可能会有一些版主来到这里。