bulletphysics初识
来源:互联网 发布:数据迁移工具在哪 编辑:程序博客网 时间:2024/06/05 12:33
第一步,当然是搜索bulletphysics,经过筛选,会得到如下有用信息:
百度百科:开源物理引擎一堆套话,忽略不计;
Bullet官方:http://bulletphysics.org/wordpress/ balabala 挑选有用的。左上角特别小的icon
第二步,当然是Download。选择尽量比较新的版本,当然如果有特殊需求,选择自己需要的版本即可。
这个是我下载的版本。
打开看看list:
自己觉得英文比较好的话,就可以开始看Bullet_User_Manual.pdf。
目录简单介绍:
Demos 演示例子。
Extras 兼容库
Glut 界面渲染库
Lib 暂时是空的
Msvc 各种显卡和VS版本的项目文件
Src 源码
UniteTests 测试用例子
这个版本是已经编译好的Window版本。
接着进入
Msvc 目录选择自己合适的项目打开,
因为我用的是VS2010,所以选择进入该文件夹,打开解决方案.sln. 即可进入学习。
当然还有获得代码的SVN checkout途径:http://bullet.googlecode.com/svn/trunk (this is read only)
此版本需要配合cmake,编译使用,checkout完毕以后,
需要安装cmake
详细参见 http://bulletphysics.org/mediawiki-1.5.8/index.php/Installation
图文教程 http://bulletphysics.org/mediawiki-1.5.8/index.php/Creating_a_project_from_scratch
Cmake 图标
在线文档:http://bulletphysics.com/Bullet/BulletFull/index.html
国人写的入门教程 :http://blog.csdn.net/vagrxie/article/details/5952310
正题:
BulletPhysics Demos
App_BasicDemo
1.入口函数,不解释。
int main(int argc,char** argv)
{
BasicDemo ccdDemo; 建立了一个类
ccdDemo.initPhysics();初始化
ccdDemo.getDynamicsWorld()->setDebugDrawer(&sDebugDraw);
#ifdef CHECK_MEMORY_LEAKS
ccdDemo.exitPhysics();
#else
return glutmain(argc, argv,1024,600,"Bullet Physics Demo. http://bulletphysics.org",&ccdDemo);
//gultmain 函数 界面入口;注册回调,按键响应等功能
#endif
//default glut doesn't return from mainloop
return 0;
}
接着来看 BasicDemo.h
#define PlatformDemoApplication GlutDemoApplication
class BasicDemo : public PlatformDemoApplication
{
BasicDemo(){}
virtual ~BasicDemo(){exitPhysics();}
//万恶的少年,你发现了,框架函数
voidinitPhysics();
voidexitPhysics();
virtual void clientMoveAndDisplay();
virtual void displayCallback();
virtual voidclientResetScene();
//所有demo的基类函数
static DemoApplication* Create()
{
BasicDemo* demo = new BasicDemo;
demo->myinit();
demo->initPhysics();
return demo;
}
}
所以当你需要了解这个流程的时候 请参看DemoApplication类。
接下来,我们来看BasicDemo的流程。
首先是 initPhysics()
1.纹理和阴影以及镜头初始化(别问为什么!这是规则,就这样)
setTexturing(true);
setShadows(true);
setCameraDistance(btScalar(SCALING*50.));
2.balabala 后面的每行解释参看英文注释,跳过simida
3. 下面是:
m_dynamicsWorld = new btDiscreteDynamicsWorld(
m_dynamicsWorld->setGravity(btVector3(0,-10,0));
模拟世界的建立,模拟重力的设定。
4. 下面是:
//create a few basic rigid bodies 创建基本元素。
创建元素分两种方法,一种是例子中的code描述;
另一种是DemoApplication::localCreateRigidBody
5. 接着看完函数以后,我们在每个函数入口打个断点。运行,调试。
6. 对了 就是这个
clientMoveAndDisplay() 主循环回调函数(Loooop())。这个函数是注册在GultMain函数里的。
Tips; 某大牛说 大概看看DemoApplication这个基类和GlutDemoApplication知道必须要实现的两个纯虚函数是
virtual void initPhysics() = 0;
virtual void clientMoveAndDisplay() = 0;
看BasicDemo的实现后,知道还需要实现displayCallback这个现实回调,基本上就没有其他东西了,理解起来也还算容易。
原来的程序有些代码重复,其实只要下列代码就够了:(一般的程序也不需要修改)
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();
}
好了框架大致讲到这里,接着我们来继续往后走,自己写一个小例子:
巴拉巴拉巴拉
建项目,Win32Console Project (如果是需要独立接口和插件,请建立DLL,后面讲)
模仿建立一个Demo类,实现接口函数
Main函数 copy下例子基本一样了。(参见示例)
这里主要讲一下设置。
第一步引入项目;
第二步设置库路径:
Debug Information Format 也要注意下哈。
第三步LINKER中引用GLUT库
第四步引入reference
大功告成。截图不贴。
原文参考:http://www.showcoor.com/a/jisuanji/biancheng/C__/2012/0918/69.html
Click
- bulletphysics初识
- BulletPhysics,RigidBody and soft body Interface <1>
- BulletPhysics,RigidBody and soft body Interface <2>
- 初识
- 初识
- 初识
- js初识,博客初识
- TableLayout初识初识
- 初识Blog
- 初识CAA
- 初识JVM
- 初识SmartClient
- 初识HTC
- 初识JSTL
- JMX初识
- 初识Linux
- 初识流媒体
- 初识BREW
- clone
- 链式存储结构(栈)
- KMP算法详解
- 如何参考x264,使用libx264编码实时的摄像头图像帧
- 思考:谁主宰我们的思维
- bulletphysics初识
- 顺序存储结构(栈)
- Java多线程(四)、线程池
- 在SQL Server中怎么得到全为零的GUID(uniqueidentifier)
- 二级联动,数据库查询,动态写入
- 学生信息管理系统设计
- 链式存储结构(线性表)
- Flex开发者需要知道的10件事
- 高性能网络服务器简介