没有合适的资源?快使用搜索试试~ 我知道了~
中文文档1
需积分: 0 0 下载量 168 浏览量
2022-08-08
20:37:26
上传
评论
收藏 640KB DOCX 举报
温馨提示
试读
34页
1引言Library描述bulletphysics是一种专业的使用便携式C++编写的开源collisiondetection,rigidbody和软体动力学库。
资源详情
资源评论
资源推荐
1 引言
Library 描述
bulletphysics 是一种专业的使用便携式 C ++编写的开源 collisiondetection,
rigidbody 和软体动力学库。 bulletphysics Library 主要设计用于游戏,视觉
效果和机器人模拟。 Library 根据 ZLib 许可证免费商业使用。
主要特点
� 离散和连续的 collisiondetection,包括射线和凸起扫描测试。 碰撞形
状包括凹凸网格和所有的基本图元
� 最 大 坐 标 6 自 由 度 rigid body ( btRigidBody ) 连 接 constraints
(btTypedConstraint)以及广义坐标多体 (btMultiBody)使用由动力装
置连接的关节运动算法。
� 快速稳定的 Rigid BodyDynamicsconstraints 求解器,车辆动力学特征控
制器和滑块,铰链,通用 6DOF 和锥形扭转 constraints
� 软体动力学用于布,绳和可变形体积与双向相互作用 rigid body,包括
constraints 支持
� 在 Zlib 许可证下开源 C ++代码,并在所有平台上免费使用任何商业用途
包括 PLAYSTATION3,XBox
360,Wii,PC,Linux,Mac OSX,Android 和 iPhone
� Maya Dynamica 插件,Blender 集成,本机二进制串行化 示例如何导入
URDF,Wavefront.obj 和 Quake .bsp 文件。
� 许多示例说明如何使用 SDK。 所有的 example 很容易浏览 OpenGL 3 示例
浏览器。 每个示例也可以编译没有图形。
� 快速启动指南,Doxygen 文档,维基和论坛补充了示例。联系和支持
� 支持和反馈公共论坛,请 http://bulletphysics.org
2 编译系统,入门和新增功能
请参阅单独的 BulletQuickstart.pdf 指南。
从 bullet2.83 起,有一个单独的快速入门指南。 这个快速入门指南包括
新 SDK 版本的变化和新功能,以及如何构建项目符号
物理 SDK 和示例。
你可以找到 bullet/doc/BulletQuickstart.pdf 本快速入门指南 。
3 Library 概况
介绍
物理引擎的主要任务是执行 collisiondetection,resolvecollisions 等
constraints,并提供更新的世界变换 1 中的所有对象。 本章将给出一个 Rigid
Body Dynamics 流程的概述以及由所有组件共享的基本数据类型和数学库。
软件设计
bullet 被设计为可定制和模块化。 开发者可以
� 仅使用 collisiondetection 组件
� 使用 Rigid BodyDynamics 部件,而不需要软体动力学部件
� 仅使用库的小部分,并以多种方式扩展库
� 选择使用单个精度或双精度版本的库
� 使用自定义内存分配器,连接自己的性能分析器或调试 hook
主要组成部分组织如下:
1. 线性数学
2. 内存,容器
3. 碰撞
4. 检测
5. rigid body
6. 动力学
7. 软体
8. 动力学
9. bullet 多线程
额外:
1. maya 插件
2. hkx2dae
3. .bsp,.obj,
其他工具
rigid body 物理管道
在详细介绍之前,下图显示了最重要的数据结构
bullet 物理管道的计算阶段。 这个管道从左到右执行,通过应用重力开始,并
通过位置整合和更新世界变换结束。
整个物理管道计算及其数据结构在 Bullet 中由 dynamics world 表示。 在
dynamicsworld 中进行“stepSimulation”的时候,所有上述阶段被执行。 默认
的 dynamicsworld 实现是 btDiscreteDynamicsWorld。
bullet 让开发人员明确地选择 dynamicsworld 的几个属性,如宽幅
collisiondetection,窄带 collisiondetection(调度器)和 constraints 求
解器。
集成概述
如果要在自己的 3D 应用程序中使用 Bullet,最好遵循 HelloWorld 中的步骤
Demo 位于 Bullet /examples / HelloWorld。 简而言之:
� 创建一个 btDiscreteDynamicsWorld 或 btSoftRigidDynamicsWorld
这些从 btDynamicsWorld 继承出来的类 ,让你可以自己管理更高级的接口和物
理对象和 constraints。 它还实现了每帧的所有对象的信息更新。
� 创建一个 btRigidBody 并将其添加到 btDynamicsWorld
为了构建一个 btRigidBody 或 btCollisionObject,您需要提供:
� 质量(动态的 可移动对象为正值 >0,静态对象为 0)
� CollisionShape 如 Box,Sphere,Cone,ConvexHull 或 TriangleMesh
� 材料性质 如:摩擦力和恢复力
每帧进行模拟更新各个物体的信息:
� stepSimulation
调用 dynamicsworld 的 stepSimulation。 这个 btDiscreteDynamicsWorld 类自
动通过执行内部插值而不是小于一帧的单步模拟来得出可变时间的步长。它使用
60 赫兹的内部固定时间步长。 (就是说计算大于 60 帧的模拟时,例如 90 帧中
的 30 帧是通过插值计算出来的)stepSimulation 将执行碰撞检测和物理模拟。
通过 btMotionState 的 setWorldTransform 的调用来更新可活动对象的世界变
换。
基本物理数据类型和数学库的基本数据类型,存储器管理和容器位于
bullet/SRC / LinearMath。
� btScalar
一个 btScalar 就是一个浮点数的声明。 为了允许编译单浮点精度和双精度的库,
我们设置 btScalar 数据 type。 默认情况下,btScalar 是 float 的类型定义。
当然它也可以定义为 double
BT_USE_DOUBLE_PRECISION 这个宏定义就是来说明当前的浮点数类型,它位于你
的编译宏定义,或者在文件 bullet/src/ LinearMath / btScalar.h 的目录顶部。
� btVector3
可以使用 btVector3 来表示 3D 位置和向量。 btVector3 具有 3 个标量 x,y,
z。
但是,考虑到齐次和 SIMD 兼容性原因还有第 4 个未使用的 w 成员。 许多操作可
以在一个 btVector3 中来执行 ,如加法减法和获取矢量的长度。
� btQuaternion 和 btMatrix3x3
三维方向和旋转可以使用 btQuaternion 或 btMatrix3x3 中的任何一个来表示 。
� btTransform
btTransform 是位置和旋转的组合。 它可以用来进行从一个坐标空间到另一个坐
标空间的点和向量的转换。 不允许缩放或剪切。
bullet 使用右手坐标系:
图 1 右手坐标系
btTransformUtil,btAabbUtil 用于变换计算和提供 AABB 计算等常见的实用功
能。
内存管理,对齐,容器
通常重要的数据是 16 字节对齐的,例如在使用 SIMD 或 DMA 在 Cell SPU 传输时
要求如此。 Bullet 提供了用来处理对齐的默认内存分配器,开发人员也可以提
供自己的内存分配器。bullet 使用中的所有内存分配有:
� btAlignedAlloc,允许指定大小和对齐
� btAlignedFree,释放由 btAlignedAlloc 分配的内存。
要重写默认的内存分配器,您可以选择:
� btAlignedAllocSetCustom 当您的自定义分配器不支持对齐时,将使用
� btAlignedAllocSetCustomAligned 可以用来设置自定义对齐的内存分配
器。
剩余33页未读,继续阅读
透明流动虚无
- 粉丝: 34
- 资源: 306
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0