欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

建立2D AABB

程序员文章站 2024-02-02 23:44:46
...

AABB是游戏中经常用的包围盒。本文提出一种2D空间内自动生成AABB的算法,读者也可在此基础上开发出基于3D的AABB自动生成算法。 本算法可以用来在一个给定区域内进行AABB的自动挖掘产生。如:场景内各建筑的阻挡点包围框;纹理贴图上小图标的包围框…… 算法

AABB是游戏中经常用的包围盒。本文提出一种2D空间内自动生成AABB的算法,读者也可在此基础上开发出基于3D的AABB自动生成算法。

本算法可以用来在一个给定区域内进行AABB的自动挖掘产生。如:场景内各建筑的阻挡点包围框;纹理贴图上小图标的包围框……

算法描述:

  1. 创建一个AABB空列表aabbList
  2. 循环给定空间内的每一个点pt
  3. 如果pt为不感兴趣的点,则跳转2
  4. 如果pt为感兴趣的点
  5. 为pt创建一个大小为1的AABB rect
  6. 遍历aabbList中每个元素aabb
  7. 如果rect和aabb邻接或相交,则表明rect和aabb可以合并
  8. rect = Union(rect,aabb),将aabb合并到rect
  9. 从aabbList中删除aabb
  10. 将rect加入到aabbList
  11. 返回aabbList

C#实现代码如下:

///

/// 判断是否对给定位置感兴趣并愿意放入AABB

///

delegate bool InterestPredicate(int x, int y);

///

/// 得到给定区域范围内的所有AABB

///

/// 要搜索的区域,该区域的每个点值将逐一传给

static ListRectangle> GenerateAllAABB(Rectangle area, InterestPredicate isInterest)