当前位置: 首页 > article >正文

物理引擎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都可以走对象池缓存,尤其是实体碰撞圆圈。


http://www.kler.cn/a/543048.html

相关文章:

  • 插入排序和希尔排序
  • Node.js调用DeepSeek Api 实现本地智能聊天的简单应用
  • Flutter PIP 插件 ---- Android
  • 代码随想录day11
  • 【Docker】
  • 今日AI和商界事件(2025-02-10)
  • 《图解设计模式》笔记(八)管理状态
  • 异位妊娠唯一相关的是年龄(U型曲线)
  • SWIFT (Scalable lightWeight Infrastructure for Fine-Tuning)
  • 【多模态大模型】系列2:Transformer Encoder-Decoder——BLIP、CoCa、BEITv3
  • 【MATLAB源码-第261期】基于matlab的帝企鹅优化算法(EPO)机器人栅格路径规划,输出做短路径图和适应度曲线
  • 浏览器渲染方式及性能优化
  • 使用 meshgrid函数绘制网格点坐标的原理与代码实现
  • SAP-ABAP:dialog界面中的数据块Event Block详解举例
  • Kafka 集群原来是使用ZK管理,现在新版本是怎么管理的?
  • IPC 共享通俗讲解及其安全风险
  • 【devops】 Git仓库如何fork一个私有仓库到自己的私有仓库 | git fork 私有仓库
  • 【电路笔记】-同步计数器
  • 学习星开源在线考试教育系统
  • FFmpeg Audio options
  • Hello Robot具身智能移动操作机器人Stretch 3:开源、灵巧、友好
  • Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)
  • c# OpenCvSharp 16位转8位图
  • C++ 类和对象 (流插入、流提取、const)
  • MySQL的操作
  • 波导阵列天线学习笔记8 高增益、低轴比的3D打印Ka波段圆极化单脉冲天线阵列