Я пытаюсь перенести некоторый код из Autodesk FBX SDK, чтобы вместо этого использовать glm. Autodesk SDK имеет класс с именем FbxAMatrix
(FBX матрица аффинных класс - похож на glm::mat4
), который обеспечивает Funtion:Установить вращение матрицы в glm :: mat4
void SetR(const FbxVector4& pR); /* Set matrix's Euler rotation. X, Y and Z rotation values expressed as a vector. The rotation transform is constructed in rotation order XYZ. */
Эта функция предполагается установить ротацию - в то время как glm::rotate()
будет просто повернуть матрицу. По моему мнению, это две разные операции - и если я запускаю обе функции с одинаковыми входами, результат тоже отличается. Такая же проблема возникает, если я попытаюсь использовать glm::eulerAngleXYZ()
вместо этого.
IdentityMatrix:
{ 1, 0, 0, 0 }
{ 0, 1, 0, 0 }
{ 0, 0, 1, 0 }
{ 0, 0, 0, 1 }
RotationVector:
{ 15 }
{ 0 }
{ 0 }
FbxAMatrix :: IdentityMatrix.SetR (RotationVector):
{ 1, 0, 0, 0 }
{ 0, 0.96592582628906831, 0.25881904510252074, 0 }
{ 0, 0.25881904510252074, 0.96592582628906831, 0 }
{ 0, 0, 0, 1 }
GLM :: поворот (IdentityMatrix, 1.0f, RotationVector):
{ 1, 0, 0, 0 }
{ 0, 0.540302277, 0.841470957, 0 }
{ 0, 0.841470957, 0.540302277, 0 }
{ 0, 0, 0, 1 }
GLM :: eulerAngleXYZ (RotationVector):
{ 1, 0, 0, 0 }
{ 0, 0.759687901, 0.650287867, 0 }
{ 0, 0.650287867, 0.759687901, 0 }
{ 0, 0, 0, 1 }
Так что мой вопрос: Как я могу установить вращение матрицы с GLM (чтобы получить smiliar результаты FbxAMatrix.SetR(RotationVector)
)? Если нет доступной функции, я хотел бы понять разницу между вращением матрицы идентичности и установить вращение идентичной матрицы.