物理系统碰撞相关原理及算法

1.物理模拟相关过程

1) 积分Integrate(物体运动位置和朝向的迭代)
2)碰撞检测 Collision Detect(检测碰撞体间是否接触以及相关碰撞信息)
1.粗略碰撞检测BroadPhase(粗略判断碰撞体间是否接触)
2.精确碰撞检测NarrowPhase(精确计算碰撞体间的接触点,接触法向量和穿透距离,为后续碰撞处理做准备)
3) 碰撞约束Collision Constraint (用约束求解的方法处理碰撞问题)
1.碰撞处理Collision Handling(模拟反弹力和摩擦力以及小球碰撞后的运动)
2.静止接触 Resting Contact(让盒子静止在桌面上,避免穿透)

2.碰撞检测

1.碰撞检测基础算法
1)计算空间中两点间的最小距离

点之间的距离
延伸即为球体之间的距离,同时可得出重叠深度,重叠位置,重叠法向量等

2)计算空间中点到平面的最小距离

设 空间中的点是P,平面的单位法向量n,平面上某一个点是Q
则有 点到平面的最小距离
延伸即为球体与平面之间的距离

3)计算空间中点到线段的距离(注意这里是线段而不是直线)

点到线段的距离
延伸即为球体跟胶囊体之间的距离

4)计算空间中点到方盒的最小距离

我们按照图中所示的方式将空间按照方盒划分

点到方盒的最小距离
空间将会划分成27份,12条边对应12个区域(对应下图中的a),8个顶点分别对应8个区域(对应下图中的b),6个面分别对应6个区域(对应下图中的c),最后一个区域是在方盒内部。
在这里插入图片描述
如果在12条边对应的区域的话,距离最近的点是该点在对应边上的投影。(如上图a)
如果空间中的点在8个顶点对应的区域内的话,距离最近的点就是所在区域对应的顶点。(如上图b)
如果在6个面对应的区域的话,距离最近的点是该点在对应平面上的投影。(如上图c)
而如果在方盒内部,需要比较该点到方盒6个面的距离,距离最小的就是最近距离,该点在应面上的投影就是最近点。
延伸即为球体跟立方体之间的距离

5)计算空间中线段到线段的最小距离

设线段 P1P2和Q1Q2,使用叉乘计算出平行与两条线段的平面(见叉乘的几何意义)。将Q1Q2投影在另P1P2线段所在平面。若线段相交,则计算平面之间的距离。不想交则分别计算点与线段的距离。
延伸即为最常见的胶囊体之间的距离

6)凸面体之间的距离(GJK算法)

GJK算法比较关键的一点是需要计算两个形状之间的Minkowski差,Minkowski差可以定义为 A,也就是形状A中的任意一点与形状B中的任意一点的差组合成的形状。该形状有条重要的性质,它与原点的最小距离就是A与B的最小距离,而当原点在该形状内时,A和B发生重叠。
GJK算法

2.空间加速

1) 基于空间树的加速
2) AABB包围盒的粗略计算

3.CCD算法(连续碰撞检测)

1) Sweep-based CCD
基于扫掠的 CCD 采用撞击时间 (TOI) 算法,通过扫掠对象的前向轨迹来计算对象的潜在碰撞(采用对象的当前速度)。如果沿对象移动方向有接触,该算法会计算撞击时间并移动对象直至达到该时间。该算法可从该时间开始执行子步骤,即计算 TOI 之后的速度,然后重新扫掠,代价是需要经历更多的 CPU 周期。
缺点:未考虑角速度计算,运算量大
2) Speculative CCD
推断性 CCD 的工作原理是基于对象的线性运动和角运动增大一个对象的粗筛阶段轴对齐最小包围盒 (AABB)。该算法是一种推测性的算法,因为会选取下一物理步骤中的所有潜在触点。然后将所有触点送入解算器,因此可确保满足所有的触点约束,使对象不会穿过任何碰撞。
推断性CCD
缺点1:会产生幽灵碰撞(由于大一号的AABB)
幽灵碰撞

缺点2 穿隧现象(解算器只计算扩大的 AABB 的内部触点,在求解和积分阶段不会执行碰撞检测)穿隧现象

内容简介  《实时碰撞检测算法技术》详细阐述了与碰撞检测问题相关的高效解决方案及相应的数据结构和算法,主要包括:碰撞检测系统中的设计问题、数学和几何学入门、包围体、基本图元测试、层次包围体技术、空间划分、BSP树层次结构、凸体算法、基于GPU的碰撞检测、数值健壮性、几何健壮性以及优化操作。另外,《实时碰撞检测算法技术》还提供了相应的算法、代码以及伪代码,以帮助读者进一步理解计算方案的实现过程。  《实时碰撞检测算法技术》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。第1章 概述1.1 内容概览1.2 关于本书的代码第2章 碰撞检测系统中的设计问题2.1 碰撞算法的设计因素2.2 应用程序中对象的表达方式2.3 查询类型2.4 环境模拟参数2.5 性能2.6 健壮性2.7 实现与使用的简洁性2.8 小结第3章 数学和几何学入门3.1 矩阵3.2 坐标系统和顶点3.3 向量3.4 质心坐标3.5 直线、光线和线段3.6 平面和半空间3.7 多边形3.8 多面体3.9 凸包计算3.10 域3.11 Minkowski和与Minkowski差3.12 小结第4章 包围体4.1 BV期望特征4.2 轴对齐包围盒4.3 Spheres球体4.4 方向包围盒4.5 球扫掠体4.6 半空间相交体4.7 其他类型的包围体4.8 小结第5章 基本图元测试5.1 最近点计算5.2 图元测试5.3 直线、光线和有向线段的相交测试5.4 其他类型的测试5.5 动态相交测试5.6 小结第6章 层次包围体技术6.1 层次结构设计问题6.2 层次结构的构建策略6.3 层次结构的遍历6.4 包围体层次结构示例6.5 合并包围体6.6 高效的树型表达方式及遍历6.7 通过缓存机制改善查询6.8 小结第7章 空间划分第8章 BSP树层次结构第9章 凸体算法第10章 基于GPU的碰撞检测第11章 数值健壮性第12章 几何健壮性第13章 优化操作参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值