- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Box2D v2.0.1 用户手册
原文:Box2D v2.0.2 User Manual
译者:Aman JIANG(江超宇) ,翻译信息。
1. 导言
1.1 关于
Box2D 是一个用于游戏的 2D 刚体仿真库。程序员可以在他们的游戏里使用它,它可以使物体的运动
更加可信,让世界看起来更具交互性。从游戏的视角来看,物理引擎就是一个程序性动画 (procedural
animation)的系统,而不是由动画师去移动你的物体。你可以让牛顿来做导演。
Box2D 是用可移植的 C++ 来写成的。引擎中定义的大部分类型都有 b2 前缀,希望这能消除它和你
游戏引擎之间的名字冲突。
1.2 必备条件
在此,我假定你已经熟悉了基本的物理学概念,例如质量,力,扭矩和冲量。如果没有,请先考虑读
一下 Chris Hecker 和 David Baraff (google 这些名字)的那些教程,你不需要了解得非常细致,但他们
可以使你很好地了解一些基本概念,以便你使用 Box2D。
Wikipedia 也是一个极好的物理和数学知识的获取源,在某些方面它可能比 google 更有用,因为它
的内容经过了精心的整理。
这不是必要的,但如果你好奇 Box2D 内部是如何工作的,你可以看 这些文档。
因为 Box2D 是使用 C++ 写成的,所以你应该具备 C++ 程序设计的经验, Box2D 不应该成为你的
第一个 C++ 程序项目。你应该已经能熟练地编译,链接和调试了。
1.3 核心概念
Box2D 中有一些基本的对象,这里我们先做一个简要的定义,在随后的文档里会有更详细的描述。
刚体(rigid body)
一块十分坚硬的物质,它上面的任何两点之间的距离都是完全不变的。它们就像钻石那样坚硬。在后
面的讨论中,我们用物体 (body)来代替刚体。
形状(shape)
一块严格依附于物体(body)的 2D 碰撞几何结构(collision geometry)。形状具有摩擦(friction)和恢
复(restitution)的材料性质。
约束(constraint)
一个约束(constraint)就是消除物体 自由度的物理连接。在 2D 中,一个物体有 3 个 自由度。如果我
们把一个物体钉在墙上(像摆 那样) ,那我们就把它约束到了墙上。这样,此物体就只能绕着这个钉子旋
转 ,所以这个约束消除了它 2 个 自由度。
接触约束(contact constraint)
一个防止刚体穿透 ,以及用于模拟摩擦(friction)和恢复(restitution)的特殊约束。你永远都不必创建
一个接触约束 ,它们会自动被 Box2D 创建。
关节(joint)
它是一种用于把两个或多个物体固定到一起的约束。 Box2D 支持的关节类型有:旋转 ,棱柱 ,距离等
等。关节可以支持限制(limits)和马达(motors)。
关节限制(joint limit)
一个关节限制(joint limit)限定了一个关节的运动范围。例如人类的胳膊肘只能做某一范围角度的运
动。
关节马达(joint motor)
一个关节马达能依照关节的自由度来驱动所连接的物体。例如,你可以使用一个马达来驱动一个肘的
旋转。
世界(world)
一个物理世界就是物体,形状和约束相互作用的集合。 Box2D 支持创建多个世界,但这通常是不必要
的。
2. Hello Box2D
2.1 创建一个世界
每个 Box2D 程序都将从一个世界对象(world object)的创建开始。这是一个管理内存 ,对象和模拟的
中心。
要创建一个世界对象,我们首先需要定义一个世界的包围盒。 Box2D 使用包围盒来加速碰撞检测。尺
寸并不关键 ,但合适的尺寸有助于性能。这个包围盒过大总比过小好。
b2AABB worldAABB;
worldAABB.lowerBound.Set(-100.0f, -100.0f);
worldAABB.upperBound.Set(100.0f, 100.0f);
• 注意 :worldAABB 应该永远比物体所在的区域要大,让 worldAABB 更大总比太小要好。如果一
个物体到达了 worldAABB 的边界,它就会被冻结并停止模拟。
接下来我们定义重力矢量。是的,你可以使重力朝向侧面(或者你只好转动你的显示器)。并且 ,我们
告诉世界(world)当物体停止移动时允许物体休眠。一个休眠中的
文档评论(0)