如何为图块网格生成导航网格?


18

我实际上还没有开始为此编写程序,但是我想看看我将如何去做。

假设我有一块瓷砖,所有尺寸都是相同的,有些是可穿越的,有些不是。我将如何从该网格创建多边形的导航网格?

我的想法是取出不可遍历的图块,并从那里的边缘延伸线以制成多边形……这就是我到目前为止所要做的。有什么建议吗?


2
从技术上讲,网格几乎等同于导航网格。我怀疑您实际上是在寻求一种优化网格并合并相邻正方形的方法。
Kylotan '11

@Kylotan是的,这正是我的意思,只是一种组合相邻多边形的方法。
罗斯·海斯

Answers:


28

这是我为RTS游戏制作导航网格时想到的方法之一。请注意,这是自制程序,没有使用任何第三方工具,我花了大约3周的时间来实现和修正错误:

  1. 使用Marching Squares算法将障碍瓷砖转换为轮廓。请注意,地图边缘也是轮廓,还需要包括在内。
  2. 使用Douglas-Peucker算法减少轮廓中的点数(底部图片上的紫色线)
  3. 将所有点馈入Delaunay三角剖分(以获取最均匀的三角形)
  4. 在空白区域和地图边缘添加其他点(以获得更均匀的导航网格)
  5. 检查障碍物轮廓并翻转Delaunay产生的多边形以匹配轮廓。-Delaunay通常会放置与轮廓(红色)不匹配的三角形(灰色),然后需要检测并翻转它们。将它们重新连接成多边形,将其沿轮廓分割并手动进行三角剖分 在此处输入图片说明
  6. 剪辑障碍物内部 -移除障碍物内的多边形(上图中的粉红色)
  7. 根据需要填写其余三角形和顶点之间的连接性数据 -这就是您的导航网格。

结果:

tilemap导航网格


1

网格通常实现为图形。如果要在基于网格的地图中实现寻路,请执行以下操作:

创建一个图形,其中每个可遍历的正方形都表示为一个顶点。表示为顶点的每对相邻的可遍历正方形之间将有一条边。这样就完成了。


1
这不是通常实现导航方式的方式。导航网格的目的(也是我想问问问者在此处问问题的原因)的目的是将图形优化到最小所需的多边形(通常是三角形)的数量,这些多边形跨越最有用的空间以减少找到一条好的路径所需的步骤以及定义网格所需的内存占用量。原始实现既会消耗大量内存,又会浪费宝贵的AI处理时间。
Gurgadurgen '16

你是对的。当然,抽取(多边形缩减)是合理且理想的优化方法。只是,当您阅读操作员的问题时,您会感觉到他只是想将网格变成图表。
wolfdawn
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.