【问题标题】:Miminum distance between objects in Bullet PhysicsBullet Physics 中对象之间的最小距离
【发布时间】:2015-09-21 16:44:26
【问题描述】:

是否可以计算 Bullet Phyics 中两个 CollisionObject 之间的最小距离?

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

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

【问题讨论】:

    标签: c++ distance bulletphysics


    【解决方案1】:

    正如图书馆作者告知的那样,子弹link 中没有正面的距离信息。 从碰撞测试中提取此信息很容易,但您需要自己修改 Bullet 碰撞检测。针对不同形状对的碰撞算法有很多种,但每一种都会在某个阶段处理有关距离的信息。

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

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

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

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

    【讨论】:

    • 非常感谢@Est!事实上,我做了类似于你建议的事情,检查具有 augmented 半径的边界球体之间的碰撞,然后添加一个逻辑来处理接触流形点。使用 raytest 会提供快速的结果,但如果凹对象的边界框中心不在对象内部,则它会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多