物理引擎春虫

时间:2012-03-24 06:29:59

标签: physics-engine

所以我一直致力于支持多边形和圆形的2d物理引擎。我已经使用了除圆圈之外的所有碰撞组合的分离轴定理。以下是引擎的基本格式:

*注意:不是实际代码

推进所有身体。

for every body a
{
   Vector2 sum = Vector2.Zero;
   for every body b where b != a
   {
     sum += a.collides(b).MinimumTranslationVector;
   }
   a.Position += sum;
   a.velocity += sum;
}

以下是我遇到的问题的视频:http://www.youtube.com/watch?v=kSZeuP4AiQ0&feature=youtu.be

错误是在开头附近看到的弹簧效果。我一直绞尽脑汁试图想出这个问题而且我什么都没想出来。谁能告诉我这是什么问题?

1 个答案:

答案 0 :(得分:0)

如果我正确地读取这个伪代码,每当两个物体发生碰撞时,每个物体都会发生位置和速度的变化。然而,当一个落下的盒子撞到一个休息盒时,你希望静止盒子保持静止。

  1. 我认为你应该重新考虑你的基本碰撞物理学。真正的碰撞并不像那样。
  2. 考虑缩短时间步长。毕竟,真实物体弹性的,但“刚性”物体振动得太快,我们无法看到;橡胶堆积的块看起来像是一堆慢动作的刚性物体,所以如果加速它们,它们看起来会更加僵硬。大规模的动作已经是正确的。
  3. 如果您希望对象不可穿透,则必须实现特殊规则。我不知道墙是否难以穿透,但这将是一个很好的起点。