是什么在Bullet物理术语“STEP”意味着什么?
什么是功能stepSimulation()
和它的参数是什么意思?
我已阅读文档 ,但我不能弄个什么。
任何有效的解释是有很大的帮助。
是什么在Bullet物理术语“STEP”意味着什么?
什么是功能stepSimulation()
和它的参数是什么意思?
我已阅读文档 ,但我不能弄个什么。
任何有效的解释是有很大的帮助。
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
)
我知道我迟到了,但我想接受的答案只比文件的描述稍微好一些。
timeStep
:秒,不毫秒的量,因为到最后调用传递stepSimulation
。
maxSubSteps
:一般应保持在一个如此子弹插在它自己的当前值。 值为零意味着可变节拍率,这意味着子弹恰好前进模拟timeStep
秒,而不是内插。 此功能是越野车,不推荐。 大于一个必须满足的方程的数值timeStep < maxSubSteps * fixedTimeStep
或者你失去的时间的模拟。
fixedTimeStep
:成反比例模拟的分辨率。 分辨率随着该值减小。 请记住,更高的分辨率意味着需要更多的CPU。
timeStep
-的时间,以秒通过到步骤模拟量。 通常,你会路过它的时候,因为你最后的说法。
maxSubSteps
-那子弹是允许在每次调用时采取的步骤的最大数量。
fixedTimeStep
-调节模拟的分辨率 。 如果你的球穿透你的墙,而不是与他们碰撞尽量减少它。
在这里,我想解决这个问题的代理公司对价值的特殊含义答案1
的maxSubSteps
。 只有一个特殊的值,也就是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
如果你不想浪费时间。