【问题标题】:What is AABB - Collision detection?什么是 AABB - 碰撞检测?
【发布时间】:2014-04-26 01:53:55
【问题描述】:

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

【问题讨论】:

    标签: collision-detection aabb


    【解决方案1】:

    AABB 代表“Axis-Aligned Bounding Box”。

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

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

    示例:

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

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

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

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

    【讨论】:

    • 另外,由于体素游戏主要是立方体,我不认为它是轴对齐的,但如果我正在制作一个 rpg 并且我希望我的人看起来很逼真,应该撞到墙壁距离很远......
    • @FeatheredOrcian:是的,如果您的体素已经轴对齐,那么 AABB 就很棒。您甚至可能不需要单独存储它们,但可以从您的体素数据中获取它们的数据。
    【解决方案2】:

    轴对齐边界框

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

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

    【讨论】:

    • 这是怎么回事? 定向边界框不应该是可以包含该形状的最小长方体吗?轴对齐边界框是与全局轴对齐可以完全包含形状的最小长方体。
    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多