[英]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.