四元数可以说是在内部表示对象旋转的合适选择。它们可以简单有效地插值并明确表示单个方向。
但是,在用户界面中呈现四元数通常是不合适的 - 欧拉角通常对用户来说更熟悉,并且它们的值更直观和可预测。
欧拉角在代码级别受到复杂影响 - 它们需要存储旋转顺序,并且使用此顺序和相关角度组成实际方向(无论是矩阵还是四元数)至少可以说很麻烦。
使用四元数表示最方便地执行可靠插值 - 那么这是否意味着我们必须在欧拉表示和四元数表示之间不断转换?这在性能方面可行吗?
我们可以将方向存储为四元数并将它们转换为仅显示给用户吗?这可能是不可能的,因为对于任何给定的方向,只有一个四元数表示,但有许多欧拉表示。我们如何“挑选”对应于最初定义该方向的欧拉表示?这似乎是一项不可能完成的任务——我们在转换为四元数时实际上已经丢失了信息。
我们可以存储为欧拉角,然后根据需要转换为四元数吗?这可能是不可扩展的——从欧拉角到四元数的转换、插值,然后再转换回来可能是相对昂贵的代码。
我们可以简单地存储这两种表示并使用最适合任何给定情况的表示吗?内存方面的大量成本(想象一下具有大约 60 根骨骼的骨骼的动画曲线)并保持这些值同步可能会很昂贵,或者至少很麻烦。
有没有人看到、使用或提出过任何聪明的解决方案?上面的三个选项肯定不是唯一的吗?还有其他类似的问题域已经解决了吗?