繁体   English   中英

如何使用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及更高版本默认情况下使用弧度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM