【Bullet随笔】01_HelloBullet

1. 编译bullet

修改配置:

2. 初始化物理世界

2.1 基本概念

1. btDefaultCollisionConfiguration

  • 用途:这是 Bullet 物理引擎中用于配置碰撞检测系统的默认设置类。它负责初始化和配置碰撞检测所需的各种算法和数据结构。
  • 功能:它提供了碰撞算法的默认实现,可以根据不同类型的碰撞对象(如凸体、网格)选择合适的算法。它还管理着用于碰撞检测过程中的内存分配。

2. btCollisionDispatcher

  • 用途:这是一个碰撞分派器,用于管理和分配物体间的碰撞检测任务。
  • 功能:当两个物体可能发生碰撞时,碰撞分派器确定是否需要进行碰撞检测,以及使用哪种碰撞检测算法。它依据物体的形状和碰撞配置来决定如何处理这些潜在的碰撞(依据包围盒)。

3. btBroadphaseInterface

  • 用途:这是一个用于初步筛选碰撞对的接口,用于快速剔除那些不可能相互碰撞的物体。
  • 功能:通过空间分割和快速检测方法(如AABB测试),该接口能够高效地缩小需要进行详细碰撞检测的物体对的数量。这极大地提高了整体的碰撞检测效率。

4. btSequentialImpulseConstraintSolver

  • 用途:这是一个求解器,用于处理刚体间的约束和碰撞响应。
  • 功能:它使用迭代方法来解决刚体之间的约束,如铰链、滑轮或接触约束。这个求解器计算出所需的力和冲量,以保持物体间的约束条件并适当地响应碰撞。

5. btCollisionWorld

  • 用途:这是一个包含所有参与碰撞检测物体的容器。
  • 功能:它负责组织和执行碰撞检测,但不处理物体的动力学(如力和运动)。这使得它适用于那些只需进行碰撞检测而无需物理模拟的场景。

6. btDiscreteDynamicsWorld

  • 用途:这是 Bullet 中最常用的动力学世界类型,它既处理刚体的碰撞也处理它们的动力学。
  • 功能:除了执行碰撞检测之外,这个世界还管理物体的运动,处理力的作用、质量、摩擦等物理属性。这使得它成为模拟真实世界物理行为(如在游戏和模拟中)的理想选择。

2.2 初始化碰撞世界

// 碰撞配置
btDefaultCollisionConfiguration* pCollisionConfig = new btDefaultCollisionConfiguration();

// 分派器
btCollisionDispatcher* pDispatcher = new btCollisionDispatcher(pCollisionConfig);

// 粗侧接口
btBroadphaseInterface* pBroadphase = new btDbvtBroadphase();

// 注册GImpact算法
btGImpactCollisionAlgorithm::registerAlgorithm(pDispatcher);

// 初始化碰撞世界
btCollisionWorld* pCollisionWorld = new btCollisionWorld(pDispatcher, pBroadphase, pCollisionConfig);

2.3 初始化动力学世界

// 碰撞配置
btDefaultCollisionConfiguration* pCollisionConfig = new btDefaultCollisionConfiguration();

// 分派器
btCollisionDispatcher* pDispatcher = new btCollisionDispatcher(pCollisionConfig);

// 设置世界的空间大小,限定刚体运动的空间范围
btVector3 worldAabbMin(-10000, -10000, -10000);
btVector3 worldAabbMax(10000, 10000, 10000);
// 设置最大刚体数
int maxProxies = 1024;
// 粗侧接口
btBroadphaseInterface* pBroadphase = new btAxisSweep3(worldAabbMin, worldAabbMax, maxProxies);

// 求解器
btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver();

// 注册GImpact算法
btGImpactCollisionAlgorithm::registerAlgorithm(pDispatcher);

// 初始化碰撞世界
btCollisionWorld* pCollisionWorld = new btCollisionWorld(pDispatcher, pBroadphase, pCollisionConfig);

3. 碰撞形体

3.1 btCollisionShape

1. 用途

  • btCollisionShape 是 Bullet 中所有碰撞形状的基类。它定义了物体在物理世界中的几何形状,这是进行碰撞检测的基础。

2. 特点

  • 形状多样:支持多种类型的形状,包括球体(btSphereShape)、立方体(btBoxShape)、圆柱体(btCylinderShape)、锥体(btConeShape)和更复杂的网格形状(btConvexHullShapebtBvhTriangleMesh
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值