如何使用 GLM 在 OpenGL 中正确计算旋转

How to calculate rotation properly in OpenGL using GLM

我有这个脚本来获得一个实体的 MVP,全部在 glm 中。我希望对象根据我用于移动的方向值旋转,但在视觉上,对象旋转速度慢了大约一百倍。这必须是准确的,以正确地、直观地表示方向。但是我不是专家,仍然只是在学习和尝试解决它,所以再次希望聪明的人能帮助我吗? :)

void Entity::turnRight()
{
    m_Orientation += m_TurnSpeed;
}

转弯速度默认为0.02

然后获得 mvp:

    m_Direction[0] = cos(0.0f) * sin(m_Orientation);
    m_Direction[1] = sin(0.0f);
    m_Direction[2] = cos(0.0f) * cos(m_Orientation);

    glm::mat4 projectionMatrix = glm::perspective(90.0f, (GLfloat)640 / (GLfloat)480, 0.001f, 60.0f);
    glm::mat4 translationMatrix = glm::translate(glm::mat4(), glm::vec3(m_Position[0], m_Position[1], m_Position[2]));
    glm::mat4 Rotation = glm::rotate(glm::mat4(), (m_Orientation / m_TurnSpeed), glm::vec3(0, 1, 0));
    m_MVP = (projectionMatrix * viewMatrix * glm::mat4() * translationMatrix * Rotation);       

这就是它真正的全部......播放器正确地旋转和平移但在视觉上,它是关闭的,就像它转动的方向小于实际方向值 (m_Orientation)

我没有在计算什么?

提前致谢!

我认为您使用的是使用度数而不是弧度的旧版 GLM。这是旧版 GLM 中的一个不幸的设计缺陷。

您或许可以使用预处理器宏来解决问题:

#define GLM_FORCE_RADIANS
#include <glm/...>
#include <glm/...>

但是,升级到更新版本的 GLM 可能会更好。 0.9.6 及更新版本默认使用弧度。