gh::Quaternion slerp( const Quaternion& p, const Quaternion& q, float blendFactor ) { Vector3 PIm( p.x, p.y, p.z ); Vector3 QIm( q.x, q.y, q.z ); Vector4 PInv = qInverse( p ); return qMult( p, qExp( qMult( qInverse( p ), q ), blendFactor ) ); }
void QuaternionManipulator::qtest1() { HEADER("TEST 1 : Rotation of 90 degrees about the y-axis") Vector axis = {0.0f, 1.0f, 0.0f}; Quaternion q = qFromAngleAxis(90.0f, axis); qPrint(" q", q); Quaternion vi = {0.0f, 7.0f, 0.0f, 0.0f}; qPrint(" vi", vi); Quaternion ve = {0.0f, 0.0f, 0.0f, -7.0f}; qPrint(" ve", ve); Quaternion qinv = qInverse(q); //qClean(qinv); qPrint("qinv", qinv); Quaternion vf = qMultiply(qMultiply(q,vi), qinv); qPrint(" vf", vf); assert(qEqual(vf, ve)); }