建立2D AABB
程序员文章站
2024-02-02 23:44:46
...
AABB是游戏中经常用的包围盒。本文提出一种2D空间内自动生成AABB的算法,读者也可在此基础上开发出基于3D的AABB自动生成算法。 本算法可以用来在一个给定区域内进行AABB的自动挖掘产生。如:场景内各建筑的阻挡点包围框;纹理贴图上小图标的包围框…… 算法
AABB是游戏中经常用的包围盒。本文提出一种2D空间内自动生成AABB的算法,读者也可在此基础上开发出基于3D的AABB自动生成算法。
本算法可以用来在一个给定区域内进行AABB的自动挖掘产生。如:场景内各建筑的阻挡点包围框;纹理贴图上小图标的包围框……
算法描述:
- 创建一个AABB空列表aabbList
- 循环给定空间内的每一个点pt
- 如果pt为不感兴趣的点,则跳转2
- 如果pt为感兴趣的点
- 为pt创建一个大小为1的AABB rect
- 遍历aabbList中每个元素aabb
- 如果rect和aabb邻接或相交,则表明rect和aabb可以合并
- rect = Union(rect,aabb),将aabb合并到rect
- 从aabbList中删除aabb
- 将rect加入到aabbList
- 返回aabbList
C#实现代码如下:
///
/// 判断是否对给定位置感兴趣并愿意放入AABB
///
delegate bool InterestPredicate(int x, int y);
///
/// 得到给定区域范围内的所有AABB
///
/// 要搜索的区域,该区域的每个点值将逐一传给
static ListRectangle> GenerateAllAABB(Rectangle area, InterestPredicate isInterest)