博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bullet3 入门
阅读量:4312 次
发布时间:2019-06-06

本文共 1843 字,大约阅读时间需要 6 分钟。

<?xml version="1.0" encoding="utf-8"?> Bullet3 入门

Bullet3 入门

Bullet3 简介

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

其他的物理引擎还有 、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( ) 约束分析是一个非常复杂的话题,涉及到 PGS 算法的简化,后文会有介绍. 约束分析会根据所设定的约束类型来计算碰撞后各个对象所对应的位置,速度等, 然后与渲染引擎同步 motion state.

碰撞响应

相关资料

网页

  1. Bullet HelloWorld
  2. 不完全指南
  3. 工作流程简析,推荐了相应书目
  4. 内容比较多的介绍
  5. 创建世界(场景)及常见函数
  6. 常见物体和初始化
  7. 物体碰撞与属性简单实例
  8. 三种碰撞检测及实现
  9. 刚体与软体的碰撞
  10. Bullet 约束的使用
  11. Bullet 通过高度图数据创建 3D 地形
  12. Bullet 3D Max 插件
  13. 在 OpenGL 中的应用

教材

  • 包含了各种物理引擎的资料
  • 快速入门教程
  • 《游戏物理引擎开发》: 讲述了物理引擎的设计方法,实现了一个简单的物理引擎 cyclone.
  • 物理建模和仿真的大学课程,只有演示文稿和参考文献
  • 《Learning Game Physics with Bullet Physics and OpenGL》

视频

  • 在 Maya 中使用 Bullet 引擎
  • 如何从头实现一个物理引擎

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

Author: fhln

Created: 2018-10-25 Thu 19:02

转载于:https://www.cnblogs.com/fhln/p/9849440.html

你可能感兴趣的文章
学习笔记_vnpy实战培训day06
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>