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