在Data Visualization中,三维显示的OBJ需要旋转时使用rotation属性,但是该属性传入的值是一个四元数QQuaternion,直接赋值四元数很复杂,因此使用转化的方式获得该旋转四元数。
Data Visualization中横坐标为X(经度),纵坐标为Z(纬度),竖坐标为Y(高度),如图:
QQuaternion中提供了由欧拉坐标转为四元数的方法:
[static] QQuaternion QQuaternion::fromEulerAngles(float pitch, float yaw, float roll)
其中pitch,yaw,roll传入值为度(0-360)该值表示模型相对于对应坐标轴的旋转角度,旋转顺序为:
Z->X->Y。
但使用欧拉坐标系时,不同的旋转轴会引起不同的效果,例如先转X轴90°再转Z轴90°的效果和先转Z轴90°再转X轴90°的效果是不一样的。该方法个人认为较为适用于界面交互时操纵模型旋转角度。
QQuaternion中提供了由空间矢量转为四元数的方法:
[static] QQuaternion QQuaternion::rotationTo(const QVector3D &from, const QVector3D &to)
该函数计算一个原点发出的矢量到另一个原点发出的矢量的最小旋转四元数,计算的坐标系为标准正交坐标系,而Data Visualization中显示的不一定是标准间隔的,这里需要注意。
其中要注意的是,Data Visualization中Z轴方向与QQuaternion传入点的Z轴方向相反,需要取反操作。