没有合适的资源?快使用搜索试试~ 我知道了~
首页Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)
Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)
5星 · 超过95%的资源 需积分: 49 175 下载量 121 浏览量
更新于2023-03-16
评论 1
收藏 398KB PDF 举报
Bullet据称为游戏世界占有率为第三的物理引擎,也是前几大引擎目前唯一能够找到的支持iPhone,开源,免费(Zlib协议,非常自由,且商业免费)的物理引擎,但是文档资料并不是很好,Demo虽然多,但是主要出于特性测试/展示的目的,会让初学者无从看起,一头雾水。我刚学习Bullet的时候困于没有好的文档及资料,非常没有头绪,折腾了很久,所以就发挥没有就创造的精神,写作及整理此文,(以整理资料为主,自己写 为辅)希望大家在学习Bullet的时候不要再像我开始一样没有头绪。因为我实在没有精力去完成一个包含Bullet方方面面的完全指南,所以本文只能是不完全版本,这个就请大家谅解了,但是期望能够真正的完成一个简单的由浅入深的教程,并提供尽量详尽的额外信息链接,只能说让初学者比看官方的WIKI和 Demo效果更好,大家有好的信息和资料而本文没有包含的,也请告诉我,我可以在新版中添加进来。因为我学习Bullet的时间也比较短,有不对的地方请高人指点。
资源详情
资源评论
资源推荐
write by 九天雁翎九天雁翎(JTianLing) -- blog.csdn.net/vagrxie
讨论新闻组及文件讨论新闻组及文件
前言前言
Bullet据称为游戏世界占有率为第三的物理引擎,也是前几大引擎目前唯一能够
找到的支持iPhone,开源,免费(Zlib协议,非常自由,且商业免费)的物理引擎,但
是文档资料并不是很好,Demo虽然多,但是主要出于特性测试/展示的目的,会让初学者
无从看起,一头雾水。我刚学习Bullet的时候困于没有好的文档及资料,非常没有头
绪,折腾了很久,所以就发挥没有就创造的精神,写作及整理此文,(以整理资料为主,
自己写 为辅)希望大家在学习Bullet的时候不要再像我开始一样没有头绪。因为我实
在没有精力去完成一个包含Bullet方方面面的完全引导,所以本文只能是不完全版本,
这个就请大家谅解了,但是期望能够真正的完成一个简单的由浅入深的教程,并提供尽量
详尽的额外信息链接,只能说让初学者比看官方的WIKI和Demo效果更好,大家有好的信
息和资料而本文没有包含的,也请告诉我,我可以在新版中添加进来。因为我学习
Bullet的时间也比较短,有不对的地方请高人指点。
前段时间简单的学习了一下Bullet,牵涉到图形部分的时候主要都是研究Bullet
与Ogre的结合,所以使用了OgreBullet这个Ogre的Addon,其实真正的学习当然还是
直接利用Bullet本身附带的简单的debug OpenGL绘制就好了。本文就完全以Bullet
本身的Debug功能来学习,虽然简陋,但是可以排除干扰,专注于bullet。也许除了本
文,会有个额外的文章,稍微研究下Ogre与Bullet的整合和分析一下OgreBullet的
源码。
Bullet介绍介绍
Bullet的主页。最新版本在这里下载。简单的中文介绍见百度百科。一些也许可
以促使你选择Bullet的小故事在以前的文章中有提及,参考这里的开头--为什么选择
Bullet。很遗憾的是前几天看到的一篇很详细的bullet中文介绍找不到了,将来也许
补上。
安装安装
Bullet作为一款开源物理引擎,你可以选择作者编译好的SDK,或者直接从源码编
译自己的版本(Windows版本自带VS工程)。得益于CMake,在其他平台从源码自己编
译也非常简单,参考这里。iPhone版本的话参考这里。想要更详细点的图文教程可以参
考Creating_a_project_from_scratch。
Hello World Application
在学习之前,没有接触过物理引擎的可以参考一下这个术语表。
这里有个较为详细的教程。也包含在Bullet本身的一个名叫 AppHelloWorld
的Demo中。(注释也很详细,但是和WIKI上的版本略有不同)可以大概的对Bullet有
个感觉。
其实Bullet与Ogre走的一条路线,为了灵活,增加了很多使用的复杂性。(真怀
念Box2D和Irrlicht的简单啊)其实即使希望通过strategy模式来增加灵活度,让用
户可以自由的选择各类算法和解决方案,但是我还是感觉首先提供默认解决方案,用户需
要不同方案的时候通过Set方式改变(甚至也可以new的时候修改)但是大牛们研究这些
东西那么透,总是会觉得这个世界上不存在默认方案。。。。。因为没有方案是最优的,
是适合大多数情况的,所以导致Bullet的HelloWorld程序源代码都已经超过100
行。。。。。。。。。。-_-!发了点牢骚。。。。。
通过HelloWorld程序,我们大概可以知道一些东西,比如建立一个Bullet物理
世界的步骤,比如Bullet的类以bt(变态-_-!)开头,比如Bullet与Box2D这样的2D
物理引擎一样,专注于数据的计算,本身没有图形输出,比如创建一个物理实体的时候也
有shape的概念,然后通过一个结构作为参数(BodyConstructionInfo)来创建真实
的物体,大概的熟悉一下就好,具体的细节还不懂,没有关系,一步一步来。
另外,建议趁这个机会,确定自己机器使用Bullet的环境,特别是Win32下,我
的使用方法是,利用BULLET_HOME环境变量指明Bullet安装的位置,BULLTE_LIBS指
明最后编译完的静态库的位置,工程中利用这两个环境变量来确定位置。(这种用法很适
合屏蔽各机器的环境不同)最后的Hello World工程见https://bullet-
sample.jtianling.googlecode.com/hg/中的Bullet-HelloWorld。
请确保该Hello World程序能够运行(无论是你自己的还是用我的)然后才继续
下面的内容。
让你坐在司机的位置上让你坐在司机的位置上
该怎么学习的问题,向来都是各执一词,有人认为该从最基础的学起,就像建房子
一样打好地基,有人会更加推崇自上而下的学习(Top-Down Approach),我属于后一
派,能先写有用的可以摸到的程序,然后一层一层的向下学习,这样会更加有趣味性,并
且学习曲线也会更加平缓,假如你是前一派,那么推荐你先看完Bullet的User
Manual,然后是Bullet所有的Tutorial Articles,然后再自己一个一个看Demo。
在Hello World的例子中你已经可以看到文本数据的输出,能够看到球/Box的落
下了,但是很明显太不直观了,得益于Bullet良好的debug输出支持,我们要先能直观
的通过图形看到球的落下!先坐在司机的位置上才能学会开车^^你也不至于被乏味的汽
车/交通理论闷死。
Bullet像Ogre一样,提供了一个DemoApplication类,方便我们学习,我们先
看看Bullet的DemoApplication是怎么样的。先看看Bullet自己提供的
AppBasicDemo这个Demo。忽略那些作者用#if 0关闭的内容和hashmap的测试内容,
看看DemoApplication的用法。
首先是BasicDemo类,从class BasicDemo : public
PlatformDemoApplication可以看到,DemoApplication是给你继承使用的,这里
的PlatformDemoApplication实际是GlutDemoApplication。(Win32那个作者
好像只是预留的)
怎么去实现这个类先放一边,看看整个类的使用:
GLDebugDrawer gDebugDrawer;
BasicDemo ccdDemo;
ccdDemo.initPhysics();
ccdDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer);
glutmain(argc, argv,640,480,"Bullet Physics Demo.
http://bulletphysics.com",&ccdDemo);
实际就这5句,很简单,构造debug,BasicDemo,调用initPhysics函数,设定
debug,调用glutmain这个函数,参数也一目了然。这里就不看了。看实现一个有用的
DemoApplication的过程。
大概看看DemoApplication这个基类和GlutDemoApplication知道必须要实现
的两个纯虚函数是
virtual void initPhysics() = 0;
virtual void clientMoveAndDisplay() = 0;
看BasicDemo的实现后,知道还需要实现displayCallback这个现实回调,基本上就
没有其他东西了,理解起来也还算容易。
initPhysics的部分,一看就知道,与HelloWorld中过程几乎一致,也就是实际构建
物理世界的过程。只是多了
setTexturing(true);
setShadows(true);
setCameraDistance(btScalar(SCALING*50.));
这三个与显示有关的东西(其实这些代码放到myinit中去也可以,毕竟与物理无关)
最后还多了个clientResetScene的调用,我们知道这个过程就好,具体函数的实现先
不管。
clientMoveAndDisplay和displayCallback部分
其实非常简单,几乎可以直接放到glutExampleApplication中去。(事实上不从灵
活性考虑,我觉得放到glutExampleApplication中更好)
原来的程序有些代码重复,其实只要下列代码就够了:(一般的程序也不需要修改)
void BasicDemo::clientMoveAndDisplay()
{
//simple dynamics world doesn't handle fixed-time-stepping
float ms = getDeltaTimeMicroseconds();
///step the simulation
if (m_dynamicsWorld)
{
m_dynamicsWorld->stepSimulation(ms / 1000000.f);
}
displayCallback();
}
void BasicDemo::displayCallback(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
renderme();
//optional but useful: debug drawing to detect problems
if (m_dynamicsWorld)
m_dynamicsWorld->debugDrawWorld();
glFlush();
swapBuffers();
}
运行该程序能够看到中间一个很多Box堆起来的大方块,点击鼠标右键还能发射一个方块
出去。
了解这个Demo以后,我们就可以直接来用Bullet构建我们自己的物理世界了,暂时不
用考虑图形的问题,甚至不用知道Bullet使用GLUT作为debug图形的输出,GLUI做界
面,都不用知道,只需要知道上面demoApplication的使用和在initPhysics函数中
完成构建物理世界的代码。另外,你愿意的话,也可以先看看exitPhysics的内容,用
于分配资源的释放,作为C++程序,一开始就关注资源的释放问题是个好习惯。虽然对于
我们这样简单的demo程序来说是无所谓的。
看过上面Demo后,也许你已经有些了解,也许你还是一头雾水,不管怎么样,Bullet
的Demo毕竟还是别人的东西,现在,从零开始,构建一个HelloWorld程序描述的世
界。先自己尝试一下!假如你成功了,那么直接跳过一下的内容,失败了,再回头了看
看,提醒你步骤:
1.继承DemoApplication,拷贝上面clientMoveAndDisplay和
displayCallback部分的代码,实现这两个函数。
2.在initPhysics函数中完成构建物理世界的代码。(构建过程参考HelloWorld)
3.Main中的使用代码:
GLDebugDrawer gDebugDrawer;
BasicDemo ccdDemo;
ccdDemo.initPhysics();
ccdDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer);
glutmain(argc, argv,640,480,"Bullet Physics Demo.
http://bulletphysics.com",&ccdDemo);
4.注意工程需要多包含$(BULLET_HOME)/Demos/OpenGL的头文件目录
和库:
$(BULLET_HOME)/Glut/glut32.lib
opengl32.lib
glu32.lib
剩余21页未读,继续阅读
九天雁翎
- 粉丝: 2661
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论14