说明:本手册翻译自ODE官方Manual
(一)安装
1.获取源代码
ODE目前只以源代码的形式发布,没有可以直接使用的预编译二进制安装包。因为可以通过很多种不用的方法,使用源码包为各种不同的特定项目进行相应的定制编译。正是基于这种考虑,曾近试图为Linux平台发行的二进制版本也就搁浅了。
直接下载稳定版 (*.tar.bz2---由SourceForge.net托管)
从Subversion获取源码包(同样由SourceForge.net托管)
不管你遇到什么样的问题,都可以在这个邮件列表中提问,或者查看相关提问。当然,如果你真的打算学习并应用ODE的话,就最好加入这个列表中。不管是比较初级的问题还是很有深度的探讨都可以在这里进行,不用担心没有人加入到你发起的讨论中。美中不足的一点是列表中的内容都是英文的,参与讨论并回答各种问题的也大多都是来自世界各地的使用ODE的朋友,毫无疑问只要你掌握了最基本的英文,就可以在这里结识很多优秀的“大人物”,不想提高自己的水平都难。
2.编译之前需要了解的
在你开始编译ODE之前,需要搞清楚ODE包含两部分的功能,其中一部分(“ODE”)是用于物理和碰撞检测的代码库,另一部分(“DrawStuff”)是对Win32/X11和OpenGL的封装,用于示例程序的演示,简而言之,就是用于将示例程序模拟所得的数据、结果以图形、图像的方式显示在屏幕上。你完全可以在自己的项目中抛弃它,用自己开发的程序替换。DrawStuff需要你使用的平台对OpenGL的支持(如果是Mac OS X平台的话则需要对X11的支持),ODE则不需要。你也完全没有必要为了使用ODE而去编译DrawStuff和那些示例程序(译者建议:如果是初学者,则最好先从示例程序学起,以熟悉ODE的运作)。
因为ODE是一款开源软件,ODE的开发团队为了让它能够支持不用的开发平台、环境以及工具,所以就提供了两种不用的编译方法。如果你倾向于是用./configure; make;make install(适用于*nix和Mac OS X平台)的编译安装方式,就请参考“使用Automaker编译”。如果你更倾向于使用IDE,就请参考更下面的“使用Premake编译”。
3.使用不同的编译方法
3.1 用Automake编译:
如果你是从Subversion下载的源码包,就需要通过运行autogen.sh脚本来引导自动化工具;如果是直接下载的稳定版就不需要,因为稳定版已经预先做过这一步了。
$ sh autogen.sh
注意:在这之前你需要预先安装最近版本的 autoconf(2.61)、automake(1.10)和libtool等工具软件。或许还会出现一些取决于所使用平台的"underquoted definition"警告,但都“无伤大雅”。
$ ./configure --help
对新手而言,最好运行上面的命令详细了解各种不同的选项。下面列出的是一些比较重要的:
- --disable-demos --without-x 让ODE可以在Mac OS X平台上编译
- --enable-double-presision 启动双精度计算
- --with-trimesh=opcode 使用OPCODE三角网格支持(默认)
- --with-trimesh=gimpact 使用GIMPACT三角网格支持
- --with-trimesh=none 不使用网格支持
- --enable-new-trimesh 启用可选的OPCODE三角网格支持(必须和--with-trimesh=opcode一起使用)
- --with-demo 使生成的工程包含示例程序和DrawStuff库
- --with-tests 使生成的工程包含自动化测试组件(如果你需要改动ODE,则建议添加此选项)
- --no-trimesh 去掉ODE对三角网格几何体碰撞的支持,以减少库文件的大小
(二)如何使用ODE
最好的理解该怎样使用ODE的方法是直接去查看ODE所提供的各种test/example程序,这些程序包含在 ode/ode/demo目录下。
按照如下步骤,创建新的ODE应用程序:
- 添加 ode/include 到你的include文件路径中
- #include <ode/ode.h>
- 在 ode/lib目录中查找适合的库查询路径和库名称,这些路径和文件的名称取决于你所使用的编译配置。例如:ode/lib/DebugSingleDLL 和 ode_singled.lib
- 添加一个适当的预编译符号dSINGLE(单精度)或者dDOUBLE(双精度),预编译符号的选择必须和你的ODE配置一致。如果二者没有一个被定义,便会默认采用单精度计算(根据译者经验,如果dSINGLE和dDOUBLE都没有被定义,确定无疑是会出错的),如果定义的精度模式与ODE的配置不一致,将会损坏所有的浮点型ODE输入\输出数据,可能引起各种无法想象的错误。
注意:当你使用ODE的dWorldStep函数时,对重物的仿真将会用栈(stack)去存储大量的临时数据,对于大一点的系统,有可能会用到好几MB大的栈。所以,如果你遇到未经说明的“内存不足”或“数据损坏”错误——尤其是在Windows平台上,那么你需要增加栈的容量或者使用dWorldQuickStep函数代替dWorldStep来避免这种错误的出现。