计算沿路径的旋转

时间:2008-11-15 17:12:23

标签: math animation 3d trigonometry

我正在尝试为一个物体制作动画,让我们说它是一辆汽车。我希望它从点开始

X1,Y1,Z1

指向 x2,y2,z2 。它移动到那些点,但它似乎是漂移而不是指向运动方向。所以我的问题是:如何在我的updateframe()事件中解决这个问题?你能指点我一些好的资源吗?

感谢。

6 个答案:

答案 0 :(得分:2)

首先,您如何代表这条路?

我最近完成了这件事,并且我使用了Catmull-Rom样条曲线。要定向对象并使其遵循样条线路径,您需要从沿着样条曲线行走的 t 中插入当前 x,y,z 位置,然后将其定向该特定职位的Frenet坐标系或Frenet Frame

基本上对于每个点,您需要3个向量:Tangent,Normal和Binormal。切线将是您希望物体(汽车)指向的实际方向。

我选择了Catmull-Rom,因为它们很容易在任何点上扣除切线 - 只需将2个其他近点之间的(向量)差异与当前值相区别。 (假设你在 t ,选择 t-epsilon t + epsilon - epsilon足够小)。

对于其他2个向量,您可以使用this iterative method - 也就是您从一端的一组已知向量开始,然后根据前一个向量工作一个新的 updateframe() )。

答案 1 :(得分:1)

您需要确定汽车的初始方向,以及汽车在其目的地的最终方向,然后在它们之间进行插值以确定当前时间步之间的方向。

This文章描述了插值背后的数学,以及与旋转对象有关的其他一些事情。 gamasutra.com一般来说是这种事情的绝佳资源。

答案 2 :(得分:0)

我认为插值正在给你所看到的漂移。 你需要模拟转向的工作方式..你的更新功能应该1)将汽车始终朝向它指向的方向移动2)将汽车转向当前目标..一个不应该影响另一个以便转向将会比到达更快地完成并完成。

答案 3 :(得分:0)

一般而言,汽车指向的方向是沿着速度矢量,它是位置矢量的第一个导数。

例如,如果汽车每隔 n 秒在原点周围(半径 r ),那么 x 组件汽车的位置由下式给出:

x = r.sin(2πt/n)

和它的速度矢量的 x 分量将是:

vx = dx/dt = r.(2π/n)cos(2πt/n) 

对所有 x y z 组件执行此操作,对生成的向量进行标准化,然后确定方向。

答案 4 :(得分:0)

始终将汽车指向目的地点既简单又便宜,但如果汽车沿着弯曲的路径行驶则不起作用。在这种情况下,您需要将汽车指向当前位置的切线(请参阅上面的其他答案)。

答案 5 :(得分:0)

从一个位置到另一个位置给一个物体一个速度,一个速度就是一个矢量,并且标准化该矢量会给你一个运动的方向矢量,你可以插入一个“看”矩阵,做十字架用这个向量来获得侧面和嘿presto你有一个完整的矩阵用于运动物体的方向控制。

相关问题