Oto dwa różne kawałki koduzna kolejność operacji przy użyciu matrycy w XNA, C#
To, co zaczęło się
Vector2 hold = Vector2.Transform(pos1, mat1);
Matrix inv = Matrix.Invert(mat2);
Vector2 pos2 = Vector2.Transform(hold, inv);
I to jest to, co mi powiedziano jest uproszczona wersja
Matrix matrix1to2 = mat1 * Matrix.Invert(mat2);
Vector2 pos2 = Vector2.Transform(pos1, matrix1to2);
Co ja nie rozumiem, dlaczego nie jest to pierwsza linia w wersji simpilifed
Matrix matrix1to2 = Matrix.Invert(mat2)*mat1;
Ponieważ w celu matrycy rzeczą na prawo to wchodzi w życie pierwszego i w oryginale mamy mat1 są mnożone w pierwszej
EDIT: Poniższy rysunek przedstawia kolejność operacji pożądane
http://www.riemers.net/images/Tutorials/XNA/Csharp/Series2D/mat1.png
Samouczek mówi, że do stworzenia tej transformacji używasz;
Matrix carriageMat = Matrix.CreateTranslation(0, -carriage.Height, 0) * Matrix.CreateScale(playerScaling)
* Matrix.CreateTranslation(xPos, yPos, 0) * Matrix.Identity;
Dlaczego to działa, jeśli zamówienie jest od lewej?
Myślę, że jest to http://gamedev.stackexchange.com/ pytanie. Otrzymasz tam więcej opinii. – rcdmk
Dzięki temu spróbuję. Czy powinienem to wtedy zamknąć? – Alxander
Jeśli chcesz. Prawdopodobnie pojawią się niektórzy moderatorzy. – rcdmk