Box2D碰撞影响计算

5
我正在使用标准的Box2D来监听碰撞事件。我想要计算Body之间碰撞的强度。关于如何计算强度,我看到有很多不同的描述。一些人使用preSolve回调,另一些人使用postSolve。有些人使用Manifold,而其他人则使用ContactImpulse。一些人只考虑第一个点的normalImpulse+tangentImpulse,另一些人则考虑所有点的总和,而另一些人则仅考虑最大值。有些人完全忽略tangentImpulses...
我无法理解这个问题。有时候我只在postSolve中得到impulses,在preSolve中得到的impulses总和为0。有时候情况恰恰相反。有时候我得到的值极高(比如1E15到1E30),有时候它们极低(比如-1E15到-1E30)。我甚至遇到了一个impulse是NaN(不是数字)的情况。
有没有人能够向我解释如何解决这个问题,并可能解释如何解释这些impulses?或者指向任何需要使用Box2D并且也需要计算任何类型伤害系统的开源游戏?
2个回答

6

在任何人告诉您应该如何计算之前,我认为您需要定义“影响强度”的定义。正如您所说,有许多方法可以解决这个问题。

以下是我可能会提到的一些提示:

  • 只有postSolve才有应用的脉冲的有效值
  • 每个碰撞可能会发生许多preSolve / postSolve调用
  • 法线冲量指向从A体到B体
  • 可能只有一个脉冲(第二个点的NaN是我猜测的吗?)

此页面提供了更多详细信息:http://www.iforce2d.net/b2dtut/collision-anatomy

通常只需查看接触开始后的第一个postSolve中的冲量值,因为那通常是最大的,并表示初始打击。

另一种方法可能是在过去的0.5秒内跟踪总脉冲值,并且如果超过某个阈值,则对象应该断裂。这将使您处理两个对象已经接触,并且第三个对象击中它们的情况(例如,如果两个对象堆叠在一起,并从上方放下第三个对象,则常识告诉我们那个底部的对象不应逃脱受损害,只是因为它没有直接接触)。


1
"有时我会得到非常高的值(如1E15到1E30),有时它们会非常低(如-1E15到-1E30)。
根据方向不同,力将是正数或负数。对于极为刚性的物体,在即使是中等速度下的碰撞中,可能会产生极高的力/加速度(在绝对值上)。例如,想象两个由钢制成的球以200公里/小时的速度相撞。"

-1E15到-1E30是低的,与1E-15到1E-30相比并不小。我也有非常小的值,但它们可能确实是有效的。我正在研究动态体和静态体之间的碰撞。这可能是奇怪数字的原因吗? - noone
根据方向,该数字可以是正数或负数。 - Tarik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接