一 大阶段:筛选¶
1.BVH¶
2.SW¶
二 碰撞检测:判断相交¶
1.基本形状相交¶
点与球,点与AABB....
2.闵可夫斯基差分法,GJK¶
闵可夫斯基加法¶
点集a+b,
闵可夫斯基加法¶
点集a-b,即点击a+(-b) 两个凸包形成的形状叫slmplex(单纯形) 如果两个凸包有重叠,则它们的闵可夫斯基差必定包含原点
问题转换为了如何判断两个凸包的闵可夫斯基差包含原点。
GJK算法¶
- Support 函数:给定方向上最远的点 ![[Pasted image 20241215173210.png]]
3. SAT(分离轴)算法¶
三 碰撞解决¶
加冲量
四 场景请求¶
Raycast sweep overlap
五 效率、准确性与确定性¶
- Sleeping(static,kinematic,dynamic)
- Continuous Collision Detection-CCD:一个快速运动的对象碰撞一个比较薄的物体时容易发生错误直接穿过去(因为前后两次计算时发现都没有碰撞,但其实不可以) 。一种比较质朴的方法就是把墙等物体做的厚一点。
- 更规范的做法就是CCD:先计算一个安全时间(在这个时间内两个物体不会碰撞),然后开始一点点详细计算会不会碰撞,知道它们的距离小于一定阈值。
- Deterministic确定性