Hello World in ODE

本文介绍了使用ODE物理引擎实现一个简单的自由落体模拟程序。通过C++代码演示了如何创建世界、物体,并设置其属性来模拟小球下落的过程。此外,文章还提及了ODE自带的简易图形引擎及其不被使用的理由。

ode用的是BSD license, 很亲善, 并且库本身质量还不错, 可以作为正经的用途.

并且API是c风格的,可以很轻松的用于其他语言.

作为熟悉引擎, 先写个最简单的小球下落作为HelloWorld.

结果就像这样:

Mac-mini:ode $ ./a.out
0	0	10
1	0	0	0
0	1	0	0
0	0	1	0

0	0	9.9755
1	0	0	0
0	1	0	0
0	0	1	0

0	0	9.9265
1	0	0	0
0	1	0	0
0	0	1	0

0	0	9.853
1	0	0	0
0	1	0	0
0	0	1	0

0	0	9.755
1	0	0	0
0	1	0	0
0	0	1	0

0	0	9.6325
1	0	0	0
0	1	0	0
0	0	1	0

0	0	9.4855
1	0	0	0
0	1	0	0
0	0	1	0

0	0	9.314
1	0	0	0
0	1	0	0
0	0	1	0

0	0	9.118
1	0	0	0
0	1	0	0
0	0	1	0

0	0	8.8975
1	0	0	0
0	1	0	0
0	0	1	0

0	0	8.6525
1	0	0	0
0	1	0	0
0	0	1	0

0	0	8.383
1	0	0	0
0	1	0	0
0	0	1	0

0	0	8.089
1	0	0	0
0	1	0	0
0	0	1	0

0	0	7.7705
1	0	0	0
0	1	0	0
0	0	1	0

虽然ode本身带了一个非常简单的图像引擎,不过我不打算用,

毕竟描画还是自己折腾openGL比较灵活高效,更何况已经写了objloader,至于要读模型文件,旋转平移就行了.


下面是源代码, 不知道为什么, 语法高亮失效了, 难道是我设置的问题?

Mac-mini:ode$ cat basic.d
import std.stdio, ode;

static dWorldID world;
dBodyID ball;
const dReal radius = .2;
const dReal mass = 1.;

static void simLoop(){
	dReal* pos;
	dReal* r;
	pos = dBodyGetPosition(ball);
	r = dBodyGetRotation(ball);

	writeln(*pos,"\t",*(pos+1),"\t",*(pos+2));
	foreach(i;0..3*4) write(*(r+i),((i+1)%4==0)?"\n":"\t");
	writeln();
	dWorldStep(world, 0.05);
}

void main(){
	dInitODE();
	world = dWorldCreate();
	dWorldSetGravity(world, 0, 0, -9.8);
	ball = dBodyCreate(world);
	dMass m1;
	dMassSetZero(&m1);
	dMassSetSphereTotal(&m1, mass, radius);
	dBodySetMass(ball, &m1);
	dBodySetPosition(ball, 0,0,10);
	foreach(i;1..40) simLoop();
	dWorldDestroy(world);
	dCloseODE();
}


连接的时候注意用g++才行,因为库用到了c++.其他的都交给pkg-config吧

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值