利用GJK做碰撞检测之后怎么获取碰撞点

发布于

最近打算自己做一个小项目把游戏引擎里比较常见的物理相关的算法和常见的优化方式都尝试实现一下,然后再做一些物理模拟出来,但是我实现了GJK之后发现了一个问题就是我不知道怎么通过这个算法算出两个物体的碰撞点,或者估算一个碰撞点我都没有一个好的思路(毕竟GJK的本质是看看两个convex有没有overlap的面,本来也不存在“碰撞点”这个说法)

我知道用EPA算法可以后续算出碰撞的normal,但是我现在想做带旋转的物体,那就必须知道碰撞点和物体质心的位置关系才能计算后续物体要怎么旋转,不知道有没有大佬有好的思路orz


顺便问问有没有小伙伴今年找工作的可以交流一下,我也是打算把这个项目作为一个小作品帮助自己找工作的

1
评论 2
收藏
  • Olorin
    Olorin
    可以参考Erin Catto的这个talk,从2D的角度出发对这个方向做了入门介绍。 https://box2d.org/files/ErinCatto_ContactManifolds_GDC2007.pdf “碰撞点”在物理模拟里更准确的说法应该是碰撞流形,具体的接触形状会随着时间演变。 模拟中我们不可能像真实世界每个接触的分子都去计算,所以会选取等效的特征点来计算后续如何施加冲量、施加摩擦力。 例如一个box平放在平面上,理论上整个一条底边都和平面接触,为了离散计算方便,最终使用的是两端两个顶点作为“碰撞点”。 后续使用次序冲击法(Sequential Impulse)迭代求解的时候就是在这两个“碰撞点”上依次调整冲量。 这部分Erin Catto的物理模拟系列talk(https://box2d.org/publications/)都有讲到,希望对物理模拟有深入了解建议系统学习一下,104讲到的部分仅仅把一些核心概念做了阐述,不足以作为实现整个物理模拟求解的参考。
    1
    展开1条回复