box2d物理引擎学习

本来打算先学习chipmuk这个物理引擎,但是找到的资料比较少,Box2d应用比较广泛,box2d是c++写的,也有jbox2d这样更有利于学习

一:

1:首先下载box2d的源码,编译运行一下。

   下载cmake编译。编译的方法都在源代码项目里面有说明。(我在mac环境下编译的)

 

2:找到一本介绍box2d的书籍,结合源代码学习。

 本来想用source insight阅读的。但是好像mac上没有这软件,所以就把这工程拷到xcode里面学习了。

 

 

二:box2d 的一些基础

1:作为物理引擎当然,得了解一些物理知识。比如力,冲量,扭拒等等

2:box2d的基本概念

 刚体(rigid body):一块十分坚硬的物质,它上面的任何两点之间的距离都是完全不变的。它们就像钻石那样坚硬。在后 面的讨论中,我们用物体(body)来代替刚体。

 

形状(shape)

 一块严格依附于物体(body)的 2D 碰撞几何结构(collision geometry)。形状具有摩擦(friction)和恢 复(restitution)的材料性质。

 

约束(constraint)

一个约束(constraint)就是消除物体自由度的物理连接

 

关节(joint)
它是一种用于把两个或多个物体固定到一起的约束。Box2D 支持的关节类型有:旋转,棱柱,距离等 等。关节可以支持限制(limits)和马达(motors)。
关节限制(joint limit)
一个关节限制(joint limit)限定了一个关节的运动范围。例如人类的胳膊肘只能做某一范围角度的运 动。
关节马达(joint motor)
一个关节马达能依照关节的自由度来驱动所连接的物体。例如,你可以使用一个马达来驱动一个肘的 旋转。
世界(world)
一个物理世界就是物体,形状和约束相互作用的集合。Box2D 支持创建多个世界,但这通常是不必要 的。

 

 

 

三:基本步骤

1:先建立包围盒

 b2AABB worldAABB;

worldAABB.lowerBound.Set(-100.0f,-100.0f);

worldAABB.upperBound.Set(100.0f,100.0f);

 

定义重力矢量

b2Vec2 gravity(0.0f,-10.0f);

bool doSleep=true;

 

建立世界对象

b2World world(worldAABB,gravity,doSleep);

 

定义地面

b2BodyDef groundBodyDef;

groundBodyDef.poition.Set(0.0f,-10.0f);

 

 

b2Body* ground=world.CreateBody(&groundBodyDef);

 

b2PolygonDef groundShapeDef;

groundShapeDef.SetAsBox(50.0f,10.0f);

 

groundBody->CreateShape(&groundShapeDef);

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值