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发生重叠。

2.空间加速

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

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

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

缺点1:会产生幽灵碰撞(由于大一号的AABB)

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

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

  1. Unity 物理系统 -- 碰撞体简介(碰撞、触发条件)

    Unity 物理系统 -- 碰撞体简介(碰撞.触发条件) 几个常用的碰撞体: Box Collider:盒碰撞体,盒碰撞体是一个立方体外形的基本碰撞体,该碰撞体可以调整为不同大小的长方体,可用作门.墙 ...

  2. 2D物理系统——碰撞器

    1.碰撞器 碰撞器是用于在物理系统中表示物体体积的形状或范围,刚体通过得到碰撞器的范围信息进行计算,判断两个物体的范围是否接触,如果接触刚体就会模拟力的效果产生速度和旋转 2.2D碰撞器 补充: 边界 ...

  3. 《人脸识别原理及算法——动态人脸识别系统研究》—1章1.2节人脸识别相关学科的进展...

    本节书摘来自异步社区<人脸识别原理及算法--动态人脸识别系统研究>一书中的1章1.2节人脸识别相关学科的进展,作者 沈理 , 刘翼光 , 熊志勇,更多章节内容可以访问云栖社区"异 ...

  4. BEPU物理引擎碰撞系统的架构与设计

    前面我们讲解了如何监听物理引擎的碰撞事件, 在物理引擎内核中如何架构与设计碰撞规则,使得物理Entity与周围的物理环境产生碰撞时,如何灵活的控制物理碰撞,本节給大家详细的讲解BEPUphysicsi ...

  5. 【分布式计算:原理、算法和系统】第二章 分布式计算模型

    [分布式计算:原理.算法和系统]第二章 分布式计算模型 2.1 分布式程序 一个分布式程序由一组nnn个异步进程(asynchronous processes)P1,P2,-,Pi,-,PnP_1,P ...

  6. 【Unity】物理系统的静态碰撞体、刚体碰撞体、Kinematic刚体碰撞体

    碰撞体分为三类(触发器同理):静态碰撞体.刚体碰撞体.Kinematic刚体碰撞体. 静态碰撞体:不挂载刚体组件的碰撞体 常用于地形.障碍物等不会移动位置的物体,物理引擎会对此优化性能.在游戏运行时, ...

  7. 不使用物理系统判断两个矩形是否碰撞

    如图所示,不使用物理系统去检测两个物体是否碰撞的效果. 注意:两个物体如果一直相交,在Update中处理的时候会一直输出,在实际使用时需要注意相交时的处理. 直接上代码: 检测碰撞使用的是两个节点,节 ...

  8. Unity物理系统中碰撞体、刚体、isKinematic、isTrigger的关系(附动画演示)

    Unity物理系统中碰撞体.刚体.isKinematic.isTrigger的关系 写在前面 产生碰撞的条件 产生触发的条件 实验一:蓝块(碰撞体).红块(碰撞体) 实验二:蓝块(碰撞体).红块(碰撞 ...

  9. Cocos Creator-5.物理与碰撞系统

    Cocos Creator-5.物理与碰撞系统 Cocos Creator系列文章目录 [Cocos Creator--1.介绍](https://blog.csdn.net/joyyi9/artic ...

最新文章

  1. 用立异,声东击西——贵阳Flex创客团队航行器吸引世界眼光
  2. liferay 点击build service 出现Cloud not reserve enough space for object heap
  3. 开源网店系统_做仿货国外网店系统被谷歌禁掉该怎么办?
  4. 薪资不如 Java、C,BAT 需求大,揭秘 Python 程序员跳槽现状!
  5. django-salmonella的使用
  6. MODIS数据下载流程之地理空间数据云
  7. nodejs安装教程Windows版本
  8. 《东周列国志》第九十一回 学让国燕哙召兵 伪献地张仪欺楚
  9. idea 设置版权信息
  10. uni-app开发模式中的选择图片(uni.chooseImage)、上传图片(uni.uploadFile)、图片预览(uni.previewImage)
  11. R语言计算并合并各物种的OTU数量
  12. imag_collected
  13. 关于人像后期处理基础的相关技术步骤
  14. java中的几个术语(覆写override,隐藏hiding,重载overload,遮蔽shadowing,遮盖obscuring)
  15. css !important用法以及CSS样式使用优先级判断
  16. 计算机网络中什么叫总衰耗_计算机网络中争用期怎么算?
  17. switch完成输出星期一到七
  18. Tmall_Fore_home
  19. 万顿思电商:为什么拼多多退店不成功?
  20. 经典FLASH 菜单下载【含源码】

热门文章

  1. 挖矿木马应急响应指南
  2. 数学问 高考数学复习资料策略整理
  3. IP根域名服务器以及域名服务器对国家安全的真正意义。
  4. Linux驱动框架之misc类设备驱动框架
  5. 100!的尾数有多少个零?
  6. RTP/RTCP协议解析
  7. 前端下载 “不支持打开该类型文件或文件已损坏“问题
  8. 游戏开发经验之游戏App是先做大用户量 还是先盈利呢
  9. [advGAN]Generating Adversarial Examples With Adversarial Networks
  10. 概率论 —— 相关分布以及期望方差的求法汇总