56

嗨,我正在用Java制作体素游戏,在研究我需要学习的所有不同内容时,我注意到很多游戏都使用AABB进行碰撞检测。然后我记得我也在 Minecraft 中看到了AABB 。但是当我在谷歌上搜索AABB是什么时,它只会出现其他人的代码,或者历史书中的某个组织。Stackoverflow,什么是AABB

4

2 回答 2

64

AABB 代表“轴对齐边界框”。

这是一种表示体积的计算和内存效率相当高的方法,通常用于查看两个对象是否可能接触。

由于它是轴对齐的,它不一定“适合”您的真实 3D 对象。AABB 检查通常用作粗略的初步近似,以查看对象是否可能发生碰撞。然后,如果 AABB 检查通过,则进行更详细的检查。

例子:

想象你的世界是 2D 的,你把它画在一张方格纸上。你在世界上有一些物体(一个球,一棵树,等等)。要为其中一个对象制作 AABB,请在对象周围绘制一个矩形,使线条与纸上的网格线平行。

如果您有两个对象的 AABB,您可以做一些非常简单的数学运算来查看这些 AABB 是否重叠。如果它们不重叠,则这两个对象不可能接触,因此对于您的碰撞算法来说,这是一个简单的早期输出。

这很容易推广到 3D(和更多 Ds)。

您可能还想查看gamedev.stackexchange.com

于 2014-03-19T16:35:23.827 回答
9

轴对齐边界框

基本上它是可以完全包含形状的最小 Cuboid,通常由一对 3d 坐标定义。

检查两个 AABB 之间的碰撞非常快,因为您需要做的就是检查角的 X、Y 和 Z 值的范围。

于 2014-03-19T16:35:08.813 回答