3

我正在尝试为一个对象设置动画,假设它是一辆汽车。我希望它从点开始

x1,y1,z1

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

谢谢。

4

6 回答 6

2

首先,您如何代表道路?

我最近做了这件事,我在道路上使用了Catmull-Rom样条线。要定向对象并使其遵循样条线路径,您需要从沿着样条线的t插入当前x、y、z位置,然后将其沿 Frenet 坐标系或Frenet 框架定向到该特定位置。

基本上,对于每个点,您需要 3 个向量:切线、法线和副法线。切线将是您希望对象(汽车)指向的实际方向。

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

对于其他 2 个向量,您可以使用这种迭代方法- 也就是说,您从一端的一组已知向量开始,然后在每个updateframe()的基础上工作一个新的集合)。

于 2008-11-19T18:33:15.940 回答
1

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

本文描述了插值背后的数学原理,以及与旋转对象有关的一些其他可能对您有用的事情。一般来说,gamasutra.com 是这类事情的绝佳资源。

于 2008-11-15T17:31:11.713 回答
0

我认为插值会给你看到的漂移。您需要对转向的工作方式进行建模..您的更新功能应该 1) 始终沿其指向的方向移动汽车 2) 将汽车转向当前目标 .. 一个不应该影响另一个,以便转弯将比到达更快地发生和完成。

于 2008-11-15T17:41:20.210 回答
0

一般来说,汽车指向的方向是沿着它的速度向量,这是它的位置向量的一阶导数。

例如,如果汽车每n秒绕原点绕一圈(半径为r ),则汽车位置的x分量由下式给出:

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

其速度矢量的x分量将是:

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

对所有xyz分量执行此操作,对结果向量进行归一化,然后您就有了方向。

于 2008-11-19T17:50:34.450 回答
0

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

于 2008-11-20T05:05:29.190 回答
0

going from one position to another gives an object a velocity, a velocity is a vector, and normalising that vector will give you the direction vector of the motion that you can plug into a "look at" matrix, do the cross of the up with this vector to get the side and hey presto you have a full matrix for the direction control of the object in motion.

于 2009-02-09T13:20:06.890 回答