我有这个脚本来获取实体的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)
我在那里不计算什么?
提前致谢!
答案 0 :(得分:0)
我认为您使用的是使用度数而不是弧度的旧版GLM。这是旧版GLM中一个令人遗憾的设计缺陷。
您可以使用预处理器宏来修复问题:
#define GLM_FORCE_RADIANS
#include <glm/...>
#include <glm/...>
但是,升级到更新版本的GLM可能会更好。版本0.9.6和更新版本默认使用弧度。