0

所以我一直在研究支持多边形和圆形的 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

错误是在开始附近看到的弹簧效应。我一直在绞尽脑汁想这个问题,但我一无所获。谁能告诉我问题是什么?

4

1 回答 1

0

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

  1. 我认为你应该重新考虑你的基本碰撞物理。真正的碰撞不会那样工作。
  2. 考虑使时间步长更小。毕竟,真实的物体是有弹性的,但“刚性”物体的振动太快,我们无法看到;橡胶状的积木堆看起来像一堆慢动作的刚性物体,所以如果你加快它们的速度,它们看起来会更僵硬。大范围的运动已经是正确的。
  3. 如果您希望对象是不可穿透的,则必须为此实施特殊规则。我不知道墙壁是否坚不可摧,但这将是一个很好的起点。
于 2012-03-25T14:43:33.207 回答