我正在编写一个使用Verlet积分的物理引擎,但是有些约束条件无法正常工作。有些(例如键合/焊接约束)过于“松散”,不够坚硬,而其他一些(例如区域约束)则过于弹性,会使原子飞出去。我的物理模拟器中更新方法的代码如下:
ProcessRemovedItems();
ProcessAddedItems();
_colliderManager.Update(timestepSize);
foreach (Atom atom in _atomList)
{
atom.Update(timestepSize);
}
for (int i = 0; i < _iterations; i++)
{
foreach (IConstraint constraint in _constraintList)
{
constraint.Update();
}
}
我尝试了所有不同的更新顺序,但都没有帮助。我有一个模糊的想法,关于使用迭代,但不知道还有什么其他方法可以帮助。有任何建议吗?