在此评论中,强烈建议我们永远不要使用欧拉角。我知道欧拉角存在一些限制,尤其是万向节锁定,但我想知道在没有欧拉角的情况下通常使用的最佳技术或技术集?
关于这个主题的大多数讨论都涉及从欧拉角转换为四元数,这是一件简单的事情。但是我读过的关于在没有欧拉角的情况下进行旋转的唯一方法是从两个向量中创建一个四元数,正如 Stan Melax 在“游戏编程宝石”中的文章“最短弧四元数”中所描述的那样,使用这种技术:
template <typename T>
inline QuaternionT<T> QuaternionT<T>::CreateFromVectors(const Vector3<T>& v0, const Vector3<T>& v1)
{
Vector3<T> c = v0.Cross(v1);
T d = v0.Dot(v1);
T s = std::sqrt((1 + d) * 2);
QuaternionT<T> q;
q.x = c.x / s;
q.y = c.y / s;
q.z = c.z / s;
q.w = s / 2.0f;
return q;
}
这是链接评论中提到的方法吗?