写在最前面
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
5mkdir build
cd build
cmake ..
make
make install 2>&1 | tee install.log
编译完成之后可以尝试一下Example\ExampleBrowser
这样基本就搞定了,其他编译方式premake什么的没尝试成功
osgWorks编译及配置
源代码下载、编译
源代码:Github链接1
2
3
4
5mkdir 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
12osg::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
10osg::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
5mkdir build
cd build
cmake ..
make
make install 2>&1 | tee install.log
过程中出现的问题及解决办法:
1.报错:找不到osgWorks,CMake Error at CMakeModules/FindosgWorks.cmake:39 (MESSAGE)
指定osgWorks_DIR
为usr/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编译安装完毕