GLM OpenGL旋转仅在X轴周围校正

时间:2016-10-30 22:00:25

标签: rotation quaternions glm-math

我正在使用这个非常简单的代码来围绕自己的原点旋转对象

void Entity::rotate(unsigned short axis, float speed, float delta)
{
    m_Orientation[axis] += delta * speed;
    glm::quat quaternion = glm::quat(glm::vec3(m_Orientation[0], m_Orientation[1], m_Orientation[2]));

    m_RotationMatrix = glm::mat4_cast(quaternion);
}

我面临的问题是旋转仅相对于 X 轴上物体的方向。这意味着无论物体面向哪个方向(它的方向是什么),如果我围绕 X 旋转它,它将始终围绕它自己的 X 轴旋转。这就是我想要做的,但也在另外两个轴上。

但Y和Z总是围绕世界X和Y轴旋转,无论我的物体面向哪个方向。

我的代码太小而且简单我没有真正看到问题? X旋转总是纠正事故,还是其他两个错误?

1 个答案:

答案 0 :(得分:0)

我建议你试试这个:

#include <glm/gtx/euler_angles.hpp>
/**
If you change speed to a vec3,
it do all the calculations at once
(you won't have to do it for each angle)
**/

void Entity::rotate(glm::vec3 speed, float delta) 
{
   rotation = speed * data
   m_modelMatrix *= glm::eulerAngleXYZ(rotation.x, rotation.y, rotation.z);
}

glm :: eulerAngleXYZ函数将获取角度并从中创建旋转矩阵。

但要注意gimbal lock

如果从右到左进行矩阵的乘法运算,它将围绕全局轴旋转。如果以另一种方式执行,它将围绕局部轴旋转。