C++ 3D物理引擎库BulletPhysics基本使用

前言:最近在接触OpenGl和DX11的时候,顺便学习了Bullet这个3D物理引擎的基本使用,记录一下。

 

 

 

|BulletPhysics介绍

BulletPhysics是一个跨平台的开源物理引擎,也是三大主流3D物理引擎之一,支持三维碰撞检测、柔体动力学和刚体动力学,多用于游戏开发和电影制作中。(GTA5,荒野大嫖客也使用了这个物理引擎)

为了更容易使用物理引擎,我们必须掌握它里面的几个基本概念。

物理世界:

用来模拟各种刚体的运动。

物理世界有个重要的函数——stepSimulation模拟步长函数,它通过传入的时间大小(float deltaTime),

来给世界里所有刚体进行一段时间(deltaTime长的时间)流逝的模拟。

刚体:

参与物理模拟的物体,例如一个球体,一个长方体,或者由多个复杂形状组合成的物体。

包含形状,摩擦系数,阻尼系数,弹性系数等属性。

基本使用原理:

每帧调用物理世界的模拟步长函数,来使物理世界中模拟时间流逝。

每次模拟之后,每个刚体都会更新自己的位置及旋转角度。

然后在模拟之后根据每个刚体更新后的相应位置及旋转角度,来用图形表现方法来绘制表现。

1、下载Bullet库,编译,配置项目

可参考该篇博客: http://www.cnblogs.com/liangliangh/p/3575590.html

|2、初始化物理世界

Broadphase(粗测阶段):

我们需要提前设置好世界大小和最大刚体数等参数传递用于构造BroadPhase。

BroadPhase的作用是在碰撞检测的初测阶段,通过基于重叠包围盒的加速结构的三维扫描和裁剪,快速并粗略筛选掉许多不会发生碰撞的对象对。

tip:另外还有NarrowPhase(细测阶段),只不过它不需要参数初始化,它负责碰撞检测的最后一步测试,也是详细的碰撞测试,比较耗费性能,所以才需要一个粗测阶段粗略过滤掉大部分不会碰撞的形状对。

 

CollisionConfiguration(碰撞配置):

则是规定哪些物体能和哪些物体碰撞的设置(例如一些多人射击游戏中,队友之间不会发生碰撞,但是和其他物体都能发生碰撞)

默认值是均能互相发生碰撞,本文使用了默认值。

 

创建并初始化物理世界代码:

    //设置世界的空间大小,限定刚体运动的空间范围
    btVector3 worldAabbMin(-10000, -10000, -10000);
    btVector3 worldAabbMax(10000, 10000, 10000);
    //设置最大刚体数
    int maxProxies = 1024;
    //利用以上配置创建粗测阶段所需参数
    btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin, worldAabbMax, maxProxies);

    //创建好碰撞配置
    btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
    btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);

    //
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值