Как найти углы поворота x, y и z для заданного вектора направления и вектора вверх? - PullRequest
3 голосов
/ 29 ноября 2011

У меня есть объект суперкласса, который представляет модель в сцене. Этот объект содержит трехмерный вектор, position для его местоположения и три переменные x, y и z для описания его вращения вокруг этих осей. Его матрица преобразования рассчитывается следующим образом:

Matrix.CreateRotationX(x) *
Matrix.CreateRotationY(y) *
Matrix.CreateRotationZ(z) *
Matrix.CreateTranslation(position)

Это все работает нормально, за исключением некоторых случаев, когда мне нужно вычислить значения для x, y и z на основе нормализованного вектора направления и вектора повышения. Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2011

Преобразуйте матрицу в кватернион:

Quaternion q = Quaternion.CreateFromRotationMatrix(matrix);

, затем скопируйте и вставьте последний метод, найденный на этой странице , и пропустите кватернион.1008 *

0 голосов
/ 01 декабря 2011

То же, что и ответ ClassicThunder (с тем же ограничением, что дает вам матрицу, которую вы хотите, а не углы), за исключением того, что это немного лучше, чем возиться с CreateLookAt (который действительно предназначен для создания матрицы представления).

Matrix.CreateWorld(position, direction, up);

( MSDN )

IMO, вы, вероятно, не должны использовать или хранить вращение Эйлера объекта в любом случае.( см. Также )

0 голосов
/ 29 ноября 2011

Не знаю, как сделать математику сам, но не будет ли Matrix.CreateLookAt удовлетворить ваши потребности?

Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(x, y, z), yourUpVector) 
* Matrix.CreateTranslation(position);
...