我有两个不同的凸对象,我需要检查关于它们位置的三种不同状态:
- 固体没有碰撞
- 固体部分碰撞
- 其中一个固体完全在另一个固体内部
我使用GJK算法来检查实体是否发生碰撞,从而消除1状态。现在的问题是,GJK无法判断我是发生了部分碰撞,还是其中一个物体完全在另一个物体内部。检查第三种状态的最快方法是什么?
- 为两个对象创建"轴对齐"边界框(AABB)。
- 如果它们(AABB)没有碰撞,则表示车身在外侧/没有碰撞
- 如果AABB这样做:
- 使一个实体的所有面/边与其他实体的面/边相交。(对于每个人脸对等,您可以再次使用AABB消除非碰撞)
- 如果没有别的,它们就是一个在另一个之中
下面的演示是一个很好的资源。我推荐阅读:http://www.sccg.sk/~ durikovic/classes/CGAnim/ca10_lesson04.pdf
建立第一个实体所有面的定向平面方程(每个面取三个顶点),并检查第二个实体的所有顶点是否位于平面的正侧。
对于N个面和M个顶点,需要时间O(N.M)。