Prima di tutto consiglio vivamente di salvare la posizione come vettore separatamente, renderà le cose molto più facili dal punto di vista computazionale. In ogni modo ...
[x (dot) right, y (dot) up, z (dot) look]
non è la matrice di visualizzazione effettiva. La matrice stessa ha la forma:
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
dove la matrice 3x3 in alto a sinistra rappresenta rotazioni, scala, ecc. Tutto l'orientamento della telecamera viene fatto lì. La riga e la colonna rimanenti vengono utilizzate per la traduzione e alcune altre complicate cose in prospettiva che non ho intenzione di approfondire al momento.
Quando ottieni la matrice (supponendo che sia una matrice 4x4), la traduzione sarà sempre memorizzata nell'ultima riga o nell'ultima colonna, a seconda che la tua classe di matrice sia un ordinamento riga maggiore o colonna maggiore.
Ciò di cui probabilmente ti stai confondendo è il fatto che hai bisogno dei prodotti punto. Quello che sta succedendo è la semplificazione della matematica della matrice, ci sono risposte più dettagliate in questa domanda Stack Overflow: /programming/349050/calculating-a-lookat-matrix
La soluzione può essere trovata qui , è necessario prendere l'inverso della matrice e ottenere la traduzione di quello:
Vector3 ViewTrans = Matrix.Invert(ViewMatrix).Translation;
Position = ViewTrans;