Open Dynamics Engine for Linux 安装笔记
下载
在Bitbucket上可以下载到最新的版本(截止目前为0.14版)
或者直接用wget下载
wget "https://bitbucket.org/odedevs/ode/downloads/ode-0.14.tar.gz"
编译
假设安装到/usr下
# 解压
tar xf ode-0.14.tar.gz
cd ode-0.14
# 依赖安装
sudo apt install automake -y
# 配置
./bootstrap
./configure --prefix=/usr --enable-double-precision --enable-static=PKGS --with-drawstuff=X11 --with-trimesh=opcode --enable-demos --enable-libccd
# --prefix=/usr 安装到/usr下,不加这一项则默认安装到/usr/local下
# --enable-double-precision 启用双精度浮点数
# --enable-static=PKGS 生成静态链接库
# --with-drawstuff=X11 启用极简图形库,基于X11
# --enable-demos 例子啦╮(╯▽╰)╭
# --enable-libccd 碰撞检测库
make # 编译啦╮(╯_╰)╭
安装
sudo make install # 安装啦
echo '╮(╯▽╰)╭'
注意,由于drawstuff没有默认安装_(:3」∠)_
,因此需要手动安装。
sudo mkdir /usr/include/drawstuff
sudo cp ./include/drawstuff/drawstuff.h ./include/drawstuff/version.h /usr/include/drawstuff
sudo cp ./drawstuff/src/.lib/libdrawstuff.a ./drawstuff/src/.lib/libdrawstuff.la /usr/lib
# 更新库缓存
sudo ldconfig
使用库
drawstuff在链接时需要同时链接X11、GL、GLU、m这些库,若使用cmake,可以添加这一句:
target_link_libraries(target ode drawstuff X11 GLU GL m)
另外,drawstuff需要贴图,有自带的,位于<ode-0.14>/drawstuff/textures/
下。需要自行复制到工程目录下。
测试代码
来源:HOWTO simple bouncing sphere - ODE Wiki
#include <ode/ode.h>
#include <drawstuff/drawstuff.h>
// dynamics and collision objects
static dWorldID world;
static dSpaceID space;
static dBodyID body;
static dGeomID geom;
static dMass m;
static dJointGroupID contactgroup;
// this is called by dSpaceCollide when two objects in space are
// potentially colliding.
static void nearCallback (void *data, dGeomID o1, dGeomID o2)
{
dBodyID b1 = dGeomGetBody(o1);
dBodyID b2 = dGeomGetBody(o2);
dContact contact;
contact.surface.mode = dContactBounce | dContactSoftCFM;
// friction parameter
contact.surface.mu = dInfinity;
// bounce is the amount of "bouncyness".
contact.surface.bounce = 0.9;
// bounce_vel is the minimum incoming velocity to cause a bounce
contact.surface.bounce_vel = 0.1;
// constraint force mixing parameter
contact.surface.soft_cfm = 0.001;
if (int numc = dCollide (o1,o2,1,&contact.geom,sizeof(dContact))) {
dJointID c = dJointCreateContact (world,contactgroup,&contact);
dJointAttach (c,b1,b2);
}
}
// start simulation - set viewpoint
static void start()
{
static float xyz[3] = {2.0f,-2.0f,1.7600f};
static float hpr[3] = {140.000f,-17.0000f,0.0000f};
dsSetViewpoint (xyz,hpr);
}
// simulation loop
static void simLoop (int pause)
{
const dReal *pos;
const dReal *R;
// find collisions and add contact joints
dSpaceCollide (space,0,&nearCallback);
// step the simulation
dWorldQuickStep (world,0.01);
// remove all contact joints
dJointGroupEmpty (contactgroup);
// redraw sphere at new location
pos = dGeomGetPosition (geom);
R = dGeomGetRotation (geom);
dsDrawSphereD( pos, R, dGeomSphereGetRadius (geom));
}
int main (int argc, char **argv)
{
// setup pointers to drawstuff callback functions
dsFunctions fn;
fn.version = DS_VERSION;
fn.start = &start;
fn.step = &simLoop;
fn.stop = 0;
fn.command = 0;
fn.path_to_textures = "../textures"; // 注意贴图路径!
dInitODE ();
// create world
world = dWorldCreate ();
space = dHashSpaceCreate (0);
dWorldSetGravity (world,0,0,-9.8);
dWorldSetCFM (world,1e-5);
dCreatePlane (space,0,0,1,0);
contactgroup = dJointGroupCreate (0);
// create object
body = dBodyCreate (world);
geom = dCreateSphere (space,0.5);
dMassSetSphere (&m,1,0.5);
dBodySetMass (body,&m);
dGeomSetBody (geom,body);
// set initial position
dBodySetPosition (body,0,0,5);
// run simulation
dsSimulationLoop (argc,argv,320,240,&fn);
// clean up
dJointGroupDestroy (contactgroup);
dSpaceDestroy (space);
dWorldDestroy (world);
dCloseODE();
return 0;
}
References
[1] ODE Wiki, Manual: Install and Use,http://ode-wiki.org/wiki/index.php?title=Manual:_Install_and_Use, 2013-05-05
[2] ODE Wiki, HOWTO simple bouncing sphere, http://ode-wiki.org/wiki/index.php?title=HOWTO_simple_bouncing_sphere, 2012-01-08
[3] 小胖, 在 Ubuntu 14.04 下安装 Open Dynamics Engine (ODE) 0.14, http://czhou.cc/2016/04/29/install-ode-on-ubuntu/, 2016-04-29
Open Dynamics Engine for Linux 安装笔记的更多相关文章
- Gentoo(贱兔)Linux安装笔记
网上对于Gentoo Linux 的教程少之又少,所以这里我将自己的安装记录贴出来 希望对正在研究Gentoo 的小伙伴们有帮助! 1.确认连接到互联网,使用net-setup工具配置网络 roo ...
- 开始使用gentoo linux——gentoo安装笔记(上)
gentoo linux安装笔记(上) 家里有一台破旧的富士通笔记本,08年至今质量依然杠杠的,但是性能已经不能和现代超极本同日而语,装上了ubuntu更是不敢恭维,别提gnome和kde的linux ...
- 开始使用gentoo linux——gentoo安装笔记(下)
gentoo安装笔记(下) 上一章,已经对操作系统安装做了充分准备,并且已经从livecd(u盘系统)切换进入了gentoo安装环境中. 不过现在才是真正的开始!打起精神!这可不是在装ubuntu! ...
- Linux:Gentoo系统的安装笔记(三)
这期笔记将是gentoo安装的最后一期了,虽然已经配置内核了,但是也要完成剩下的安装步骤,这离安装完成已经不远了,继续加油!!! 如果中断了安装,请看第二期的笔记进行恢复安装,但请重新编译一次内核,否 ...
- Linux:Gentoo系统的安装笔记(一)
这次我选择安装Gentoo,用来做我学习的笔记.这次我是使用虚拟机安装Gentoo,一是方便操作,二是可以看着手册,一边看一边操作,严格按照手册上的步骤执行,一般是不会出现问题的. 查看手册最好学会看 ...
- Linux 学习笔记 1 使用最小的系统,从分区安装系统开始
我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...
- [linux笔记]理清linux安装程序用到的(configure, make, make install)
我作为一名经常和linux打交道的程序员,每次在linux安装软件都祈求可以用——apt-get,yum,brew等应用程序管理器安装,有的时候事与愿违,你只能自己编译安装-wtf,说好的美丽世界呢? ...
- linux学习笔记2:linux 下java开发的软件安装
一.java ee开发环境的搭建 1.jdk的安装步骤 (1)首先必须要有安装文件,具体的可以去相关网站上下载,并制作iso文件 (2)将制作的iso文件挂载到linux系统上,并在虚拟机上将iso文 ...
- linux安装oracle笔记
linux安装oracle .增大swap空间,内存大于8G后swap跟内存同等大小即可 mkdir /home/swap cd /home/swap mkswap swapfile swapon s ...
随机推荐
- 用 Maven 做项目构建
转自:http://www.ibm.com/developerworks/cn/java/j-lo-maven/index.html 本文将介绍基于 Apache Maven 3 的项目构建的基本概念 ...
- php 获取图片、swf的尺寸大小
PHP获取图片大小函数. getimagesize() 能够得到图片及flash(swf)的大小. 语法 1 list($width, $height, $type, $attr) = getima ...
- 插入排序InsertionSort
/** * * @author Administrator * 功能:插入排序法 */ package com.test1; import java.util.Calendar; public cla ...
- 2、RenderScript的计算(2013.05.07)
一.官方文档翻译: Android Renderscript计算 参考网址: http://blog.csdn.net/fireofstar/article/details/7748143 http: ...
- S5PV210的IRAM应用
准备分析 IRAM的大小96k,其实前两个程序都在这里运行的,程序都小于16K.要实现的是从把IRAM从的前16k从IRAM的起始地址0xD0020000拷贝到0xD0024000 处,调用mai ...
- 存储过程系列之存储过程sql查询存储过程的使用
1.查询某个表被哪些存储过程(以下简称 SP)使用到 : select distinct object_name(id) from syscomments where id in (select ob ...
- 转载:CEO应向软件工程师学习的7个技能
软件工程师的哪些技能是值得CEO学习的?显然,软件工程师是逻辑的,高效的,注重细节的,有计划的,并且大多数CEO也是如此.但是,软件工程师还有一些更微妙,甚至是令人懊恼的品质,那么CEO是否可以从中学 ...
- usaco4.12Fence Rails(迭代加深)
为了这题还去学了下迭代加深 回来还是不会写 只好参考各大神的代码及题解了 二分枚举最大可以切的块数 然后就是各种分析及优化 USACO题解里写了7个优化.. 问题分析 抽象一下就可以发现,算法的本质是 ...
- .net web 点击链接在页面指定位置显示DIV的问题
做了一个网页,放了两个DataList ,一个显示科室,一个显示科室中的人员,由于科室太多,一屏显示不全,为了在页面刷新时记住上次浏览位置,所以给页面加了MaintainScrollPositionO ...
- -_-#【网站优化】AJAX
如何让搜索引擎抓取AJAX内容? Ajax 缓存: 两个重要的事实 使用 AJAX 事件触发 AJAX 请求.不要产生多次请求. 对 AJAX 请求使用 GET 方法 Use GET for AJAX ...