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

这篇具有很好参考价值的文章主要介绍了物理系统碰撞相关原理及算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.物理模拟相关过程

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

2.碰撞检测

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

碰撞算法,unity,物理,unity
延伸即为球体之间的距离,同时可得出重叠深度,重叠位置,重叠法向量等

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

设 空间中的点是P,平面的单位法向量n,平面上某一个点是Q
则有 碰撞算法,unity,物理,unity
延伸即为球体与平面之间的距离

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

碰撞算法,unity,物理,unity
延伸即为球体跟胶囊体之间的距离

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

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

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

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

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

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

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

2.空间加速

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

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

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

缺点2 穿隧现象(解算器只计算扩大的 AABB 的内部触点,在求解和积分阶段不会执行碰撞检测)碰撞算法,unity,物理,unity文章来源地址https://www.toymoban.com/news/detail-708240.html

到了这里,关于物理系统碰撞相关原理及算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DOTS Unity.Physics物理引擎碰撞事件处理

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞事件处理以及核心相关概念。 Unity.Physics 物理引擎的主要流程与P ipeline   Unity.Physics物理引擎做仿真迭代计算的时候主要通过以下步骤来执行:   

    2024年01月18日
    浏览(48)
  • Unity --- 物理引擎 --- 触发器 与 碰撞器详解

    对第一个条件进行补充 --- 不仅要两者都具有碰撞组件,同时还需要两者的碰撞组件中都没有勾选 Is Trigger属性  1.上一篇文章中说了那么多,其实也可以总结为两个碰撞条件 --- a.两个游戏物体都具有碰撞器组件 ,如果没有的话,连碰撞检测都不会发生,也就没有所谓的碰不

    2024年02月07日
    浏览(43)
  • DOTS Unity.Physics物理引擎碰撞查询核心分析

      最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞查询以及核心相关概念。 Unity.Physics碰撞查询概述   碰撞查询(Collison Qurey)是Unity.Physics物理引擎中的一个很重要的功能。很多游戏逻辑都需

    2024年04月25日
    浏览(46)
  • Unity --- 物理引擎 ---- 刚体RigidBody 与 碰撞器 collider

      1.RigidBody(刚体)的作用是让物体具有物理特性(比如说重力,摩檫力等等) 2.如果想让物体能够与其它物体发生碰撞的话,我们还需要一个组件 --- Colider碰撞器组件 1.上图就是Unity中提供的已经准备好的各种形状的碰撞器组件 2.形成不同形状的碰撞器所需的面数不同,面数

    2024年02月16日
    浏览(38)
  • 2022版本unity-2D游戏官方案例--带视频案例(1)(层级渲染,物理碰撞,粒子动画,UI等多位基础一体化)

      👨‍💻个人主页:@元宇宙-秩沅 hallo  欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由  秩沅  原创 收录于专栏 unity实战入门  ⭐相关文章⭐ ——————————————————— -[本站最全-unity常用API大全(万字详解),不信你不收藏] -[关于游戏剧情模式中用到的

    2024年02月03日
    浏览(63)
  • Unity物理相关组件——2D关节

    一:前言  关节组件用来模拟物体与物体之间的连接关系,必须依赖于刚体组件 二:Hinge Joint 2D 用于实现链条物体、钟摆等物体的模拟 ——Enable Collision:是否开启碰撞 ——Connected Rigid Body:关联的刚体(如果为空则默认连接到世界,就算刚体有重力也不会下落) ——Auto

    2024年02月06日
    浏览(32)
  • 碰撞检测算法——分离轴算法在Unity中实现(二)

    一、介绍        分离轴算法(简称SAT)通常用于检查两个简单多边形(凸边形)之间或多边形与圆之间的碰撞。本质上,如果您能够绘制一条线来分隔两个多边形,则它们不会发生碰撞,如果找不到一条线来分割两个多边形,则它们发生碰撞。 如图:           具体做法

    2024年02月04日
    浏览(66)
  • UEC++学习笔记(二)运动和物理碰撞(子弹)

    控制旋转 第三人称游戏中的旋转,控制器的旋转并不等同于人物的旋转。 在角色bp中勾选了Use Contrtoller Rotation Yaw就会将控制器的旋转添加到角色的身上 我们应该把控制器的旋转添加到摄像头上才更加符合第三人称游戏的操作,所以取消勾选的同时在摄像头的机械臂中勾选

    2024年02月05日
    浏览(40)
  • Unity物理系统基本概念

    前言: 物理引擎仅仅是对现实物理的一种近似模拟。无论是从运算精度和时间连续性都不够准确。目的只是为了让游戏具备令人信服的物理表现,增强游戏的表现力和用户的沉浸感。 刚体是让物体产生物理行为的主要组件。一旦挂载了Rigidbody组件,它就纳入了物理引擎的控

    2024年02月05日
    浏览(41)
  • Unity之物理系统

    专栏的上一篇角色控制器控制角色移动跳崖,这一篇来说说Unity的物理系统。   本篇小编还要带大家做一个碰撞检测效果实例,先放效果图:流星撞击地面产生爆炸效果 我们给胶囊添加了  Rigidbody  组件它才有的重力,我们来看看 Rigidbody 组件中的参数。 首先 质量 不用多说

    2024年01月18日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包