GJK从2D到3D的碰撞检测实现

时间:2011-06-29 03:44:49

标签: c++ algorithm collision-detection 3d linear-algebra

我为这个问题的长度道歉,并对任何阅读此内容的人给予先发制人的谢意!

所以我花了最后几天来讨论GJK算法。我理解它背后的一般概念,并理解其在2D中实现的大部分细节,这要归功于William Bittle在http://www.codezealot.org/archives/88撰写的精彩文章。

我已将他的伪代码(在文章末尾找到)实现到我自己的c ++项目中,但我想制作一个3D实现。我的弱点在于使用点积测试voronoi区域和tripleProducts来获得perpandicular线。但我试图阅读更多内容。

我的问题归结为containsOrigin函数。我无法直观地查看和计算z轴添加的新voronoi区域。我似乎无法绕过如何确定哪些区域包含原点。我假设有4个我必须考虑,每个都从构成四面体单面的4个面的三角形平面延伸。如果原点不在任何区域内,那么它就被包含,我们就会发生碰撞。

我如何测试它是否包含在特定的voronoi区域/哪个三角形面指向原点方向?

当前的2D算法会检查是否有三角形,如果没有,则单纯形就是一条线,它会找到第三个点。我假设3D算法检查是否制作了四面体,如果没有,那么它将检查三角形,如果为真,那么它将找到第四​​个点来制作四面体(我将如何得到这个?使用法线方向起源?)。如果我没有制作,它会找到第三个点来制作一个三角形(我是否仍然使用三重产品,就像2D一样?)。

任何建议,大纲,资源,代码扩充,评论都是非常有用的。

1 个答案:

答案 0 :(得分:3)

根据您对GJK算法的期望,您可能需要查看Molly Rocket的这个精彩教程:https://mollyrocket.com/849

请注意,虽然他的实施仅输出交集?是/否。但这可能是个不错的开始。