2017-10-10 145 views
0

我无法弄清楚如何从我的对象的模型矩阵中提取围绕全局y轴的旋转。从旋转矩阵获取有关y轴的旋转

我有我的对象作为glm :: mat4的当前模型矩阵,我需要取消围绕y轴的旋转。

glm中有没有什么功能我没注意到?

回答

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; 

    } 
}