碰撞测试及解析几何
1. 点与球体的相交
判断点p是否在球体内,生成球心到该点的矢量,然后根据矢量长度与球半径判断。
2. 球体与球体相交
基本同上
3. 分离轴定理
若能找到一个轴,两个凸形状在该轴投影不重叠,则不想交。
三维中,投影线变为投影面。
4. AABB与AABB的相交(判断线段与立方体是否相交)
包围体类型包括球体、轴对齐包围盒(AABB)、有向包围盒(OBB)、8-DOP以及凸壳
检测在每个轴上的最小,最大坐标。如果在3个轴上的区间都重叠,则AABB是相交的,否则不相交。
5. GJK算法
依赖于闵可夫斯基差,A图形中点,与B图形中点成对相减,得到的差集合就是闵可夫斯基差
如果相减,其中包含0,则为相交。
两个凸图形的闵可夫斯基差也是凸图形。
算法流程:
从闵可夫斯基的凸包内,尝试找一个包含原点的四面体,如果找到,则相交。
性能优化
1. 空间划分,不属于同一区域,停止检测
2. 时间一致性
3. 粗略阶段,中间阶段,精确阶段
碰撞查询
光线投射,形状投射
刚体动力学,比较基础,这里就不做介绍了。
一般来说,物理世界存在多个刚体,可以分为三种情况。
1. 0个刚体
2. 1个刚体(大多数情况)
3. 多个刚体
特别注意:
可破坏体