Box2d身体进入另一个身体

时间:2016-01-24 20:08:37

标签: box2d

我正在尝试理解Box2D并且我创建了两个实体(地面和动态体浮动)。当受到重力影响的动态体与地体发生碰撞时,它似乎就在地体内部。

这是正确的行为吗?或者我的图形渲染器中有错误?

inside

1 个答案:

答案 0 :(得分:2)

这可能是"正确"行为与否。

它是否正确取决于似乎没有提供的细节以及我们定义为"正确的"。详细说明正在使用的迭代次数或显示的形状的Box2D术语中的大小和密度。而我们的正确定义是基于Box2D记录的行为还是固体的预期物理行为。为了这个答案,我将使用前一个定义。

b2World::Step方法可解决重叠问题。它的位置分辨率将对身体施加冲动,使它们朝向身体内的目标穿透深度。 。这个皮肤距离顶点半径。对于多边形形状,此径向值为b2_polygonRadius

如果形状'绘制皮肤周长,然后当放大足够时,我们会看到形状彼此重叠一半的皮肤半径。这就是Box2D如何实现,至少通过该标准,一些重叠是正确的。另一方面,如果形状'绘制顶点和边,然后在放大时,形状将显示为彼此浮动。

我们可以看到,当上圆的大小或密度明显大于下圆的大小时,这些行为就会崩溃。

修改 Testbed " Heavy On Light"测试代码,以便较大的圆的半径为50.0(而不是5.0),而较小的圆的半径为0.5,表示下圆完全重叠,如下图所示: Image of larger circle completely within smaller circle 同时将较大圆的密度从10.0增加到1000.0(而不是将其半径增加到5.0以上)同样也显示重叠: Image of denser circle completely within smaller less-dense circle

Box2D文档说的是:

  

特别是,Box2D已经过调整,可以在0.1到10米之间移动形状。所以这意味着汤罐和公共汽车之间的物体应该很好。静态形状可长达50米而不会出现问题。

并且喜欢:

  

Box2D的建议迭代计数为8表示速度,3表示位置。您可以根据自己的喜好调整此数字,请记住,这需要在性能和准确性之间进行权衡。使用较少的迭代可提高性能,但精度会受到影响。同样,使用更多迭代会降低性能,但会提高模拟质量。

因此,根据Box2D文档,在某些设置组合中可能会出现这种行为,因此您的示例图片可能被认为是正确的。正如Netero所建议的那样,你可以尝试增加位置迭代次数,看看这是否有所改善。等待b2World::Step更长时间等待更长时间也可以减少重叠。或者改变它们的尺寸/密度。

至于你的渲染器中是否有错误,这也是可能的。答案再次取决于不提供的细节。详细信息就像执行渲染的代码的源代码一样。例如,如果我们看到的是渲染矩形轮廓线的结果,那么您需要将其更改为在顶点之间渲染像素宽线或仅渲染顶点定义的实心内部。