c++ - bullet 3d 中的滚动摩擦表现不像演示

标签 c++ physics game-physics bullet bulletphysics

情况

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

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

如果我将表面的滚动摩擦力设置为零(无关紧要),那么它会产生逼真的滚动行为,直到球即将静止。然后它以某种方式获得了这种恒定的、缓慢的速度并像僵尸一样绕着 table 滚动。此外,球有时会在任何接触之前开始滚动。

注意事项

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

问题

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

否则,当我只在球体上设置滚动摩擦力时,知道是什么阻止了球停止吗?

想法

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

最佳答案

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

其次,如果您使用半径为 0.01 的球,该球由大理石等较重的固体 Material 制成,则质量应约为 2.85 ( http://www.convert-me.com/en/convert/weight2volume/ )

关于c++ - bullet 3d 中的滚动摩擦表现不像演示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21806408/

相关文章:

java - 如何模拟单摆的空气阻力?

math - 由于重力问题,利用时间来提高速度(无法获得完美的弹性)

java - libgdx 中两个边界框之间的碰撞检测

video - 如何同步物理模型、音频、游戏渲染、帧显示和输入

c++ - 在我的代码中出现这个 "10038 wsa socket"错误

c++ - 不调用自定义分配器方法

c++ - C++ 中 Main 参数的 Const-Qualification

c# - 如何将 native 窗口处理程序 (HWND) 嵌入到 C# WPF 应用程序中

math - 实时计算碰撞——处理时间延迟

algorithm - 舍入多边形