什么是距离场
距离场(distance field)是一种在计算机图形学和计算机游戏中广泛使用的技术,用于表示一个图形或物体上每个点到离它最近的一个目标的距离。距离场可以用于很多应用,例如体素化、碰撞检测、阴影计算、路径规划等。
在游戏中,距离场经常被用于路径规划。路径规划算法需要在地图上找到从起点到终点的最短路径。而在复杂的地图中,很多地方是不可行走的,例如墙壁、障碍物等,因此需要一个数据结构来表示地图中哪些地方可以通过,哪些地方不可以通过。距离场可以为每个可行走的点分配一个代表它与最近障碍物距离的数值,这样路径规划算法就可以利用这个距离场来计算从起点到终点的最短路径。
实现步骤
本文主要讲解作者自己距离场的实现方案和步骤,经过实际项目考验。
距离场的实现主要分成三步:
- 通过地图信息,生成距离场的默认值。
- 从左下到右上,进行遍历第一次,更新距离场值。
- 从右上到左下,再进行一次遍历,更新距离场值。
这种算法也叫波前扩展算法(wave expansion algorithm)。
初始化距离场
遍历地图,对每个格子设置一个默认值 255;然后对于每个障碍物,将其距离场值设置为 0,表示不可通过;最后将前后左右不能联通或者有阻挡的格子距离场值设置为 0。
![](https://img-blog.csdnimg.cn/b08a5ba9a62149c086881ee4dfe2cd59.png)