Вот два разных фрагмента кода
Это то, с чего я начал
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;
Почему это работает, если порядок слева направо?