使用角度向量的高效 3D 旋转

Posted

技术标签:

【中文标题】使用角度向量的高效 3D 旋转【英文标题】:Efficient 3D rotation using vector of angles 【发布时间】:2019-09-18 11:23:14 【问题描述】:

我想知道是否有更好的方法来实现以下目标:

ModelMatrix = glm::rotate(ModelMatrix, glm::radians(rotationVec.x), glm::vec3(1.0f, 0.0f, 0.0f));
ModelMatrix = glm::rotate(ModelMatrix, glm::radians(rotationVec.y), glm::vec3(0.0f, 1.0f, 0.0f));
ModelMatrix = glm::rotate(ModelMatrix, glm::radians(rotationVec.z), glm::vec3(0.0f, 0.0f, 1.0f));

是否有更有效的方法来实现相同的计算,可能只需要一个函数调用? rotationVec 是角度向量,类似于 Unity 引擎执行游戏对象旋转的方式。

【问题讨论】:

GLM_GTX_euler_angles 【参考方案1】:

感谢@meowgoesthedog 这可以通过以下方式实现。

ModelMatrix = ModelMatrix * glm::eulerAngleXYZ(glm::radians(rotation.x), glm::radians(rotationVec.y), glm::radians(rotationVec.z));

【讨论】:

以上是关于使用角度向量的高效 3D 旋转的主要内容,如果未能解决你的问题,请参考以下文章

旋转矩阵到带角度的向量

在 3D 空间中沿 Y 轴的一个角度在随机点处旋转单位向量

使用方向和轴旋转 3D 对象

使用 `glm::rotate` 和四元数向上旋转 3D 方向向量

VTKvtk actor空间变换后的点映射与向量映射

U3D如何让物体旋转一定角度