从旋转矩阵获取关于y轴的旋转

时间:2017-10-10 16:45:28

标签: matrix linear-algebra glm-math

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

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

glm中是否有任何功能我没有被注意到?

1 个答案:

答案 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;

  }
}