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

时间:2016-02-17 12:42:28

标签: opengl glm-math

我有这个脚本来获取实体的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)

我在那里不计算什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

您可以使用预处理器宏来修复问题:

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

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