Используя математическую библиотеку GLM, я использую этот код для объединения поворотов угла Эйлера в матрицу поворотов.
#include <GLM/gtc/matrix_transform.hpp>
using namespace glm;
mat4 matrix = rotate(mat4(1), X, vec3(1, 0, 0))
* rotate(mat4(1), Y, vec3(0, 1, 0))
* rotate(mat4(1), Z, vec3(0, 0, 1));
Приводит ли это к эйлеровой последовательности углов XYZ или ZYX? Я не уверен, так как матричное умножение ведет себя не так, как скалярное умножение.
Помните, что для вычисления матрицы в openGL используется нотация, известная как векторный столбец (http://en.wikipedia.org/wiki/Column_vector). Таким образом, любое точечное преобразование будет выражаться системой линейных уравнений, выраженной в обозначении векторного столбца следующим образом:
[P ‘] = M. [P], где M = M1.M2.M3
Это означает, что первое преобразование, которое применяется к точкам, выраженным вектором [P], — это M3, затем M2 и, наконец, M1.
Отвечая на ваш вопрос, результирующий угол Эйлера будет равен ZXY, если преобразование вращения Z является последней матрицей, которую вы пишете для формирования умножения матриц.
Других решений пока нет …