2015-09-21 34 views
0

是否可以计算子弹物理中两个CollisionObjects之间的最小距离?子弹物理中物体间的最小距离

凹形物体怎么样?也许它需要凸分解?

即使点对点距离计算器也会有用。

回答

1

作为图书馆的作者,Bullet link没有正面的距离信息。 从碰撞测试中提取这些信息会很容易,但您需要自行修改子弹碰撞检测。对于不同的形状对有很多碰撞算法,但是它们中的每一个都在某个阶段处理关于距离的信息。

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

要执行射线测试,您需要一个rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback)方法btCollisionWorld。使用示例可以在here找到。

如果您希望它更准确,您可以使用convexSweepTest方法执行扫描球体测试,而不是投射单个射线。

您需要注意的是,这些方法仅提供近似的溶剂,因为没有保证,命中点是最接近的。但是,它们对于大多数应用程序已经足够了

+0

非常感谢@Est!事实上,我做了类似于你的建议,检查边界球与_augmented_ radius之间的碰撞,然后添加一个逻辑来处理接触歧管点。使用raytest可以提供快速的结果,但如果凹面物体的边界框中心不在物体内部,将会失败。 – Nic