找到任何三维表面上两点之间的距离

时间:2016-02-24 15:17:48

标签: path-finding

我在Unity3d中制作游戏,我需要一种寻路算法,可以引导敌人朝向3D表面上的玩家。问题是三维表面可以采用任何形状,因此它可以是三维球体,立方体,圆环面和更多形状。

我尝试使用A *但是对于那个公式我需要两点之间的距离,并且因为物体是弯曲的,所以我不能那么容易地得到它。我发现你可以使用Haversine公式,如果它是一个球体,但是它不适用于圆环或随机的3d形状。

除了各种对象之外我想要这种结果: https://www.youtube.com/watch?v=hvunNq7yVcU

有没有一种方法/算法可以用来获得结果。我知道有一种叫做导航网格的东西,但我需要自己编程。此外,我无法找到导航网格如何接近这种困境。我将使用我的对象的三角形作为节点。

所以我的问题归结为:

有没有人知道适用于任何3D表面的寻路算法?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您没有使用graph,我建议您查看如何创建图表的教程,如果可以的话,使用您正在使用的语言,({{3这里他们使用边连接他们的节点,如果你有一个以上的权重,这是必需的)。如果你做了一个图表,你将需要一个节点类。每个节点必须包含指向它所连接的任何节点的指针以及某种ID。在您的情况下,您可能只需要它,但如果您还有用于连接节点的边缘类(节点之间的连接器),也可以为每个移动分配权重。如果你有一个边缘类,你的节点将有指向边而不是其他节点的指针,每个边将有一个权重和指向1或2个节点的指针(取决于它是否是有向路径)。您还可以创建一个图表类来包含所有节点和边。

要点:  创建一个节点类并确定你是否需要边缘类(如果所有的权重都为1,你就可以逃脱它)。使用节点类创建一个图形来表示您的地图,每个图块都是一个节点,指向连接的图块。使用A *或dijkstra算法搜索图表以找到最短路径。

注意:你会发现的大多数例子都是2d图,你的没有什么不同,除了没有你的边界,你只需要将节点连接到它们的相邻图块。