Bullet、osgWorks、osgBullet编译及配置(适用于最新的OSG-3.5.7,Bullet-2.87)

写在最前面

Bullet:物理引擎
osgWorks:一些osg工具
osgBullet:基于Bullet的osg物理引擎
本文介绍了Bullet、osgWorks及osgBullet编译过程中的一些坑,这两个库最后一次更新都在数年之前,因为年久失修与现有版本的Bullet间有诸多问题


系统环境

ubuntu: 16.04
CMake: 3.5.1
OSG: 3.5.7
Bullet: 2.87
osgWorks: 3.0
osgBullet: 3.0


Bullet编译

源代码:Github链接
下载最新的Release版本

1
2
3
4
5
mkdir build
cd build
cmake ..
make
make install 2>&1 | tee install.log

编译完成之后可以尝试一下Example\ExampleBrowser
这样基本就搞定了,其他编译方式premake什么的没尝试成功


osgWorks编译及配置

源代码下载、编译

源代码:Github链接

1
2
3
4
5
mkdir build
cd build
cmake ..
make
make install 2>&1 | tee install.log

过程中出现的问题及解决办法:

1.报错:mgv.mergeGeode(geode)

/src/osgwTools/GeometryModifier.cpp中添加头文件#include <osg/Group>
mgv.mergeGeode(geode);修改为mgv.mergeGroup(*geode.asGroup());

2.报错:void set(value_type a00, value_type a01, value_type a02,value_type a03,

/src/osgwTools/Orientation中将

1
2
3
4
5
6
7
8
9
10
11
12
osg::Vec3d Orientation::getYPR( const osg::Quat& q ) const
{
osg::Matrix m;
m.set( q );
return( getYPR( m ) );
}
void Orientation::getYPR( const osg::Quat& q, double& yaw, double& pitch, double& roll ) const
{
osg::Matrix m;
m.set( q );
getYPR( m, yaw, pitch, roll );
}

修改为

1
2
3
4
5
6
7
8
9
10
osg::Vec3d Orientation::getYPR( const osg::Quat& q ) const
{
osg::Matrix m(q);
return( getYPR( m ) );
}
void Orientation::getYPR( const osg::Quat& q, double& yaw, double& pitch, double& roll ) const
{
osg::Matrix m(q);
getYPR( m, yaw, pitch, roll );
}

环境变量配置

1
sudo gedit /etc/profile

在最末尾加上如下语句

1
2
#osgWorks
export osgWorks_DIR=/usr/local/lib

执行source /etc/profile或重启以更新系统环境变量


osgBullet编译及配置

源代码下载、编译

源代码:Github链接

1
2
3
4
5
mkdir build
cd build
cmake ..
make
make install 2>&1 | tee install.log

过程中出现的问题及解决办法:

1.报错:找不到osgWorks,CMake Error at CMakeModules/FindosgWorks.cmake:39 (MESSAGE)

指定osgWorks_DIRusr/local/lib

2.报错:无法生成动态链接库

1
/usr/bin/ld: /usr/local/lib/libBulletCollision.a(btBoxShape.o): relocation R_X86_64_32S against _ZNK21btConvexInternalShape9getMarginEv can not be used when making a shared object; recompile with -fPIC

BUILD_SHARED_LIBS取消勾选

3.报错:编译example/patch-lowlevel时报“未定义的引用”错误

/examples/CMakeLists.txt中的ADD_SUBDIRECTORY( patch-lowlevel )注释掉

4.报错:no matching function for call to ‘osg::TriangleFunctor::operator()(const Vec3&, const Vec3&, const Vec3&)’

/usr/local/include/osg/TriangleFunctor中以this->operator()开头的语句末尾增加一个参数false
例如:

1
this->operator()(*(vptr),*(vptr+1),*(vptr+2));

改为:

1
this->operator()(*(vptr),*(vptr+1),*(vptr+2),false);

环境变量配置

1
sudo gedit /etc/profile

在最末尾加上如下语句

1
2
#osgBullet
export osgBullet_DIR=/usr/local/lib

执行source /etc/profile或重启以更新系统环境变量


以上osgWorks及osgBullet编译安装完毕

参考

https://www.cnblogs.com/lyggqm/p/6733423.html