【发布时间】:2015-09-21 16:44:26
【问题描述】:
是否可以计算 Bullet Phyics 中两个 CollisionObject 之间的最小距离?
凹形物体呢?也许它需要凸分解?
即使是点到物距离计算器也会很有用。
【问题讨论】:
标签: c++ distance bulletphysics
是否可以计算 Bullet Phyics 中两个 CollisionObject 之间的最小距离?
凹形物体呢?也许它需要凸分解?
即使是点到物距离计算器也会很有用。
【问题讨论】:
标签: c++ distance bulletphysics
正如图书馆作者告知的那样,子弹link 中没有正面的距离信息。 从碰撞测试中提取此信息很容易,但您需要自己修改 Bullet 碰撞检测。针对不同形状对的碰撞算法有很多种,但每一种都会在某个阶段处理有关距离的信息。
但是,还有另一种获得两个对象之间近似距离的推荐方法。您可以通过从第一个对象的中心到第二个对象的中心执行射线测试来做到这一点,存储碰撞点(它应该位于第二个对象的外壳上)。接下来执行反向测试(从第二个对象到第一个对象)并计算两个存储点之间的距离。当然,您需要检查被击中的对象是否真的是您要计算距离的对象。如果它们之间有障碍,它将不起作用。
要执行射线测试,您需要btCollisionWorld 的rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback) 方法。使用示例可以在here找到。
如果您希望它更准确,而不是投射单条射线,您可以使用convexSweepTest 方法执行扫球测试。
您需要注意,这些方法仅提供近似解决方案,因为无法保证命中点是最接近的。但是它们对于大多数应用程序来说已经足够了。
【讨论】: