扩展物理世界

时间:2016-10-29 14:05:18

标签: box2d game-physics chipmunk

我目前正在开发一个2D物理抽象层,它可以使用Box2D或Chipmunk2D作为物理引擎。我最初使用Chipmunk2D,现在正在实施Box2D。我遇到的一个问题是Box2D的最大速度(由b2_maxTranslation定义)。为了解决这个问题,我决定扩展世界,以便更好地适应Box2D单元。

目前我正在缩减一个恒定的因素:

  • 位置(包括多边形夹具定义和圆半径)
  • force(在调用b2Body :: ApplyForce之前)
  • 冲动(在致电b2Body :: ApplyLinearImpulse之前)

由于我使用密度来定义灯具,这也可以缩小体重。

我注意到的是,这不起作用。每当我施加力时,身体移动的速度比比例高时要快得多。

我是否需要扩展以使身体正确更新或者我应该以其他方式扩展脉冲和力量?

2 个答案:

答案 0 :(得分:0)

我不会扩展世界以避免达到b2_maxTranslation设置。我会将所有物理单位标准化为MKS单位,并提高b2_maxTranslation设置或提高阶跃函数的频率。

例如,如果我想将最大速度加倍,我要将编译的b2_maxTranslation值加倍(从2.0f4.0f),否则我会跑两次尽可能多的步骤方法,每个模拟一半的时间,否则我会模拟它。随着所有单位标准化为MKS,Box2D将直接采用这些单位,我猜Chipmunk也是。

对于没有使用按比例缩放为MKS单位的值的引擎,我会将值从MKS缩放到该引擎的单位。

希望这有帮助。

答案 1 :(得分:0)

给定一个缩放几何体的刻度X,我最终做了以下操作(我没有费心缩放阻尼效果):

Velocity(SetLinearVelocity) - 线性

强制(ApplyForce) - 立方

位置(任何夹具def CreateFixture) - 线性

Mass(GetMass) - Square

重力(SetGravity) - 线性

脉冲解析(PostSolve WorldManifold.normal) - 立方反转

其中

  • 线性= X *设计因子
  • square = X * X *设计因子
  • cubic = X * X * X *设计因子

我用这些因素做了几次测试,他们似乎在保持角速度和线性运动方面做得很好(我确实尝试了其他几个失败的人)。请参阅https://bitbucket.org/Kipt88/polymorph/src/b4d29e2434a2ed1eda2183f9e16f4782c40ee026/modules/physics2d/files/source/box2d/?at=master以获取参考(不再维护源代码)。