我喜欢基于度数的欧拉旋转,因此我可以为大量度数(如 1000)的动画设置关键帧,并在对象上获得多个完整的 360 度旋转,以设置其旋转等。
但是,我现在正在处理一些涉及两个不同轴之间的大量连续动画的事情,我认为我正在看到gimbal lock的效果。当我执行其中一个链接动画时,我的对象在完成 90 度旋转后继续翻转 180 度。这听起来像云台锁吗?它仅在沿不同轴进行其他先前且成功的旋转之后发生。
无论如何,我尝试切换到四元数,但似乎四元数不适合这种旋转效果,因为它们只是为您提供方向,并且使用以下方法将 360 的倍数视为 0:
template <typename T>
inline QuaternionT<T> QuaternionT<T>::CreateFromAxisAngle(const Vector3<T>& axis, float radians)
{
QuaternionT<T> q;
q.w = std::cos(radians / 2);
q.x = q.y = q.z = std::sin(radians / 2);
q.x *= axis.x;
q.y *= axis.y;
q.z *= axis.z;
return q;
}
是否有可能通过四元数技术获得超过 360 度的旋转?