使用两者之间的差异旋转其他两个欧拉角

时间:2013-08-29 11:54:34

标签: 3d camera rotation geometry euler-angles

我正在尝试使用样条线移动的相机。相机位置很好但是我想让我的相机在转动时转向转动。

例如,相机从x0 y0 z0移动到x1 y1 z1。现在我的眼睛向量是正常的(x1-x0,y1-y0,z1-z0)。如何旋转其他两个矢量(侧向和向上矢量)以匹配眼睛矢量而不破坏它们之间的90度角?

如果它更容易偏航/俯仰形式它也很好,我可以在两个之间转换。或者我想要实现的不同方法?

例如,我认为我可以通过计算样条曲线的法线(它是一个3点beizer曲线)来完成它,每一步我都可以计算出相机将围绕该法线旋转多少。但如果存在的话,我更喜欢更简单,更通用的方法。

你可以看到我在做什么here。 (点击行星)在这个中我将我的新旧眼睛矢量转换为俯仰/偏航并找到差异并使用此旋转其他矢量但这显然是错误的,因为在某些情况下,其他矢量可能根本不会改变(如果眼睛垂直旋转一个

1 个答案:

答案 0 :(得分:0)

这称为key frame动画。最好的方法是将Euler角度放在您感兴趣的位置和put them in quaternion form。然后,您可以使用样条线插值关键帧四元数以获取插值帧。

为什么这样?主要原因是你没有问题保持插值帧的变换矩阵的正交性,也没有必要提出一个启发式来选择欧拉角。详细了解Wikipedia,尤其是Comparison with other representations of rotations部分。

不要让四元数形式吓跑你,这实际上很容易。您所需要的只是从欧拉角(或变换矩阵)到四元数和反向的配方。您不必了解四元数本身,除了它们可以很好地插入样条曲线。