四元数旋转奇怪的旋转

我有一个fps相机,我代表与四元数旋转。 每一帧我抓住多less鼠标移动的框架,然后我只是做

Quat DeltaQ = Quat::CreateRotationXYZ(MouseYDelta, MouseXDelta, 0); m_CurrentRotationQ = DeltaQ * m_CurrentRotationQ; 

然而,一切工作,直到我旋转90度的权利。 当我这样做,我不能上下旋转。 另外,我正在面对的工作方向正在改变,但是,根据我所看到的左右移动方向,我尝试了很多事情,例如颠倒顺序的乘法,我真的很茫然。 任何帮助将不胜感激。

感谢DMGregory。 你提到的文章并没有直接回答我的问题,但事实上让我开始思考转换空间的不同,最终导致我实现了一个解决scheme,干杯!

好的,我已经解决了我的问题。 我所做的是让我的相机的旋转()方法接受一个空间参数,如

 Camera::Rotate(Quat,ESpace = Local|World); 

然后我控制像这样的相机旋转

 Camera::Rotate(Quat::CreateRotation(DeltaY, Vec3(0,1,0)), ESpace::World); Camera::Rotate(Quat::CreateRotation(DeltaX, Vec3(1,0,0)), ESpace::Local); 

这使我可以独立设置每转的空间,这是按预期工作的。 四元数很难习惯大声笑。 PS,Camera :: Rotate()方法看起来像这样

 void CFlyingCamera::Rotate( const CQuaternion& Rotation, ETransformSpace Space ) { if( Space == ETransformSpace::Local ) m_Rotation = m_Rotation * Rotation; if( Space == ETransformSpace::World ) m_Rotation = Rotation * m_Rotation; }