Спочатку я б настійно рекомендував просто зберігати позицію як вектор окремо, це полегшить обчислення набагато простіше. Все одно ...
[x (dot) right, y (dot) up, z (dot) look]
не є фактичною матрицею перегляду. Сама матриця має вигляд:
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
де лівий верхній 3x3 матриця відображає обертання, масштаб тощо. Усі орієнтації камери зроблені там. Решта та стовпець, що залишився, використовуються для перекладу та деяких інших складних перспективних матеріалів, у які я зараз не збираюся вступати.
Коли ви отримуєте матрицю (якщо припустити, що це матриця 4x4), переклад завжди зберігатиметься або в останньому рядку, або в останньому стовпчику, залежно від того, чи є ваш матричний клас строковим чи головним стовпчиком.
Те, що ви, мабуть, плутаєтесь - це той факт, що вам потрібні крапки. У цьому питанні є спрощення математики матриці, у цьому питанні щодо переповнення стека є більш детальні відповіді: /programming/349050/calculating-a-lookat-matrix
Вирішення можна знайти тут , вам потрібно взяти обернену матрицю і отримати переклад цього:
Vector3 ViewTrans = Matrix.Invert(ViewMatrix).Translation;
Position = ViewTrans;