物理引擎Box2D

DOTS,软浮点物理引擎:https://github.com/Kimbatt/unity-deterministic-physics?tab=readme-ov-file

Unity底下物理引擎就是Box2D,这里因为项目需要定点数物理引擎,就找了个抄过来

定点数物理引擎:https://github.com/Zonciu/Box2DSharp-deterministic

TrueSync里面的Farseer就是基于Box2D弄的 https://github.com/Genbox/VelcroPhysics

游戏内主要用于碰撞检测,不用计算物理属性(受力、速度等)。
在这里插入图片描述

Triangulate生成三角形算法

ChatGPT提供

  1. Earclip 算法:(目前游戏内构建多边形使用)

    • 介绍:Earclip 算法用于将简单多边形进行三角测量,其中多边形的边界没有重叠或自交。

    • 适用场景:适用于简单多边形的三角测量,例如多边形填充和简单的多边形分解。

  2. Bayazit 算法:

    • 介绍:Bayazit 算法用于将复杂的多边形分解为一组简单的三角形。

    • 适用场景:适用于多边形分解,特别是在需要将复杂的多边形分解为简单三角形的应用,如碰撞检测、路径规划和切割操作等。

  3. Flipcode 算法:

    • 介绍:Flipcode 算法用于构建具有较好质量的 Delaunay 三角网格。

    • 适用场景:适用于构建 Delaunay 三角网格的应用,如计算机图形学、地理信息系统、模型生成和仿真等。

  4. Seidel 算法和 SeidelTrapezoids 算法:

    • 介绍:Seidel 算法和 SeidelTrapezoids 算法用于在平面上进行点集三角测量。

    • 适用场景:适用于点集三角测量的应用,特别是在处理动态点集和需要高效点插入和查询的场景中,如实时模拟、可视化和交互式设计等。

  5. Delaunay 算法:

    • 介绍:Delaunay 算法用于构建满足 Delaunay 条件的三角网格。

    • 适用场景:适用于构建 Delaunay 三角网格的应用,可以应用于计算机图形学、地理信息系统、计算机辅助设计、模拟和优化等领域,如三维建模、网格生成和点云处理等。

碰撞检测

  1. 遍历所有刚体AABB检测是否相交,相交的加到同一个岛屿

    1. 遍历刚体接触点,后面计算物理受力情况
  2. 同个岛屿内Body标记需要检测碰撞计算

    1. 先AABB检测是否可能相交

    2. 再根据GJK算法计算碰撞

GJK 凸多边形相交检测

https://zhuanlan.zhihu.com/p/511164248

  1. 初始化:选择两个凸形状(通常是多边形或多面体)以及一个初始方向。

  2. 迭代:在每一次迭代中,执行以下步骤:

    • 在当前方向上计算两个凸形状的支持点,即距离当前原点最远的点。

    • 检查原点是否在两个支持点的连线上。如果是,则两个凸形状相交,碰撞检测成功。

    • 否则,根据当前支持点的连线方向计算一个新的搜索方向。

  3. 终止条件:迭代过程将继续,直到找到重叠(碰撞)或者确定没有重叠的情况。


游戏应用

游戏内扇形碰撞检测应用
在这里插入图片描述

优化

  1. 构建三角型 Earclip 算法要求顺时针计算顶点,接口有检测逆时针会倒转定点列表(额外产生开销),构造时就按顺时针创建。

  2. 如果固定多边形,可以提前计算序列化,在运行时,直接取出三角形列表构造多边形,避免运行时计算创建多边形。

  3. Body、Fixture、Shape都可以走对象池缓存,尤其是实体碰撞圆圈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值