我无法弄清楚如何从我对象的模型矩阵中提取围绕全局y轴的旋转。
我的对象中的当前模型矩阵为glm :: mat4,我需要取消围绕y轴的旋转。
glm中是否有任何功能我没有被注意到?
答案 0 :(得分:0)
您必须将矩阵的旋转部分转换为欧拉角。这不是一个微不足道的操作。我不知道“glm”是否具有该功能,但是有一个代码(可能存在其他方法)将4x4矩阵的旋转部分转换为X,Y和Z欧拉角:
function Matrix4ToEuler(OutEuler, InMatrix4)
{
let cy = Math.sqrt(InMatrix4[0] * InMatrix4[0] + InMatrix4[1] * InMatrix4[1]);
if(cy > 0.001) {
OutEuler.x = Math.atan2(InMatrix4[6], InMatrix4[10]);
OutEuler.y = Math.atan2(-InMatrix4[2], cy);
OutEuler.z = Math.atan2(InMatrix4[1], InMatrix4[0]);
} else {
OutEuler.x = Math.atan2(-InMatrix4[9], InMatrix4[5]);
OutEuler.y = Math.atan2(-InMatrix4[2], cy);
OutEuler.z = 0;
}
}