Zunächst einmal würde ich dringend empfehlen, die Position nur separat als Vektor zu speichern, da dies die Berechnung erheblich vereinfacht. Sowieso...
[x (dot) right, y (dot) up, z (dot) look]
ist nicht die eigentliche Ansichtsmatrix. Die Matrix selbst hat die Form:
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
Dabei steht die obere linke 3x3-Matrix für Rotationen, Skalierung usw. Die gesamte Ausrichtung der Kamera erfolgt dort. Die verbleibende Zeile und Spalte werden für die Übersetzung und einige andere komplizierte Perspektiven verwendet, auf die ich im Moment nicht eingehen werde.
Wenn Sie die Matrix erhalten (vorausgesetzt, es handelt sich um eine 4x4-Matrix), wird die Übersetzung immer entweder in der letzten Zeile oder in der letzten Spalte gespeichert, je nachdem, ob Ihre Matrixklasse eine Zeilen- oder eine Spalten-Hauptreihenfolge aufweist.
Was Sie wahrscheinlich verwirrt, ist die Tatsache, dass Sie die Punktprodukte benötigen. Was passiert, ist die Vereinfachung der Matrixmathematik. In dieser Frage zum Stapelüberlauf finden Sie detailliertere Antworten: /programming/349050/calculating-a-lookat-matrix
Die Lösung finden Sie hier . Sie müssen die Umkehrung der Matrix nehmen und die Übersetzung davon erhalten:
Vector3 ViewTrans = Matrix.Invert(ViewMatrix).Translation;
Position = ViewTrans;