我有一个旋转模型的问题。我的文件由滚动,俯仰和偏航的相对整数值组成。 因此,每一段时间我都会阅读这些价值并适用于我的模型:
rotate(current_yaw - previous_yaw, QVector3D(0,0,1)) ;
rotate(current_pitch - previous_pitch, QVector3D(0, 1, 0)) ;
rotate(current_roll - previous_roll, QVector3D(1,0,0)) ;
旋转函数将变换/模型矩阵与旋转矩阵相乘。 我的问题是,当值返回0时,模型不是直的。
我试过只进行一次旋转(只有偏航,然后滚动,然后是俯仰),它工作正常。所以问题在于结合轮换。
我知道订单很重要。我想做,例如,滚动 - 俯仰 - 偏航和随后的偏航 - 俯仰 - 滚动以回到模型的初始位置。 但是在成千上万的非对称值的情况下,某些角度可能是正面而其他角度可能是负面的,我真的不知道该怎么做。
有没有办法同时应用所有这些轮换?
编辑: 为了尝试同时应用所有旋转,我尝试使用QQuaternion。这是我虽然可以工作但仍然没有的例子。
QQuaternion rotation = QQuaternion::fromEulerAngles(20, 20, 20) ;
m_world.setToIdentity();
m_world.rotate(rotation);
QQuaternion rotation_back = QQuaternion::fromEulerAngles(-20, -20, -20) ;
m_world.setToIdentity();
m_world.rotate(rotation_back);
世界矩阵最终不是身份。
编辑:当然第二个四元数应该是(0,0,0)......我需要使用角度而不是角度的差异。工作正常。