您确实应该至少以粗略的方式确定您是否真的需要添加 AABB 测试阶段。
听起来您实际上是在将光线投射用于照明目的。确实有理由认为,如果是这种情况,大多数时候你的光线投射实际上会相交。您的环境可能会有一个外部边界。这意味着您在这种环境中实施的 AABB 测试很可能会在大部分时间(如果不是一直)相交。
此外,还假设光线投射以径向方式执行以用于 2D 照明目的,从中心位置开始的光线的 AABB 在某种意义上有点退化,因为每条光线(光线在长度)将导致 4 种可能的 AABB 之一:
x=0, y=0, x -> infinity y -> infinity
x=0, y=0, x -> infinity y -> -infinity
x=0, y=0, x -> -infinity y -> infinity
x=0, y=0, x -> -infinity y -> -infinity
如果您进行光线投射,例如64 条径向等距射线并天真地执行 64 次 AABB 检查(每个射线投射一个),例如,具有正 x 和正 y 方向的所有 16 条射线将解析为相同的 AABB 检查(上面列出的第一个)。
您可以执行类似的操作,例如始终执行这 4 个 AABB 检查,如果其中一个不与任何内容相交,那么您可以跳过 16 个射线投射。但这只有在你一直走到环境边缘时才会发生。
AABB 不太适合加速光线投射,因为只有接近与轴对齐的光线才能被 AABB(轴对齐边界框)很好地建模。
还存在另一种思维过程,它可以告诉您 AABB 测试不太可能有帮助。
使用 Box2D 执行光线投射的目的是因为该库提供了复杂的机制来为您加速光线投射。见iforce2d's World Querying:
Box2D 为 [世界查询] 提供了两个工具 - 光线投射和 AABB 测试。射线投射……我们不就是这样做的吗?是的,我们以手动方式完成了这项工作,循环遍历世界上的每个灯具,并检查所有灯具的光线,以找出最接近的灯具。当场景中有大量灯具时,这可能会非常低效。更好的方法是使用世界本身的 RayCast 功能。这使引擎可以专注于它知道靠近光线路径的固定装置。
该库将使用其内置的世界空间表示及其内置加速结构来为您确定特定射线将与哪些物体相交。这实际上是 box2dlights 自己存在的理由。
因此,没有任何目的使用 AABB(Box2D 提供的另一种世界查询)来尝试增强它。如果这确实是一件明智的事情,那么 Box2D 已经在 raycast 功能的引擎盖下为您做到了。