对于这个问题的长度,我深表歉意,并对阅读本文的人表示先发制人的感谢!
所以我最近几天一直在研究 GJK 算法。得益于 William Bittle 的精彩文章 http://www.codezealot.org/archives/88,我了解了它背后的一般概念,并了解了其在 2D 中实现的大部分细节。 。
我已经将他的伪代码(在文章末尾找到)实现到我自己的 C++ 项目中,但是我想制作一个 3D 实现。我的弱点在于使用点积来测试泰森区域和三重积来获得垂直线。但我正在尝试阅读更多相关内容。
我的问题归结为 containsOrigin 函数。我无法可视化和解释 z 轴添加的新 voronoi 区域。我似乎无法理解如何确定哪些区域包含原点。我假设我必须考虑 4 个,每个都从构成单纯形四面体的 4 个面的三角形平面延伸。如果原点不在这些区域中的任何一个内,那么它就被包含在内,并且我们发生了碰撞。
我如何测试它是否包含在特定的 voronoi 区域/哪个三角形面指向原点方向?
当前的 2D 算法检查是否形成了三角形,如果没有,则单纯形是一条线,并找到第三个点。我假设 3D 算法检查是否制作了四面体,如果没有,那么它将检查三角形,如果为真,那么它将找到第四个点来制作四面体(我将如何得到这个?使用法线方向起源?)。如果我没有制作三角形,它会找到第三个点来制作三角形(我仍然像在二维中一样使用三重积吗?)。
非常感谢任何建议、大纲、资源、代码扩充、评论。
最佳答案
根据您对 GJK 算法的期望结果,您可能想看看 Molly Rocket 提供的这个不错的教程:https://mollyrocket.com/849
请注意,他的实现仅输出交集?是/否。但这可能是一个好的开始。
关于c++ - GJK碰撞检测从2D到3D的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6515529/