关于线性投影的自制物理引擎问题

时间:2015-10-17 22:28:06

标签: game-physics

我目前正在调试和改进我的大部分完整的物理引擎。我意识到,为了游戏的目的,现有的引擎通常是要走的路,但是编程任何类型的实用引擎的经验和自我满足让我欣喜若狂。到目前为止,我已经设法构建了一个支持旋转和摩擦的圆形和矩形的2D引擎。它在低应力环境下​​可与大多数2D物理引擎相媲美,但在高应力下的接缝处很快就会崩溃。例如,当矩形的折叠塔撞击时,多个部件现在彼此直接相互作用,其间具有非常高的力。我的引擎会尝试在对象对中逐个分离每个碰撞,但有时,当引擎将一对物体推离彼此时,它最终会将一个或两个物体推入其他物体,从而加剧了问题。就像那样,当引擎在头部经历这样的事情时,物体会被推开并振动:

  1. 哎呀,对象A正在挖掘对象B.将两个B移开并移动到对象C中。
  2. 哎呀,物体B现在正在挖掘物体C.将B移开并进入物体A.
  3. 重复1次。
  4. 通常情况下,此过程可以在一次迭代中多次发生,因此在解决一对碰撞时,引擎有时会在另一对中“撤消”其分辨率。我曾尝试在网上搜索物理引擎教程和信息,但所有这些都不包括我已经拥有和运行的东西。有人提到将碰撞解决为一系列事件,但从未详细阐述过。有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您的问题可能在于如何应用碰撞解决方案。我怀疑你正在采取以下措施:

ResolveCollision(ObjA, ObjB)
{
    //calculate necessary velocity/force for separation.

    ObjA.SetVelocity(newVel);
    ObjB.SetVelocity(-newVel);
}

这里的问题是,在你的例子中,第2阶段将覆盖第1阶段的新速度。不好。你想要的是将你的新速度加到现有速度上。

理想情况下,我们很高兴看到一些代码,但这是我最初的怀疑。