Tout d'abord, je recommanderais FORTEMENT de simplement stocker la position en tant que vecteur séparément, cela facilitera considérablement les calculs. Quoi qu'il en soit ...
[x (dot) right, y (dot) up, z (dot) look]
n'est pas la matrice de vue réelle. La matrice elle-même est de la forme:
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
où la matrice 3x3 en haut à gauche représente les rotations, l'échelle, etc. Toute l'orientation de la caméra s'y fait. La ligne et la colonne restantes sont utilisées pour la traduction et d'autres éléments de perspective compliqués dans lesquels je ne vais pas entrer en ce moment.
Lorsque vous obtenez la matrice (en supposant qu'il s'agit d'une matrice 4x4), la traduction sera toujours stockée dans la dernière ligne ou la dernière colonne, selon que votre classe de matrice est de l'ordre des lignes principales ou des colonnes principales.
Ce qui vous rend probablement confus, c'est que vous avez besoin des produits scalaires. Ce qui se passe est la simplification des mathématiques matricielles, il y a des réponses plus détaillées dans cette question Stack Overflow: /programming/349050/calculating-a-lookat-matrix
La solution peut être trouvée ici , vous devez prendre l'inverse de la matrice et obtenir la traduction de cela:
Vector3 ViewTrans = Matrix.Invert(ViewMatrix).Translation;
Position = ViewTrans;