[url="
]
[/url]
Here is my code for getting the rigid body's rotation and for slerping:
const Quaternion<> RigidBody::getOrientation() const {
return Physics::fromQuaternion(rigidBody->getWorldTransform().getRotation());
}
const Quaternion<> Physics::fromQuaternion(const btQuaternion& q) {
return Quaternion<double>(-q.w(), Vector<3, double>(q.x(), q.y(), q.z()));
}
template <class T>
const Quaternion<T> Quaternion<T>::slerp(const Quaternion<T>& a, const Quaternion<T>& b, T delta) {
T w1, w2;
T cosTheta = dot(a, b);
T theta = (T)acos(cosTheta);
T sinTheta = (T)sin(theta);
if (sinTheta > 0.001) {
w1 = (T)(sin((1.0 - delta) * theta) / sinTheta);
w2 = (T)(sin(delta * theta) / sinTheta);
} else {
w1 = 1.0 - delta;
w2 = delta;
}
Quaternion<T> result(a * w1 + b * w2);
result.normalize();
return result;
}
template const Quaternion<double> Quaternion<double>::slerp(const Quaternion<double>&, const Quaternion<double>&, double);
My slerp code works fine for my own rotations. This only seems to happen on quaternions converted from Bullet.
Any ideas?