Po pierwsze, wysoce poleciłbym po prostu osobne przechowywanie pozycji jako wektora, to znacznie ułatwi obliczenia. W każdym razie ...
[x (dot) right, y (dot) up, z (dot) look]
nie jest rzeczywistą matrycą widoku. Sama matryca ma postać:
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
gdzie górna lewa matryca 3x3 reprezentuje obroty, skalę itp. Tam odbywa się cała orientacja kamery. Pozostały wiersz i kolumna są używane do tłumaczenia i innych skomplikowanych rzeczy z perspektywy, do których nie zamierzam teraz wchodzić.
Po otrzymaniu macierzy (zakładając, że jest to macierz 4x4), tłumaczenie zawsze będzie przechowywane w ostatnim wierszu lub ostatniej kolumnie, w zależności od tego, czy klasa macierzy jest uporządkowana według rzędów, czy kolumn.
To, co prawdopodobnie wprawia Cię w zakłopotanie, to fakt, że potrzebujesz produktów kropkowych. To, co się dzieje, to uproszczenie matematyki macierzy. Odpowiedzi na to pytanie dotyczące przepełnienia stosu zawierają bardziej szczegółowe odpowiedzi: /programming/349050/calculating-a-lookat-matrix
Rozwiązanie można znaleźć tutaj , musisz wziąć odwrotność macierzy i uzyskać tłumaczenie tego:
Vector3 ViewTrans = Matrix.Invert(ViewMatrix).Translation;
Position = ViewTrans;