碰撞检测的两个阶段
- Broad Phase(初筛): 找出刚体的AABB(轴同向碰撞盒),快速判断是否可能碰撞;
- Narrow Phase(精细检测):碰撞点、碰撞方向、碰撞深度;
Broad Phase的方法
BVH Tree
Sort and Sweep
把所有包围盒的minX、maxX、minY、maxY进行排序,判断是否有相交即可;
Narrow Phase
Basic Shape Intersection Test
- 球体与球体间的检测
- 球体与胶囊体间的检测
- 胶囊体与胶囊体间的检测
Minkowski Difference-based Methods
如果两个形体的闵可夫斯基差形成的形体过原点,那么它们两个相交;
通过GJK算法可以在线性时间判断原点是否在形体内;
Separating Axis Theorem(SAT分离轴定理)
对于在空间上的凸多面体,一定能找到一根轴,在这根轴上两个物体的投影一定是分开的;
对于二维空间上的两个形体,依次将其中一个形体的其中一条边作为轴,只要有一个轴能将两个形体分开,那么两个形体之间就是不相交的;
碰撞解决
如果检测到两个物体发生了碰撞,需要将其分离;
Applying Penalty Force
早期物理引擎的解决方法,给物体施加一个力;
Solving Constraints
现代物理引擎中将力学问题转换为了数学问题,通过数学约束去解(拉格朗日约束);