您好我正在 Java 制作体素游戏,在研究我需要学习的所有不同内容时,我注意到很多游戏都使用 AABB 用于碰撞检测。然后我记得在Minecraft中也看到了 AABB 。但是当我谷歌搜索 AABB 时,它只会出现其他人的代码,或者历史书中的某些组织。 Stackoverflow,什么是 AABB ?
答案 0 :(得分:43)
AABB代表“Axis-Aligned Bounding Box。”
这是一种相当计算和内存效率的表示音量的方式,通常用于查看两个对象是否可能正在接触。
由于它是轴对齐的,因此它不一定非常适合您的真实3D对象。 AABB检查通常用作粗略的第一近似值,以查看对象是否可能发生碰撞。然后,如果AABB检查通过,则进行更详细的检查。
示例:强>
想象一下你的世界是2D,你在一张方格纸上画它。 你有一些世界上的物体(球,树,等等)。要为其中一个对象创建AABB,可以在对象周围绘制一个矩形,使线条与纸张上的网格线平行。
如果您有两个对象的AABB,您可以做一些非常简单的数学运算来查看这些AABB是否重叠。如果它们没有重叠,那么这两个对象就不可能被触摸,因此对于你的碰撞算法来说,这是一个很容易的早期出现。
这很容易推广到3D(和更多Ds)。
您也可以查看gamedev.stackexchange.com。
答案 1 :(得分:7)
Axis Aligned Bounding Box
基本上它是可以完全包含形状的最小的Cuboid,通常由一对3d坐标定义。
检查两个AABB之间的碰撞非常快,因为你需要做的就是检查拐角的X,Y和Z值的范围。