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

如何使用GLM在OpenGL中正确计算旋转,opengl,glm-math,Opengl,Glm Math,我有这个脚本来获取一个实体的MVP,都在glm中。我希望对象根据我用于移动的方向值旋转,但从视觉上看,对象的旋转速度要慢上百倍。这必须是准确的,以正确、直观地表示方向。但我不是专家,我只是在学习并试着让我的头脑清醒过来,所以再一次,希望明智的人能帮我解决这个问题?:) 默认情况下,转向速度为0.02 然后获得mvp: m_Direction[0] = cos(0.0f) * sin(m_Orientation); m_Direction[1] = sin(0.0f); m

我有这个脚本来获取一个实体的MVP,都在glm中。我希望对象根据我用于移动的方向值旋转,但从视觉上看,对象的旋转速度要慢上百倍。这必须是准确的,以正确、直观地表示方向。但我不是专家,我只是在学习并试着让我的头脑清醒过来,所以再一次,希望明智的人能帮我解决这个问题?:)

默认情况下,转向速度为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_方向)

我算不上什么


提前谢谢

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

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

#define GLM_FORCE_RADIANS
#include <glm/...>
#include <glm/...>
#定义GLM_力_弧度
#包括
#包括

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

如果每秒调用
turnRight()
60次,我预计完成一个完整的循环需要5秒钟。这就是你得到的吗?不,实际上玩家在一个地方旋转一百万次,当网格本身旋转一整圈时,旋转大约需要一分钟,所以我想我错过了一个计算。在网格旋转一整圈之前,你调用了多少次
turnRight()
?13400次,直到它旋转一整圈为止。只是测量了一下。我并没有计算从上一帧开始经过的时间,但这仍然不是问题……非常感谢!:)完美的现在感觉就像老居民的邪恶:P
#define GLM_FORCE_RADIANS
#include <glm/...>
#include <glm/...>