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

GJK collision detection implementation from 2D to 3D

本文关键字:3D 2D 碰撞检测 实现 GJK      更新时间:2023-10-16

我为这个问题的篇幅感到抱歉,并对通读这篇文章的人表示衷心的感谢!

所以我在过去的几天里一直在复习GJK算法。由于William Bittle在http://www.codezealot.org/archives/88。

我已经在我自己的c++项目中实现了他的伪代码(见文章末尾),但我想实现一个3D。我的弱点在于使用点积来测试voronoi区域,而使用三重积来获得泛二次线。但我想了解更多关于这方面的信息。

我的问题归结为containsOrigin函数。我在可视化和解释z轴添加的新voronoi区域时遇到了困难。我似乎无法理解如何确定哪些区域包含原点。我假设有4个我必须考虑,每个都从三角形平面延伸,三角形平面包括四面体单纯形的4个面。如果原点不在这些区域中的任何一个区域内,那么它就被包含了,我们就发生了碰撞。

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

当前的2D算法检查是否形成了三角形,如果没有,则单纯形是一条线,它会找到第三个点。我假设3D算法会检查是否制作了四面体,如果没有,那么它会检查三角形,如果为真,那么它将找到第四个点来制作四面体(我如何得到这个?使用原点方向的法线?)。如果不做三角形,它会找到第三个点来做三角形(我还在像2D中那样使用三乘积吗?)。

任何建议、大纲、资源、代码扩充、评论都会受到热烈欢迎。

根据你对GJK算法的期望结果,你可能想看看Molly Rocket的这个不错的教程:https://mollyrocket.com/849

但要知道他的实现只输出交集吗?是/否。但这可能是一个良好的开端。