首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是AABB?所需解释

什么是AABB?所需解释
EN

Stack Overflow用户
提问于 2013-09-08 22:54:02
回答 2查看 773关注 0票数 1

什么是AABB?一个预览的国王-碰撞之前,真正的碰撞检测(我是说,准确的一个)?

我显示了调试形状并设置了b2DebugDraw.e_aabbBit标志,以便查看它的运行情况。我放了一个简单的盒子掉下来,当箱子落在地上时,AABB的框架完全不同了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-04 18:47:49

我想另一个被告已经谈过什么是AABB了。这一反应增加了他们的回答,解释了为什么你画的AABB可能更大,形状也不同。

这里显示的AABB看起来像,一个AABB计算出来的方块已经被扔到了绿色的表面上。这至少可以解释为什么AABB更大,为什么AABB不是相同的形状。

这就是为什么。

虽然AABB可以作为任何形状的最小包围轴对齐包围盒,Box2D也使用AABB,它包含一些运动和一些额外的摆动空间为未来的运动。

void b2Fixture::CreateProxies(b2BroadPhase* broadPhase, const b2Transform& xf)为例。这里,Box2D使用形状的ComputeAABB方法计算AABBs,它基本上只是计算最小的外壳。当第一次创建新的夹具时,每个“子”形状都会调用此方法(其中任何形状都可以由一个或多个称为“子”形状的子形状组成)。

OTOH,看看void b2Fixture::Synchronize(b2BroadPhase* broadPhase, const b2Transform& transform1, const b2Transform& transform2)。该方法是从调用world方法调用的,该方法为可能移动的所有实体调用它。在计算AABB时,它:

  1. 计算一个AABB来计算每个孩子的形状,
  2. 计算AABB,用于每个儿童形状都已到达的位置(在该步骤中),
  3. 将每个子形状的两个AABB组合到“代理”AABB(请参阅void b2AABB::Combine(const b2AABB& aabb1, const b2AABB& aabb2))中。
  4. 调用broadPhase->MoveProxy(proxy->proxyId, proxy->aabb, displacement),为每个AABB增加了一些预测空间。

因此,为什么AABB画的可能更大,形状也不同:第3步通常会导致AABB放大,以保持整个子形状的大部分扫描,而第4步则导致AABB由b2_aabbExtension向四面八方进一步扩展,并在旅行方向上进一步扩展(通过b2_aabbMultiplier * displacement)。

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2013-09-08 23:14:47

嗯,轴线对齐包围盒是一个.简单的盒子:)你没有给我任何关于你的项目的基本知识。总之,包围盒只是一个数学盒,它可以描述任何三维的物理物体。

只要试着用许多盒子包裹你的身体,你就会发现它足以涵盖所有的物理问题。由于它的简单性,它在游戏中大量使用。您可能会在球体模型上做同样的事情,但是对于更复杂的形状,您会得到更复杂的数学,然后您会得到更多的重载,这对当前CPU (包括gpu)来说太大了。

但总的来说,没有什么好解释的,因为你不需要数学。它是一个简单的盒子,用于比较与另一个AABB的碰撞,包括三角形“法线”和“矩阵”转换的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18689451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档