gpt4 book ai didi

c# - 物理引擎的计算顺序和迭代

转载 作者:行者123 更新时间:2023-11-30 16:35:40 25 4
gpt4 key购买 nike

我正在编写一个使用 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();
}
}

我已经尝试了更新命令的所有不同组合,但没有任何帮助。我对使用迭代有一个模糊的想法,但不知道还有什么可以帮助。有什么建议吗?

最佳答案

您对迭代的假设是正确的。

通过在一个框架中多次运行 verlet 积分器部分,模拟效果越强越好。

这是由于以下原因:假设你有 5 个原子彼此相邻,当最后一个原子整合时,它会移动一点。不幸的是,它被移到了它旁边的原子上。它需要一个完整的框架,然后再次进行集成并且这是固定的(由于限制)。然而,很有可能,原子再次被放置在其他原子中。

因此,为了抵消这种影响,您进行的迭代次数越多(因此每帧调用积分器的次数越多),模拟效果越好并符合您的约束条件,

但是,您会注意到每帧运行积分器的次数越多,它使用的处理器能力就越多。所以你必须手动找到一个最佳位置

关于c# - 物理引擎的计算顺序和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1600176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com