从旋转矩阵获取绕 y 轴的旋转

Posted

技术标签:

【中文标题】从旋转矩阵获取绕 y 轴的旋转【英文标题】:Get rotation about y-axis from rotation matrix 【发布时间】:2017-10-10 16:45:28 【问题描述】:

我不知道如何从我的对象的模型矩阵中提取围绕全局 y 轴的旋转。

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

glm 中是否有我没有注意到的功能?

【问题讨论】:

【参考方案1】:

您必须将矩阵的旋转部分转换为欧拉角。这不是一个简单的操作。我不知道“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;

  

【讨论】:

以上是关于从旋转矩阵获取绕 y 轴的旋转的主要内容,如果未能解决你的问题,请参考以下文章

分解旋转矩阵

5、求绕平面上任意点旋转的变换矩阵。

《Unity3D 实战核心技术详解》书中关于矩阵的错误

three.js 中的矩阵变换及两种旋转表达方式

平行于全局轴的矩阵旋转

Opengl模型矩阵在旋转一圈后不绕原点旋转