Ответы:
(Этот ответ по сути такой же, как и у Стефана, но я хотел добавить некоторые подробности о векторах строк и столбцов и о том, как определить, какой из них вы используете.)
Да, это возможно, но детали зависят от того, представляете ли вы свои векторы в виде строк или столбцов.
Если вы используете векторы столбцов , вы обычно преобразуете их, умножая слева свои матрицы:
vector = mRotateZ * vector;
vector = mRotateX * vector;
Конечно, вы также можете сделать это за один шаг:
vector = mRotateX * mRotateZ * vector;
Но матричное умножение является ассоциативным, что означает, что не имеет значения, какое умножение выполняется первым:
A * B * C = (A * B) * C = A * (B * C)
Итак, мы можем написать
Matrix mRotate = mRotateX * mRotateZ;
vector = mRotate * vector;
Теперь мы создали единственную матрицу, которая эквивалентна первому вращению вокруг Z
и второй около X
. Это обобщается тривиально для любого числа преобразований. Обратите внимание, что преобразования применяются справа налево.
Если, с другой стороны, вы используете векторы строк , вы, как правило, правильно умножите свои матрицы:
vector = vector * mRotateZ;
vector = vector * mRotateX;
Опять же, записав это за один шаг, мы получим
vector = vector * mRotateZ * mRotateX;
который можно переписать как
Matrix mRotate = mRotateZ * mRotateX;
vector = vector * mRotate;
Обратите внимание, что в этом случае преобразования применяются слева направо.
Да, просто умножьте их в обратном порядке:
Matrix myrotation = Matrix.CreateRotationX(xrot) * Matrix.CreateRotationZ(zrot);
РЕДАКТИРОВАТЬ. Мой ответ применим только в том случае, если вы используете векторы столбцов. Пожалуйста, смотрите подробный ответ Мартина Бюттнера.
Из математики:
Существует гомоморфизм 2: 1 от единичных кватернионов до SO (3) (группа вращений).
Что это (по сути) означает, что:
Подумай об этом. Начиная с пространства объектов, вы можете повернуть ваш объект в любую ориентацию, используя только одно вращение.
Я хотел бы отметить, что введение кватернионов не было просто случайной математикой. В отличие от других ответов, предпочтительный подход в графике на самом деле представляет вращения как кватернионы, так как они занимают меньше места и быстрее объединяются.
Есть простые в Google способы конвертации матриц вращения и кватернионов, в зависимости от того, что вы предпочитаете. Дело в том, что вращения - это кватернионы в математическом смысле, поэтому их комбинации также являются единичными вращениями.