0

我有一个相当简单的react-three-fiber设置,其中包括cannon.js 驱动的物理。在场景中有一个杯子——它被建模为一个顶部半径大于底部半径的圆柱体——它被放置在一个表面上。

当我运行代码时,在加载屏幕期间一切看起来都很好。但是当物理学开始时,杯子突然“沉”到地上。这是为什么?我无法理解这...

我的一个理论是圆柱体的“物理形状”与渲染的“光学形状”不同,但即便如此,我观察到的运动对于我能想象的任何合理的边界框仍然没有意义。 .

工作示例:https ://codesandbox.io/s/amazing-proskuriakova-4slpq

4

2 回答 2

0

最好的方法是在使用大炮 GH 上提出问题。该 lib 和 cannon-es 现在正在积极维护中。同时,我相信convexpolyhydron 也可以完美地做到这一点,请参阅:https ://codesandbox.io/s/r3f-convex-polyhedron-cnm0s

于 2020-03-31T11:00:04.157 回答
0

物理学很挑剔,而且真的很难调试,因为你经常试图通过它对你拥有的任何混合视图的影响来直观地了解一个不可见系统的影响。

我注意到如果我将质量降低到一个更合理的值,比如 5,物体看起来像球体或其他形状一样滚动。所以我认为你的理论是合理的。我不知道解决方案是什么,但我知道除了非常简单的模拟之外,我在 js 空间中“信任”的唯一物理引擎是 Ammo.js。它很难使用,但它是一个真正令人惊叹的 AAA 质量库的 emscripten 端口。https://threejs.org/examples/?q=phys#physics_ammo_break

我会先让一个立方体和一个球体工作..一旦你确认它们按预期工作..理想情况下使用真实世界比例单位,如质量为 1 的 1x1x1 立方体。在球体上使用纹理所以你知道它会像你期望的那样滚动。一旦你验证了更简单的基元的工作原理,就转向更复杂的几何形状。

于 2020-03-26T05:59:09.580 回答