D3DXQUATERNION * WINAPI D3DXQuaternionSlerp(D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ1, CONST D3DXQUATERNION *pQ2, FLOAT t) { float s = 1.0f - t; float dot = D3DXQuaternionDot(pQ1, pQ2); if (dot < 0.0f) { t = -t; dot = -dot; } if (1.0f - dot > 0.00001f) { float theta = acosf(dot); s = sinf(theta * s) / sinf(theta); t = sinf(theta * t) / sinf(theta); } *pOut = s * *pQ1 + t * *pQ2; return pOut; }
Leave a Reply