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

时间:2019-03-15 20:06:48

标签: collision-detection distance aabb convex

我目前正在尝试实现一个简单的连续碰撞检测系统。我想知道,对于移动的AABB,在与凸多面体相交之前是否可以计算它可以在任意方向d上平移的距离。这是2D的简单说明: enter image description here

我想要的是绿线的长度(橙色AABB是初始位置,红色AABB是两个对撞机相交的位置)。

这也等同于尝试在方向d上从原点发出Minkowski差A⊕-B,其中A是我的静态凸多面体,而B是我的移动AABB: enter image description here

但是计算minkowski差似乎确实消耗了性能,因此我想知道是否存在一种快速的算法。

在谷歌搜索时,我看到了一种称为GJK的算法,但它似乎只返回总的最小距离,而不是方向距离。

在此先感谢您的回答!

PS:请原谅我英语不好,我完全缺乏使用油漆的艺术才能。

1 个答案:

答案 0 :(得分:1)

您好,是的,这种算法已经存在,而且速度惊人。 它使用了minkowski差的想法,但是不需要完全计算它,您只需要从minkowski差中得出几点即可。这个想法是使用支持功能来计算形状在方向上的最远点。对于凸多面体,此函数易于实现,但是如果您能够描述非多面体(但仍是凸面)形状,则也可以使用此算法。 该算法基本上使用GJK来计算您可以在不相交A-B形状的情况下将原点移动多远。这样做直到原点足够接近A-B,这意味着A和B几乎重叠,它停止了。 这是完整算法的链接: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

由于浮动错误,实现起来可能很棘手,但速度很快。