【问题标题】:Approach to sphere sphere collision球体碰撞的方法
【发布时间】:2014-12-11 14:06:07
【问题描述】:

我正在尝试实现球体碰撞。我理解它背后的数学原理。但是,我仍在查看教程,看看是否有更好更快的方法。我遇到了 nehe 的碰撞检测教程(http://nehe.gamedev.net/tutorial/collision_detection/17005/)。在本教程中,如果我理解正确,他会尝试检查两个球体是否在一个框架内发生碰撞,并且通过首先检查它们的路径是否相交,他会尽量不要错过它。然后尝试以某种方式模拟它。

我的方法是检查每一帧,球体是否发生碰撞并完成处理。我没有考虑检查交叉路口等。现在我有点困惑如何解决这个问题。

我的问题是,真的有必要尝试那么安全并检查我们是否错过了一帧的碰撞吗?

【问题讨论】:

  • 如果球体在单个帧中超出其自身直径
  • 比如,如果他们移动得太快,可能因为我们来不及评估而进入另一个球体?
  • 这是一个准确性问题。您想仅检测当前帧中的冲突还是要检测此帧与下一帧之间的冲突?当中心之间的距离小于半径之和时,就会发生碰撞。如果你知道运动方程(位置作为时间的函数,通常是匀速运动),你会得到一个未知数(二次?)的方程。
  • 是的,现在我想起来了,如果我们不检查,球体可能会变得疯狂并完全相交
  • 它们确实可以在帧之间相交,但没有人会看到它发生,他们只能猜测。

标签: opengl collision-detection collision game-physics


【解决方案1】:

在编写碰撞检测算法时,重要的是要识别对象以离散时间步长移动,这与现实世界不同。在典型的现代游戏中,对象将以每帧 0.016 秒的时间步长移动(通常具有较小的固定或可变时间步长)。

有可能以非常高的速度移动的两个球体可能会在单个帧内相互穿过,并且在执行积分后不在彼此的边界球体内。这个问题被称为Tunneling,有多种方法可以解决这个问题,每种方法的复杂性和成本都不同。一些选项是swept volumesMinkowski Addition

选择正确的算法取决于您的应用程序。碰撞需要多精确?它对您的应用程序至关重要,还是您可以摆脱一些假阴性/阳性。通常,碰撞检测越精确,您在性能上付出的代价就越多。

Similar question here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多