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

时间:2010-11-05 00:21:48

标签: collision-detection aabb

那天我正在制作我的第一部3D游戏,我遇到了几个问题。

我读到了关于AABB交叉和从中构建树木的想法,但是 我无法理解的一件事是,如果我的“角色”在游戏中旋转,则不会保留轴对齐的概念!

我已经检查了几个库(比如oz-collide,OPCODE等),我已经看到实现是针对静态对象的,因为它使用的是没有原点的框(对于非静态的,每次移动后都应该更新树中的所有节点。)

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

有人可以帮我解释一下这个话题吗?

2 个答案:

答案 0 :(得分:2)

可悲的是,如果你的角色旋转你需要重新计算你的AABB,它也不一定是舒适的。如果您有一个矩形并旋转它,那么它不再重复,AABB将比对象大。

AABB速度很快,因为相交测试非常简单,但正如您已经发现,当未与AABB轴对齐的物体需要精确的交点时,它会成为问题。

AABB仍然可用于快速测试,我怀疑这些树是为了制作的。使用AABB树,您可以从更准确的测试阶段快速消除大量对象。如果查询返回了几个额外的对象,则无关紧要。在你的旋转角色的情况下,这可能意味着你的角色被认为是在他/她真的没有的区域。

AABB树很容易实现这一目标,因为每次通过测试时,您都会深入到树中并进入更多细节。

当您需要非常精确的交叉点时,可以使用定向边界框(OBB)。它可以使用separating axis theorem实现。我看到oz-collide已经支持OBB了。

OBB上有很多资源,这个帮助了我: GPWiki on separating axis theorem

这是一个implementation

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

答案 1 :(得分:1)

OZCollide适用于可移动实体,并且与时间无关(您只需要提供速度矢量)。 它也适用于OBB(不仅仅是AABB)。

查看在线文档: http://www.tsarevitch.org/ozcollide/docs/ 链接已损坏的