什么是“一步”意味着stepSimulation和什么它的参数在子弹物理是什么意思?(What do

2019-09-23 16:54发布

是什么在Bullet物理术语“STEP”意味着什么?

什么是功能stepSimulation()和它的参数是什么意思?

我已阅读文档 ,但我不能弄个什么。

任何有效的解释是有很大的帮助。

Answer 1:

btDynamicsWorld::stepSimulation(
   btScalar timeStep,
   int maxSubSteps=1,
   btScalar fixedTimeStep=btScalar(1.)/btScalar(60.));

timeStep -去年仿真后通过。

内部模拟了一些内部固定步骤完成。 fixedTimeStep

fixedTimeStep ~~~ 0.01666666 = 1/60

如果timeStep为0.1,然后,将包括图6( timeStep / fixedTimeStep )内部的模拟。

为了使滑翔机运动BulletPhysics插值根据分割后提醒最后步骤的结果( timeStep / fixedTimeStep



Answer 2:

我知道我迟到了,但我想接受的答案只比文件的描述稍微好一些。

timeStep :秒,不毫秒的量,因为到最后调用传递stepSimulation

maxSubSteps :一般应保持在一个如此子弹插在它自己的当前值。 值为零意味着可变节拍率,这意味着子弹恰好前进模拟timeStep秒,而不是内插。 此功能是越野车,不推荐。 大于一个必须满足的方程的数值timeStep < maxSubSteps * fixedTimeStep或者你失去的时间的模拟。

fixedTimeStep :成反比例模拟的分辨率。 分辨率随着该值减小。 请记住,更高的分辨率意味着需要更多的CPU。



Answer 3:

  • timeStep -的时间,以秒通过到步骤模拟量。 通常,你会路过它的时候,因为你最后的说法。

  • maxSubSteps -那子弹是允许在每次调用时采取的步骤的最大数量。

  • fixedTimeStep -调节模拟的分辨率 。 如果你的球穿透你的墙,而不是与他们碰撞尽量减少它。


在这里,我想解决这个问题的代理公司对价值的特殊含义答案1maxSubSteps 。 只有一个特殊的值,也就是0和你最有可能不想使用它,因为那么模拟将非恒定的时间步走。 所有其他值都相同。 让我们来看看实际的代码 :

if (maxSubSteps)
{
    m_localTime += timeStep;
    ...
    if (m_localTime >= fixedTimeStep)
    {
        numSimulationSubSteps = int(m_localTime / fixedTimeStep);
        m_localTime -= numSimulationSubSteps * fixedTimeStep;
    }
}
...
if (numSimulationSubSteps)
{
    //clamp the number of substeps, to prevent simulation grinding spiralling down to a halt
    int clampedSimulationSteps = (numSimulationSubSteps > maxSubSteps) ? maxSubSteps : numSimulationSubSteps;
    ...
    for (int i = 0; i < clampedSimulationSteps; i++)
    {
        internalSingleStepSimulation(fixedTimeStep);
        synchronizeMotionStates();
    }
}

所以,没有什么特别之处maxSubSteps等于1 。 你真的应该遵循这个公式timeStep < maxSubSteps * fixedTimeStep如果你不想浪费时间。



文章来源: What does “step” mean in stepSimulation and what do its parameters mean in Bullet Physics?