【问题标题】:rollingfriction in bullet 3d not behaving like demoBullet 3d 中的滚动摩擦不像演示那样表现
【发布时间】:2014-02-16 02:12:29
【问题描述】:

情况

我正在制作一个台球模拟器,并有一个静态 btBox 代表桌面,其中 btSphere 为球。在演示中,地面(桌面)和 btSphere 的滚动摩擦力分别为正值 1.0 和 0.3。演示节目是球体自然滚动并最终停止。

当我在模拟中使用这些值时,球体永远无法保持角速度,只会在桌子上“滑动”——无论我在表面/球体中设置什么值滚动摩擦。

如果我将表面的滚动摩擦力设置为零(不管哪个),那么它会产生逼真的滚动行为,直到球即将停止。然后它以某种方式获得了这种恒定的缓慢速度,并像僵尸一样在桌子周围滚动。此外,球有时会在任何接触之前开始滚动。

注意事项

我尝试了多种摩擦/阻尼组合,但无法重现演示的行为或解决我提到的问题。我能想到的设置中唯一重要的区别是我的要小得多。解释为什么它们这么小并不简单,但我的 BALL_RADIUS = 0.0103 和 BALL_MASS = 0.12393。

问题

知道为什么当我在表面和球体上都有滚动摩擦时我的球没有旋转吗?

否则,当我只在球体上设置滚动摩擦时,有什么想法可以阻止球停止?

想法

docs/demo/code/web 在记录滚动摩擦方面做得不是很好。要么那个,要么我在做一些非常奇怪的事情......请帮忙!

【问题讨论】:

  • 检查您是否正确地将旋转从 btMotionState 转换到您的图形 - 问题可能不是子弹。

标签: c++ physics game-physics bullet bulletphysics


【解决方案1】:

我认为问题出在您的单位上,但可能还有其他问题。首先,Bullet 在使用 0.05 到 10 之间的单位时效果最佳 (http://www.bulletphysics.org/mediawiki-1.5.8/index.php/Scaling_The_World)

其次,如果你使用一个半径为 0.01 的球,它由像大理石这样的重型固体材料制成,质量应该在 2.85 左右(http://www.convert-me.com/en/convert/weight2volume/

【讨论】:

  • 是的,我同意,错误的单位似乎合乎逻辑,并且实际上是我拥有的设置与演示所做的唯一区别。但是,我尝试使用您建议的值,但行为没有任何变化。真正的错误一定是一些我没有看到的细节的副作用,即使我已经倾注了代码。我有一个看起来相当现实的hack,所以它不是完全的损失,但如果我弄清楚出了什么问题,我一定会在这里解释。
猜你喜欢
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2021-01-25
相关资源
最近更新 更多