我使用Bullet进行物理模拟并且不关心实时模拟 - 如果一分钟的模型时间实时持续两小时,那就没问题了。我试图在模型时间内每隔一段时间调用一次回调,但意识到我不了解StepSimulation的工作原理。
StepSimulation()documentation并不清楚。如果有人解释了它的参数是什么,我将非常感激。
为什么会这样?为什么每个人都使用自上次模拟以来为此参数传递的时间?如果我们修改这个参数会发生什么 - 比如0.1?
内部步骤究竟是什么?为什么它的大小与分辨率成反比?它基本上是反频率吗?
P.S。我有点重复the question which already exists,但答案并没有澄清我想知道的内容。
答案 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/