3D连续移动AABB对抗静态凸多面体碰撞检测

3D continuous moving AABB against static convex polyhedron collision detection

我目前正在尝试实现一个简单的连续碰撞检测系统。我想知道是否有可能,对于移动的 AABB,计算它在与凸多面体相交之前可以在任意方向 d 平移的距离。这是二维的简单解释:

这里我要的是绿线的长度(橙色的AABB是初始位置,红色的AABB是两个碰撞器相交的位置)。

这也相当于尝试从原点向 d 方向投射明可夫斯基差 A⊕-B,其中 A 是我的静态凸多面体,B 是我的移动 AABB:

但是计算 minkowski 差异似乎非常耗费性能,所以我想知道是否存在执行此操作的快速算法。

在谷歌搜索时,我看到了一种叫做 GJK 的算法,但它似乎只是 return 整体最小距离,而不是方向距离。

提前感谢您的回答!

PS: 请原谅我糟糕的英语和我完全缺乏绘画艺术天赋。

您好,是的,存在这样的算法,而且速度快得惊人。 它使用了 minkowski 差异的想法但是没有必要完全计算它,你只需要从 minkowski 差异中得到几个点。这个想法是你使用一个支持函数来计算一个方向上形状的最远点。对于凸多面体,这个函数很容易实现,但如果你能够描述一个非多面体(但仍然是凸的)形状,那么你也可以使用这个算法。 该算法基本上使用 GJK 来计算在不与 A - B 形状相交的情况下可以将原点移动多远。它会这样做,直到原点足够接近 A - B,这意味着 A 和 B 几乎重叠它停止。 这是完整算法的 link:https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwjx38Cx0u7jAhXG4IUKHQHGD4YQFjAAegQIABAC&url=http%3A%2F%2Fdtecta.com%2Fpapers%2Fjgt04raycast.pdf&usg=AOvVaw0OE9mgYb4NPQwAMqzLntRX

由于浮动错误,这可能很难实现,但速度非常快。