书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录
1、获取toxiclibs
- 你可以从以下网站下载和安装toxiclibs:
http://toxiclibs.org/
- 下载完成之后,你会发现toxiclibs有8个模块(也就是子目录),每个模块都有自己的作用。举个例子,在本章中我们只需要两个模块:verletphysics和toxiclibscore,但我还是建议你看看其他的模块。
- 在Processing的库目录中安装好toxiclibs之后
(http://wiki.processing.org/w/How_to_Install_a_Contributed_Library),
你就可以开始学习下面的例子了。
2、VerletPhysics的核心元素
-
我们花了很多时间学习Box2D中的核心元素:世界、物体、形状和关节。这让我们能更快理解toxiclibs,因为它的结构和Box2D类似。
3、toxiclibs中的向量
还记得我们之前学过的PVector类么?再想想Box2D中用到的向量,我们不得不把PVector中的各种概念都映射到Vec2类中。在这里,我们还需要做一遍这样的事,toxiclibs有自己的向量类,它的Vec2D类用于表示二维向量,Vec3D类用于表示三维向量。
-
让我们回顾PVector的基本数学运算,然后将它们映射成Vec2D的函数(方便起见,我们只考虑二维空间)
4、构建toxiclibs的物理世界
- 为了在示例程序中构建一个toxiclibs物理世界,我们首先需要导入库。
import toxi.physics2d.*; 导入库
import toxi.physics2d.behaviors.*;
import toxi.geom.*;
- 然后,我们需要用一个引用指向这个物理世界,也就是VerletPhysics或
者VerletPhysics2D对象(这取决于我们在二维空间还是三维空间工作)。
VerletPhysics2D physics;
void setup() {
physics = new VerletPhysics2D(); 创建toxiclibs Verlet物理世界
- 有了这个VerletPhysics对象之后,你可以为它设置一些参数。如果你想创建一个物体无法穿过的边界,可以这么做:
physics.setWorldBounds(new Rect(0,0,width,height));
- 除此之外,你还可以用GravityBehavior对象为这个物理世界添加重力。创建GravityBehavior对象时需要传入一个向量,这个向量用于表示重力的大小和方向。
physics.addBehavior(new GravityBehavior(new Vec2D(0,0.5)));
}
- 最后,为了让物理库进行运算并能移动内部的物体,我们还要调用update()函数。 由于每一帧都要执行一次运算,因此我们在draw()函数中调用它。
void draw() {
physics.update(); 该函数和Box2D的step()函数一样
}