沿曲线移动对象同时旋转它


11

我想沿着曲线移动物体。我希望在曲线的特定点上,物体可以改变速度并沿其轴旋转。

想象一下一架飞机飞往目的地。它具有必须遵循的路径,此外,还一直调整其速度和方向(航向,髓,堤)。

我能否请您提供以下信息

  • 什么样的曲线,用来平滑地插入对象
  • 什么公式来使用可靠的插值,在那里我可以控制移动oject的速度,曲线节之间的过渡将是无缝
  • 应从3D创作应用程序导出哪些信息
  • 我应该为此使用四元数slerp()吗?

如果您知道一本有效地涵盖了该主题,那将使您收获最多。谢谢。

Answers:


7

对于运动曲线,建议使用Hermite曲线。您只需给出一个起点/速度和一个终点/速度,它就可以在这两个之间建立一条优美而平滑的曲线。使用第一对点的终点/速度作为下一对点的起点/速度,您将获得一条优美而又无缝的长弯曲曲线。

这完美地满足了管理速度的要求:您可以选择速度来提供时间点列表,还可以无缝插补位置和速度值。如果要这样做,从3D创作应用程序中提取的所有内容就是所需路径中的点和速度。您也可以在运行时生成它们,也许基于用户输入。

要调整方向,您有很多选择。如果飞机总是指向飞行的方向(在这种情况下是有意义的),则可以使用Hermite曲线中的插值速度矢量来找到您的船应指向的位置。如果您知道向上向量(它在平面中移动,或者您知道哪个方向应该向上),则可以通过cross(front,up)计算第三个轴,然后确定方向。

如果要某种“摆动”方向,以使平面有时偏离路径中的前方向,则可以将前方向用作所需方向,并在当前方向和所需方向之间连续进行一步调整。

如果要使用与路径无关的自定义方向,则当然可以为此提供方向四元数的列表。然后您的点变为(点,速度,四元数)。然后,您可以在两个连续的四元数之间使用slerp来设置方向。不要忘记slerp是线性插值方法。但是,通常应该没问题。如果您发现该旋转不会在接缝处不够光滑,你可以尝试用插值贝塞尔曲线四元数的列表,说明这里在第7。

是一些可以帮助您入门的源代码。对于四元数列表(小数,贝塞尔曲线等),它具有多种平滑插值技术。

如果您有任何疑问,请告诉我!


+1-谢谢,您的回答基本上涵盖了所有内容。它回答了我提出的每个问题,此外,您还提供了进一步的学习材料。现在,我有足够的材料开始。因此,我认为没有理由不将其标记为“已接受答案”
Bunkai.Satori 2011年

@ Bunkai.Satori谢谢您,很高兴获得帮助:)我很想看看您最终创建的内容。
Gazihan Alankus,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.