具有可移动和可旋转角色/物体/等的游戏中的 AABB

2024-02-09

我正在创建我的第一个 3D 游戏,但遇到了一些问题。

我读到AABB https://en.wikipedia.org/wiki/Minimum_bounding_box#Axis-aligned_minimum_bounding_box相交以及从中构建树木的想法,但我无法理解的一件事是,如果我的“角色”在游戏过程中旋转,则轴对齐的概念不会保留!

我检查了几个库(例如 oz-collide、OPCODE 等),并且我发现这些实现是针对静态对象进行的,因为它使用没有原点的框(对于非静态,所有节点树中的内容应在每次移动后更新)。

那些图书馆应该是超级快,我可能在某个地方弄错了。

解释是什么?


不幸的是,如果你的角色旋转,你需要重新计算你的 AABB,而且它也不一定是合适的。如果你有一个矩形并旋转它,使其不再是直线,则 AABB 将比该对象大。

AABB 速度很快,因为相交测试非常简单,但正如您已经发现的那样,当需要对未与 AABB 轴对齐的对象进行精确相交时,就会出现问题。

AABB 对于快速测试仍然有用,我怀疑这些树就是为此而生的。使用 AABB 树,您可以从更准确的测试阶段快速消除大片对象。如果查询返回几个额外的对象,那并不重要。在您旋转的角色情况下,这可能意味着您的角色被视为位于某个区域,而他/她实际上并不在该区域中。

AABB 树很容易做到这一点,因为每次通过测试时,您都会更深入地了解树并了解更多细节。

当您需要真正精确的交叉点时,可以使用定向边界框 (OBB)。它可以通过以下方式实现分离轴定理 http://en.wikipedia.org/wiki/Separating_axis_theorem。我看到 oz-collide 已经支持 OBB 了。

OBB 上有很多资源,这个对我有帮助:GPWiki 关于分离轴定理 http://gpwiki.org/index.php/Physics:2D_Physics_Engine%3aIntersection_Detection#Separating_Axis_Theorem_for_Axis_Aligned_Rectangles

这是一个执行 http://www.3dkingdoms.com/weekly/weekly.php?a=21.

如果需要,您可以根据 OBB 计算 AABB。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有可移动和可旋转角色/物体/等的游戏中的 AABB 的相关文章

随机推荐