我使用 slerp 在表示旋转的两个四元数之间进行插值。然后将生成的旋转提取为欧拉角,以输入图形库。这种作品,但我有以下问题;沿绿色箭头方向围绕两个(一个工作正常)轴旋转时,如左框架所示
旋转很快就会跳来跳去,从相反的位置旋转到相反的视觉方向,如右图中的红色箭头所示。
从数学的角度来看,这可能是合乎逻辑的(尽管对我来说不是),但这是不受欢迎的。当围绕多个轴旋转时,如何实现没有视觉翻转和方向改变的插值,始终遵循绿色箭头直到插值完成?
提前致谢。
我使用 slerp 在表示旋转的两个四元数之间进行插值。然后将生成的旋转提取为欧拉角,以输入图形库。这种作品,但我有以下问题;沿绿色箭头方向围绕两个(一个工作正常)轴旋转时,如左框架所示
旋转很快就会跳来跳去,从相反的位置旋转到相反的视觉方向,如右图中的红色箭头所示。
从数学的角度来看,这可能是合乎逻辑的(尽管对我来说不是),但这是不受欢迎的。当围绕多个轴旋转时,如何实现没有视觉翻转和方向改变的插值,始终遵循绿色箭头直到插值完成?
提前致谢。
坦率地说,您对问题的描述有点难以理解。但听起来你需要否定你的四元数之一。
请记住,每个旋转实际上可以由两个四元数 q 和 -q 表示。但是从 q 到 w 的 Slerp 路径将不同于从 (-q) 到 w 的路径:一个会绕远,另一个绕近。当你想要捷径时,听起来你正在走很长的路。
尝试取两个四元数的点积(即 4-D 点积),如果点积为负数,则在执行 Slerp 之前将四元数 q1 和 q2 替换为 -q1 和 q2。
总旋转距离是多少?您可能会要求对角度相距太远的两个方向进行插值。从某种意义上说,数学,无论是否是四元数,都难以决定走哪条路。就像动画中没有足够的关键帧一样。
在中途确定一个好的中间方向,并从初始方向到中间方向以及从中间方向到最终方向进行单独的插值。