【问题标题】:stepSimulation parameters in Bullet PhysicsBullet Physics 中的 stepSimulation 参数
【发布时间】:2014-04-03 00:03:01
【问题描述】:

我使用 Bullet 进行物理模拟,并不关心实时模拟 - 如果一分钟的模型时间实时持续两个小时,那没关系。我试图在模型时间内每隔固定时间调用一次回调,但意识到我不明白 StepSimulation 是如何工作的。

StepSimulation() 的documentation 不是很清楚。如果有人解释其参数的用途,我将不胜感激。

  • timeStep 只是模拟步进的时间量。通常,您将通过它自上次调用它以来的时间。

为什么会这样?为什么每个人都使用自上次模拟以来经过的时间作为这个参数?如果我们固定这个参数会发生什么——比如 0.1?

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

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

附:我有些重复the question which already exists,但答案并没有说明我想知道什么。

【问题讨论】:

标签: bulletphysics


【解决方案1】:

为什么会这样?为什么每个人都使用自上次模拟以来经过的时间作为这个参数?如果我们将这个参数设为固定——比如 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/

【讨论】:

  • 非常感谢。因此,如果我实际上并不关心速度,我最好采用 maxSubSteps = 1, timeStep = fixedTimeStep - 并通过更改 timeStep 来更改分辨率,对吗?在不同的帧率下速度会有所不同,但行为会完全确定,对吧?
  • 好吧,只要你使用固定的时间步长,行为就完全确定了。
  • 那么此设置是否允许您实现动态“时间扭曲”(时间压缩)模式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多