Bullet Physics中的stepSimulation参数

时间:2014-04-03 00:03:02

标签: bulletphysics

我使用Bullet进行物理模拟并且不关心实时模拟 - 如果一分钟的模型时间实时持续两小时,那就没问题了。我试图在模型时间内每隔一段时间调用一次回调,但意识到我不了解StepSimulation的工作原理。

StepSimulation()documentation并不清楚。如果有人解释了它的参数是什么,我将非常感激。

  • timeStep只是步骤模拟的时间量。通常情况下,自上次调用它以来,您将自动传递它。

为什么会这样?为什么每个人都使用自上次模拟以来为此参数传递的时间?如果我们修改这个参数会发生什么 - 比如0.1?

  • 第三个​​参数是该内部步骤的大小。第二个参数是每次调用时允许Bullet执行的最大步骤数。 timeStep< timeStep< maxSubSteps * fixedTimeStep ,否则你会浪费时间。

内部步骤究竟是什么?为什么它的大小与分辨率成反比?它基本上是反频率吗?

P.S。我有点重复the question which already exists,但答案并没有澄清我想知道的内容。

1 个答案:

答案 0 :(得分:2)

  

为什么会这样?为什么每个人都使用自上次模拟以来为此参数传递的时间?如果我们修改这个参数会发生什么 - 比如0.1?

之所以如此,是因为物理需要知道已经过了多少时间,或者它会跑得太快或太慢而且对用户来说都是错误的。

您绝对可以修复应用程序的参数。

例如

stepSimulation(btScalar(1.)/btScalar(60.), btScalar(1.)/btScalar(60.));

将以1/60秒的速度开启您的物理世界。在游戏中,这将导致它运行得更快/更慢,这取决于实际帧速率与我们经过的1/60秒的距离。

  

内部步骤究竟是什么?为什么它的大小与分辨率成反比?它基本上是反频率吗?

这是子弹一次模拟的持续时间。例如,如果你从最后一步开始经过了1/60和1/6秒,那么子弹将执行10个内部步骤而不是一个大的1/6步骤。这样它将产生相同的结果。不同的时间步长不会。

这是一篇很棒的文章,说明为什么你需要一个固定的物理时间步,以及当你不做时会发生什么:http://gafferongames.com/game-physics/fix-your-timestep/