Opengl 用四元数旋转对象
关于使用四元数旋转图形对象,我有一个问题 我有一个Opengl 用四元数旋转对象,opengl,rotation,quaternions,glm-math,Opengl,Rotation,Quaternions,Glm Math,关于使用四元数旋转图形对象,我有一个问题 我有一个Transform类,它具有以下带默认参数的构造函数: Transform(const glm::vec3& pos = glm::vec3(0.0), const glm::quat& rot = glm::quat(1.0, 0.0, 0.0, 0.0), const glm::vec3& scale = glm::vec3(1.0)) { m_pos = pos; m_rot = rot;
Transform
类,它具有以下带默认参数的构造函数:
Transform(const glm::vec3& pos = glm::vec3(0.0), const glm::quat& rot = glm::quat(1.0, 0.0, 0.0, 0.0),
const glm::vec3& scale = glm::vec3(1.0))
{
m_pos = pos;
m_rot = rot;
m_scale = scale;
}
在我的Transform
类中,计算MVP
,如下所示:
glm::mat4 Transform::GetModelMatrix() const
{
glm::mat4 translate = glm::translate(glm::mat4(1.0), m_pos);
glm::mat4 rotate = glm::mat4_cast(m_rot);
glm::mat4 scale = glm::scale(glm::mat4(1.0), m_scale);
return translate * rotate * scale;
}
我面临的问题是,当我使用constglm::quat&rot=glm::quat(1.0,0.0,0.0,0.0)
时,我的对象在屏幕上显示正常。下图显示了它:
但是,如果我尝试使用例如const glm::quat&rot=glm::quat(glm::radians(90.0f)、0.0、1.0、0.0)
(在y轴上旋转90度),我的对象似乎已经缩放。下图显示了它:
当我试着旋转它时,我不知道是什么导致它变成这样。我错过了什么重要的事情吗
如果有任何关联,以下是我计算视图矩阵的方式:
glm::mat4 Camera::GetView() const
{
glm::mat4 view = glm::lookAt(m_pos, m_pos + m_forward, m_up);
return view;
}
AFAIK您可以使用以下方法初始化glm::quat:
glm::vec3 angles(degToRad(rotx), degToRad(roty), degToRad(rotz));
glm::quat rotation(angles);
其中,rotx
,roty
,rotz
是围绕x、y和z轴的旋转角度,degToRad将角度转换为弧度。因此,对于您的情况:
glm::vec3 angles(degToRad(0), degToRad(90), degToRad(0));
glm::quat rotation(angles);
glm没有指定角度和轴的四元数构造函数。您正在使用您的值直接初始化四元数文件,导致一些奇怪的非规范化四元数。@derhass我应该如何初始化它呢?