Bullet学习之你的Hello World

 

写在所有的内容之前:如果您的E文足够强悍, bullet自带的Bullet User Manual一定要看一看【哪怕是根本不强悍其实也要如此】。当然了,直接硬生生的去看,对于没有接触过物理引擎的来说,确实是一件痛苦又自虐的事情。不过痛并快乐着嘛!相信在看完本文后,在看user manual的话,应该会更容易一些。学习如果更有目的性,自然会更舒畅。但是,user manual是一定要看的。而且不推荐看中文翻译。并非贬低那些辛苦的翻译者们,那些翻译的文档当然会对阅读英文文档有些帮助,但是毕竟原文中有很多翻译者无法精确表述的部分。

 

Bullet是一个很有意思的物理引擎。之所以有意思,是因为我不会,又听说相对简单。不管怎么样,这是一篇学习记录。初学乍练,也不会回答任何问题。只是想把bullet中最简单的创建过程记录下来。错误是必然的,可以说是肯定有的。毕竟是第一次接触。以后检验吧!

为了使得我们做出来的东西能看得见摸得着【事实上真的可以摸到哦,用鼠标】,Bullet提供了一些学习用的类:DemoApplication,是用glut实现的各种功能。包括窗口啦,键盘鼠标响应啦,甚至还有纹理与阴影光照。

所以说,我们可以首先创建一个自己的类,名字暂时叫做BasicDemo【因为人家给的例子叫这个名字…既然是人家的代码…就要保持高度的还原度嘛】,公有继承GlutDemoApplication类。

BasicDemo类中,首先定义一些私有成员以及公有成员函数,具体的请看如下【因为详细解释都在代码里面。这里还要多嘴一句,#pragma once这句一定要有啊,不然的话,嘿嘿。我写代码最喜欢重叠头文件…所以多亏了这句代码帮忙了】:


#pragma once

#include <OpenGL/GlutDemoApplication.h>

#include <LinearMath/btAlignedObjectArray.h>

#include <btBulletDynamicsCommon.h>

 

class BasicDemo :

       public GlutDemoApplication

{

private:

       //默认的碰撞设置。包含了一些内存设置,碰撞设置等等。用户可以自定义设置。

       btDefaultCollisionConfiguration* m_collisionConfiguration;

 

       //碰撞调度器。大概是设置碰撞方法的?暂时不是很理解。并行处理的需要参看其他。

       btCollisionDispatcher* m_dispatcher;

 

       //宽相,这个概念不明白。果然物理碰撞一点不懂啊……貌似是很多物理引擎都是用的概念

       //需要好好看看了。这里说btDbveBroadphase是很通用的broadphase

       btBroadphaseInterface* m_overlappingPairCache;

 

       //默认的约束solver【解算器?】并行的solver请参考其他。

       //时序脉冲约束solver,是不是线性的意思?

       btSequentialImpulseConstraintSolver* m_solver;

 

       //这个类提供一种分离刚体的模拟。模拟什么的。

       //其构造函数后面有一些参数,顺次是:

       //dispatcher碰撞调度器

       //宽相的那个概念的东西。不理解

       //设置约束solver

       //碰撞设置collisionconfiguration

       //但是这里不能自定义啊,自定义的出不来东西……

//    btDynamicsWorld* m_dynamicsWorld;

 

       //btAlignedObjectArray是一个类似于vector的存在

       //bullet讲究的是责任分配到家。谁分配内存,谁删除内存

       //只要有可能就要确保在刚体中复用碰撞形体。翻译的真不叫事。还不如看英文。

       //这个vector的作用大概主要是删除内存或者复用的时候很方便吧!

       btAlignedObjectArray<btCollisionShape*> m_collisionShapes;

 

public:

       BasicDemo(void){}

       ~BasicDemo(void){exitPhysics();}

 

       void initPhysics(); //物理设置

       void exitPhysics(); //撤销物理设置

 

       //这个应该是客户端的移动和显示函数。场景生成一定要调用这个函数

       //虚函数,就不解释了。重载于DemoApplication【貌似在这个类里面是纯虚的吧?】

       virtual void clientMoveA

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值