En primer lugar, recomendaría ALTAMENTE almacenar la posición como un vector por separado, hará las cosas mucho más fáciles computacionalmente. De todos modos ...
[x (dot) right, y (dot) up, z (dot) look]
no es la matriz de vista real. La matriz en sí es de la forma:
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
donde la matriz superior izquierda de 3x3 representa rotaciones, escala, etc. Toda la orientación de la cámara se realiza allí. La fila y la columna restantes se usan para la traducción y algunas otras cosas de perspectiva complicadas que no voy a abordar en este momento.
Cuando obtiene la matriz (suponiendo que sea una matriz 4x4), la traducción siempre se almacenará en la última fila o en la última columna, dependiendo de si su clase de matriz está ordenada por fila mayor o columna mayor.
Lo que probablemente te esté confundiendo es el hecho de que necesitas los productos de punto. Lo que está sucediendo es la simplificación de las matemáticas de la matriz, hay respuestas más detalladas en esta pregunta de desbordamiento de pila: /programming/349050/calculating-a-lookat-matrix
La solución se puede encontrar aquí , debe tomar el inverso de la matriz y obtener la traducción de eso:
Vector3 ViewTrans = Matrix.Invert(ViewMatrix).Translation;
Position = ViewTrans;