Bullet Physics 中物体之间的最小距离

Miminum distance between objects in Bullet Physics

Bullet Physics 中可以计算两个 CollisionObject 之间的最小距离吗?

凹面物体呢?也许它需要凸分解?

即使是点到物体的距离计算器也会很有用。

据库作者告知,Bullet link 中没有正距离信息。 从碰撞测试中提取此信息很容易,但您需要自行修改 Bullet 碰撞检测。有许多针对不同形状对的碰撞算法,但它们中的每一个都在某个阶段处理有关距离的信息。

但是,还有另一种推荐的方法来获取两个对象之间的大致距离。您可以通过从第一个对象的中心到第二个对象的中心执行射线测试来完成,存储碰撞点(它应该位于第二个对象的船体上)。接下来执行反向测试(从第二个对象到第一个对象)并计算两个存储点之间的距离。当然你需要检查命中的对象是否真的是你想要计算距离的对象。中间有障碍物就不行

要进行射线测试,需要btCollisionWorldrayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback)方法。可以找到使用示例 here.

如果你想让它更准确,你可以使用convexSweepTest方法进行扫描球体测试,而不是投射单一光线。

您需要注意,这些方法仅提供近似解决方案,因为无法保证命中点是最接近的。然而,它们对于大多数应用程序来说已经足够了。