Bullet3 入门

Bullet3 入门

Bullet3 入门

Bullet3 简介

Bullet 是一个开源免费(Zlib)的物理引擎,广泛应用于游戏、动画、电影和机器人仿真等领域。Blender、Maya、Unity3D 插件、gazebo、V-rep、Roboschool 等都使用了这个物理引擎。
其他的物理引擎还有PhysX 、Havok 等。

物理引擎的主要功能

  1. 连续和离散物体的碰撞检测,物体形状包括网格和基本几何体的。
  2. 快速稳定的刚体约束求解器,包括车辆动力学、人体、直线约束、铰链约束等等。
  3. 软体物体动力学,包括衣服、绳子、可变形体等,同时支持约束。
  4. 自定义格式.bullet, 支持 URDF 格式,和 bsp 格式。

整体架构

https://img2018.cnblogs.com/blog/1518785/201810/1518785-20181025190220785-1261760789.jpg
呈分层结构,每个模块都可以单独拿来使用。
下图展示了引擎运行的流程图
https://img2018.cnblogs.com/blog/1518785/201810/1518785-20181025190221994-1052227643.jpg
引擎从左向右执行,从施加重力开始,到位置改变,坐标系变换结束。

数据结构

几何模型

  • 形状: shape 类 抽象出了几何形状的特征, 比如长方体, 球, 四面体,凸包. bullet 中的形状类型非常丰富,有几十种之多. 由于几何形状的特征是和具体对象无关的,所以一种形状只要维持一个实例即可, 所有映射到该 shape 的对象可以共享这个实例.
  • 包围体(BVH): 采用的是 AABB, 一般有 AABB, OBB, K-Dop, Convex Hull.
  • 空间划分: 主要是 Dynamic AABB Tree (刚体,曼哈顿距离) 和 Sweep and Prune (soft body)
  • 碰撞检测算法:GJK ,sweep prune,box2box, shpere2shpere 等
  • 接触点:
  • 约束: 六种约束类型,见文档
  • motion state: 对渲染引擎提供的一个接口, 便于渲染引擎更新渲染对象的位置

完成几何基础构建后,在一个场景(collision world)内 加入 各个被模拟的物理对象(collision object)每个物理对象被映射到对映的 shape, 空间划分数据结构节点. 如果再在这些对象身上附加例如速度,角速度,转动惯量等物理特征,就演化为 rigid object. Soft body 情况复杂一些, 一般由 mesh 构成

物理仿真

  • Broad Phase: 首先进行远距碰撞检测, 利用空间分割结构,如果不在同一个子树内的物体不可能相交不用去计算, 在同一个子树内的物体被放入 overlapping pair, 再进一步由对应的算法来计算出接触点等信息. 采用哪一种算法取决于算法配置矩阵(见 bullet 手册)
  • Narrow Phase: 根据 overlapping pairs 的分布情况计算出碰撞对象岛(collision Island).而后依次对各个岛进行约束分析. 亦即碰撞响应. Bullet 采用的是 Sequential Impulse ConstraintSolver(http://www.gphysics.com/archives/28 ) 约束分析是一个非常复杂的话题,涉及到 PGS 算法的简化,后文会有介绍. 约束分析会根据所设定的约束类型来计算碰撞后各个对象所对应的位置,速度等, 然后与渲染引擎同步 motion state.

碰撞响应

相关资料

教材

视频

Date: [2018-10-25 Thu 14:05]

Author: fhln

Created: 2018-10-25 Thu 19:02

Validate

posted @ 2018-10-25 14:05  fhln  阅读(5364)  评论(0编辑  收藏  举报