OpenGL:使用滚动俯仰和偏航值旋转

时间:2016-08-29 08:11:25

标签: opengl rotation

我有一个旋转模型的问题。我的文件由滚动,俯仰和偏航的相对整数值组成。 因此,每一段时间我都会阅读这些价值并适用于我的模型:

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)......我需要使用角度而不是角度的差异。工作正常。

0 个答案:

没有答案