使用四元数插值旋转时翻转问题

时间:2010-05-22 01:45:48

标签: math 3d rotation interpolation quaternions

我使用slerp在表示旋转的两个四元数之间进行插值。然后将得到的旋转提取为欧拉角,以馈入图形库。这种作品,但我有以下问题;当在绿色箭头的方向上绕两个(一个工作正常)轴旋转时,如左框所示

here

旋转很快就会从相反的位置跳转到相反的视觉方向,如右框中的红色箭头所示。

从数学角度来看,这可能是合乎逻辑的(尽管不是我),但这是不受欢迎的。当围绕多个轴旋转时,如何随时跟随绿色箭头直到插值完成,我怎么能实现无视觉翻转和方向改变的插值?

提前致谢。

2 个答案:

答案 0 :(得分:9)

坦率地说,你对这个问题的描述有点难以理解。但听起来你需要否定你的一个四元数。

请记住,每个旋转实际上可以用两个四元数q和-q表示。但是从q到w的Slerp路径将不同于从(-q)到w的路径:一个将走很远的距离,另一个走向短距离。当你想要短路时,听起来你正在走得很远。

尝试获取两个四元数的点积(即4-D点积),如果点积为负,则在执行Slerp之前将q1和q2替换为-q1和q2。

答案 1 :(得分:0)

总旋转多远?您可能要求对两个方向进行插值,使其在角度上相隔太远。从某种意义上说,数学,四元数与否,难以决定走哪条路。就像在动画中没有足够的关键帧一样。

确定一个良好的中间方向大约一半,并从初始方向到中间方向,从中间到最后进行单独的插值。