我目前正在调试和改进我的大部分完整的物理引擎。我意识到,为了游戏的目的,现有的引擎通常是要走的路,但是编程任何类型的实用引擎的经验和自我满足让我欣喜若狂。到目前为止,我已经设法构建了一个支持旋转和摩擦的圆形和矩形的2D引擎。它在低应力环境下可与大多数2D物理引擎相媲美,但在高应力下的接缝处很快就会崩溃。例如,当矩形的折叠塔撞击时,多个部件现在彼此直接相互作用,其间具有非常高的力。我的引擎会尝试在对象对中逐个分离每个碰撞,但有时,当引擎将一对物体推离彼此时,它最终会将一个或两个物体推入其他物体,从而加剧了问题。就像那样,当引擎在头部经历这样的事情时,物体会被推开并振动:
通常情况下,此过程可以在一次迭代中多次发生,因此在解决一对碰撞时,引擎有时会在另一对中“撤消”其分辨率。我曾尝试在网上搜索物理引擎教程和信息,但所有这些都不包括我已经拥有和运行的东西。有人提到将碰撞解决为一系列事件,但从未详细阐述过。有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
您的问题可能在于如何应用碰撞解决方案。我怀疑你正在采取以下措施:
ResolveCollision(ObjA, ObjB)
{
//calculate necessary velocity/force for separation.
ObjA.SetVelocity(newVel);
ObjB.SetVelocity(-newVel);
}
这里的问题是,在你的例子中,第2阶段将覆盖第1阶段的新速度。不好。你想要的是将你的新速度加到现有速度上。
理想情况下,我们很高兴看到一些代码,但这是我最初的怀疑。