四元数方向和向量位置的插值

Interpolation of quaternion orientations and vector positions

我有一个 3d 相机 space 由四元数和位置向量(q1 和 p1)定义 我想将相机移动到由另一对四元数和向量(q2 和 p2)定义的另一个视点。为了实现流畅的动画,我使用球面线性插值法对四元数进行插值,使用线性插值法对位置向量进行插值。对于小的相机运动,它工作正常,但如果相机应该围绕模型旋转 180 度,它看起来很难看,因为它不围绕模型,而是穿过模型。

所以问题是如何在考虑相机方向的 slerp 插值的情况下对相机位置进行插值?

我找到了解决问题的方法:

首先,我计算四元数 q1 和 q2 之间的差异,并根据该差异计算轴角表示。然后我从线 p1-p2、旋转轴和角度值计算旋转中心:

center = (p1 + p2) * 0.5 + norm(X 轴 (p2 - p1)) * (0.5 * |p2 - p1| / sin(angle * 0.5) )

然后我只是围绕中心旋转点 p1 以插入相机位置