2015-10-17 34 views
0

我目前正在调试和改进我大部分完整的物理引擎。我意识到,为了一款游戏的目的,现有的引擎通常都是可行的,但是编写任何类型实用引擎的经验和自我满足让我至少可以说是欣喜若狂。到目前为止,我已经设法构建了一个2D引擎,支持具有旋转和摩擦的圆形和矩形。它在低应力情况下与大多数2D物理引擎相当,但在高应力下在接缝处迅速分解。例如,当一个长方形倒塌塔倒塌时,现在多个部件之间直接相互作用,其间具有很高的力量。我的引擎会尝试将对象中的每个碰撞逐个分开,但有时候,当引擎将一对物体彼此推开时,它会将一个或两个物体推入其他物体,从而加剧问题。就这样,对象会得到摆布和振动的发动机经过在它的头是这样的:关于线性投影的自制物理引擎问题

  1. 哎呀,物体A被挖成对象B.将两个B,距离成目标C.
  2. 糟糕,对象B现在挖掘到对象C移动b远并进入对象A.
  3. 重复1.

很多时候,此方法可以在单次迭代中出现多次,以便解决当碰撞对于一对,引擎有时会在另一对“撤销”其分辨率。我曾尝试在网络上搜索物理引擎教程和信息,但所有这些都几乎涵盖了我已经掌握和运行的东西。有人提到解决碰撞是一系列事件,但从未详细阐述过。有什么方法可以解决这个问题吗?

回答

0

你的问题可能在于你如何应用你的碰撞解决方案。我怀疑你正在做的线沿线的东西:这里

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

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

问题是,在你的榜样,第二阶段将覆盖从第1阶段不擅长的新速度。你想要的是将你的新速度添加到现有的速度。

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