寻路

网格导航

jps寻路



1.A*算法插件

与贪婪算法不一样,贪婪算法适合动态规划,寻找局部最优解,不保证最优解。A*是静态网格中求解最短路最有效的方法。也是耗时的算法,不宜寻路频繁的场合。一

般来说适合需求精确的场合。

与启发式的搜索一样,能够根据改变网格密度、网格耗散来进行调整精确度。

使用较好的地方:
a.策略游戏的策略搜索
b.方块格子游戏中的格子寻路


2.U3D自带的导航网格系统

U3D内置了NavMesh导航网格系统,一般来说导航网格算法大多是“拐角点算法”,具体大家可以去查下。效率是比较高的,但是不保证最优解算法。

使用较好的地方:
a.游戏场景的怪物寻路
b.动态规避障碍

3.WayPoint寻路插件

速度最快,但相应来说表现也非常局限,它常常走“Z”型的轨迹,并不适合复杂场合的使用。例如它不能根据宽度、高度、路径点耗散等来改变行进路径。

使用较好的地方:
a.塔防怪物行进路径
b.AI巡逻路线


网格制作

曲边三角形,又称鲁洛三角形。就是将一个等边三角形的3个顶点为圆心,边长为半径,作各内角所对应的圆弧。擦去原来的等边三角形,剩下的图形就是曲边三角形。

它的本质其实就是等宽曲线。

三角剖分是代数拓扑学里最基本的研究方法。 以曲面为例, 我们把曲面剖开成一块块碎片,要求满足下面条件: (1)每块碎片都是曲边三角形; (2)曲面上任何

两个这样的曲边三角形,要么不相交,要么恰好相交于一条公共边(不能同时交两条或两条以上的边)。

【定义】Delaunay边:假设E中的一条边e(两个端点为a,b),e
若满足下列条件,则称之为Delaunay边:存在一个圆经过a,b两点,圆内(注意是圆内,圆上最多三点共圆)不含点集V中任何其他的点,这一特性又称空圆特性。

【定义】Delaunay三角剖分:如果点集V的一个三角剖分T只包含Delaunay边,那么该三角剖分称为Delaunay三角剖分。


Delaunay三角化是一种三角剖分DT(P),使得在P中没有点严格处于DT(P)中任意一个三角形外接圆的内部。Delaunay三角化最大化了此三角剖分中三角形的最小角,换句

话,此算法尽量避免出现“极瘦”的三角形。此算法命名来源于BorisDelaunay,以纪念他自1934年在此领域的工作。



DT点

在一个约束Delaunay三角形中,其中与一条边相对的顶点称为该边的DT点。

确定 DT 点的过程如下:

Step1.  构造 Δp1p2p3 的外接圆 C(p1,p2,p3)及其网格包围盒 B(C(p1,p2,p3))

Step2. 依次访问网格包围盒内的每个网格单元:

            对未作当前趟数标记的网格单元进行搜索,并将其标记为当前趟数

           若某个网格单元中存在可见点 p, 并且 ∠p1pp2 > ∠p1p3p2,则令 p3=p1,转Step1;否则,转Step3.

Step3.  若当前网格包围盒内所有网格单元都已被标记为当前趟数,也即C(p1,p2,p3)内无可见点,则 p3 为的 p1p2 的 DT 点

生成Delaunay三角网格算法如下:

Step2. 取任意一条外边界边 p1p2 .

Step3.  计算 DT 点 p3,构成约束 Delaunay 三角形 Δp1p2p3 .

Step4. 如果新生成的边 p1p3 不是约束边,若已经在堆栈中,则将其从中删除;否则,将其放入堆栈;类似地,可处理 p3p2 .

Step5. 若堆栈不空,则从中取出一条边,转Step3;否则,算法停止 .



=============================================

猜你喜欢

转载自blog.csdn.net/a133900029/article/details/80184235