Запутался порядок операций при использовании Matrix в XNA, C #

Вот два разных фрагмента кода

Это то, с чего я начал

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;

Почему это работает, если порядок слева направо?

5
задан Alxander 29 January 2012 в 19:30
поделиться