gpt4 book ai didi

c++ - 四元数相机。如何使其正确旋转?

转载 作者:可可西里 更新时间:2023-11-01 17:52:19 28 4
gpt4 key购买 nike

我有一个 3D 相机,其当前旋转存储为四元数,但我无法正确旋转它。我希望相机根据鼠标每帧的移动(第一人称射击风格)围绕其局部轴逐步旋转,但旋转是错误的。它有点工作,但相机似乎在不应该的时候绕着它的前轴“滚动”。

我用这个函数更新每一帧的旋转:

void Camera::rotate(const Quat& q)
{
// m_rot is the current rotation
m_rot = m_rot * q;
}

这是我的四元数乘法函数:

Quat Quat::operator*(const Quat &rhs) const
{
// quaternion elements in w,x,y,z order
Vector4d res;

res[0] = m_q[0]*rhs.m_q[0] - m_q[1]*rhs.m_q[1] -
m_q[2]*rhs.m_q[2] - m_q[3]*rhs.m_q[3];
res[1] = m_q[0]*rhs.m_q[1] + m_q[1]*rhs.m_q[0] +
m_q[2]*rhs.m_q[3] - m_q[3]*rhs.m_q[2];
res[2] = m_q[0]*rhs.m_q[2] - m_q[1]*rhs.m_q[3] +
m_q[2]*rhs.m_q[0] + m_q[3]*rhs.m_q[1];
res[3] = m_q[0]*rhs.m_q[3] + m_q[1]*rhs.m_q[2] -
m_q[2]*rhs.m_q[1] + m_q[3]*rhs.m_q[0];

return Quat(res);
}

我是做错了什么,还是某种浮点错误?

最佳答案

解决了问题。对于像我要使用的鼠标控制的第一人称相机,我想围绕局部 x 轴旋转以向上和向下看,但要绕全局 y 轴旋转以左右看。

所以这对于 x 轴是正确的:

m_rot = m_rot * q;

但我需要为 y 轴执行此操作:

m_rot = d * m_rot;

关于c++ - 四元数相机。如何使其正确旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857398/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com