空间中的QVector3D既可以代表空间中的点位置,也可以表示空间矢量。为什么要对空间矢量进行旋转呢,比如有一个空间矢量在空间中代表了镜头前进的方向(即第一人称模式),初始时该矢量指向正北方向QVector3D(0,0,1),在镜头前进过程中,镜头旋转了r度,此时镜头前进的的矢量就需要相应的旋转r度,Qt中提供了QQuaternion用于三维空间中的矢量旋转
其中静态函数
[static] QQuaternion QQuaternion::fromEulerAngles(float pitch, float yaw, float roll)
用于设置在不同轴上旋转得到的四元数,从而使用QQuaternion 的矢量旋转函数
QVector3D QQuaternion::rotatedVector(const QVector3D &vector) const
获得新的方向矢量,示例:
qreal r = 67.6;
QVector3D v(1,0,0);
QQuaternion qua = QQuaternion::fromEulerAngles(0,r,0);
QVector3D vr = quax.rotatedVector(v);//新的旋转所得到的矢量
拓展:四元数
四元数是简单的超复数。四元数都是由实数加上三个虚数单位 i、j和k 组成,而且它们有如下的关系: i² = j² = k² = -1, iº = jº = kº = 1 , 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bi+ cj + dk,其中a、b、c 、d是实数。
对于i、j和k本身的几何意义可以理解为一种旋转,其中i旋转代表Z轴与Y轴相交平面中Z轴正向向Y轴正向的旋转,j旋转代表X轴与Z轴相交平面中X轴正向向Z轴正向的旋转,k旋转代表Y轴与X轴相交平面中Y轴正向向X轴正向的旋转,-i、-j、-k分别代表i、j、k旋转的反向旋转。
对于使用Qt做三维空间变换来说,不需要弄懂四元数的概念,只需要知道是用来对三维空间坐标处理的,掌握好相关函数即可。