嗨,我正在使用Java制作一个体素游戏,在研究需要学习的不同内容时,我注意到很多游戏都使用AABB进行碰撞检测。然后我想起在Minecraft中也看到了AABB。但是当我搜索AABB是什么时,只会出现其他人的代码或一些历史书籍上的组织。Stackoverflow,AABB是什么?
嗨,我正在使用Java制作一个体素游戏,在研究需要学习的不同内容时,我注意到很多游戏都使用AABB进行碰撞检测。然后我想起在Minecraft中也看到了AABB。但是当我搜索AABB是什么时,只会出现其他人的代码或一些历史书籍上的组织。Stackoverflow,AABB是什么?
AABB代表 "轴对齐包围盒"。
它是一种相当计算和内存效率高的表示体积的方式,通常用于检查两个物体是否可能接触。
由于它是轴对齐的,因此它不一定很好地“适合”您的真实3D物体。 AABB检查通常用作粗略的第一近似,以查看对象是否可能发生碰撞。然后,如果AABB检查通过,则进行更详细的检查。
例子:
想象一下您的世界是2D的,并将其绘制在一张图纸上。 你有一些物体(球、树等)。 为了为一个物体创建AABB,您在物体周围画一个矩形,使您的线与纸上的网格线平行。
如果您拥有两个物体的AABB,则可以做一些非常简单的数学运算来确定这些AABB是否重叠。 如果它们不重叠,则这两个物体不可能接触,因此这是您的碰撞算法的易于处理的提前退出。
这个概念也很容易推广到3D(和更多的D)中。
您可能还想查看gamedev.stackexchange.com。
轴对齐边界框
基本上是可以完全包含形状的最小轴对齐长方体。通常由一对3D坐标定义。
检查两个AABB之间的碰撞非常快速,只需要检查角落的X、Y和Z值的范围,因此它被用作快速的第一步来削减可能的碰撞数量,此后可以使用更复杂但计算密集的方式。