是否可以计算Bullet Phyics中两个CollisionObjects之间的最小距离?
凹面物体怎么样?也许它需要Convex分解?
即使是点对象距离计算器也很有用。
答案 0 :(得分:1)
作为图书馆的作者通知,子弹link中没有正距离信息。 从碰撞测试中提取此信息很容易,但您需要自己修改Bullet碰撞检测。对于不同的形状对存在许多碰撞算法,但是它们中的每一个都在某个阶段处理关于距离的信息。
然而,还有另一种推荐的方法来获得两个物体之间的近似距离。您可以通过从第一个对象的中心到第二个对象的中心执行射线测试来存储碰撞点(它应该位于第二个对象的外壳上)。接下来,执行反向测试(从第二个对象到第一个对象)并计算两个存储点之间的距离。当然,您需要检查命中对象是否实际上是您想要计算距离的对象。如果它们之间存在障碍,它就不会起作用。
要执行光线测试,您需要rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback)
btCollisionWorld
方法。可以找到使用示例here。
如果您希望它更精确,而不是投射单个光线,您可以使用convexSweepTest
方法执行扫掠球体测试。
您需要注意的是,这些方法仅提供近似溶解,因为无法保证命中点是最接近的。但是它们足以满足大多数应用。