Получите векторы глаз, цели и вверх из матрицы вида - PullRequest
4 голосов
/ 17 мая 2011

В Direct3D я использую функцию Matrix.LookAtLH для вычисления матрицы вида.

Я использую это для камеры, которая вращается вокруг цели, перемещая начало координат в целевую позицию,вращение, а затем перемещение источника обратно в (0,0,0).

Это умножается на матрицу, которая была первоначально вычислена из LookAtLH.

Есть ли способ, который я могу, послеВ некоторых из этих операций разложить матрицу, чтобы получить положение глаза, положение цели и вектор роста?

Ответы [ 2 ]

4 голосов
/ 17 мая 2011

Просмотр матриц очень легко извлечь данные из. Проверьте документацию для функции, которую вы использовали (я использовал документацию для D3DXMatrixLookAtLH):

http://msdn.microsoft.com/en-us/library/bb205342%28v=vs.85%29.aspx

Как вы можете видеть внизу страницы, матрица генерируется изнутри так:

zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)

 xaxis.x           yaxis.x           zaxis.x          0
 xaxis.y           yaxis.y           zaxis.y          0
 xaxis.z           yaxis.z           zaxis.z          0
-dot(xaxis, eye)  -dot(yaxis, eye)  -dot(zaxis, eye)  1

Имейте в виду, это действительно только для DirectX; транспонировать вышеуказанную матрицу при переносе тех же вычислений в OpenGL, потому что система координат в DirectX обратна норме.

3 голосов
/ 18 мая 2011

Два варианта:

  • Длинный и сложный: извлечь глаз, взор и взгляд из новой вычисленной матрицы
  • Простая версия: применить ваши преобразования (перевод, вращение, перевод) ккопия твоего глаза, вверх и смотри.Таким образом, вы очень легко получите новые векторы.
...