VS2017 64位 osg+osgworks+bullet3+osgbullet编译教程(超详细、附生成的库(在文末尾))
最近因为工作需要编译了osgbullet,网上教程比较乱,没有一个系统的编译说明,我结合网上资料,进行编译,梳理出来本篇教程,超详细的。
下载源码:
1、OSG源码(OpenSceneGraph-3.4.1 release 稳定版本)。
2、OSG第三方依赖库(3rdParty_VS2017_v141_x64_V11)。
注:第三方库版本必须与Visual Studio版本相对应,本文所用只适用于Visual Studio2017 x64,,平台工具集版本为v141的情况下。
3、数据包(OpenSceneGraph-3.4 standard dataset)。
4、osgworks下载地址:https://github.com/mccdo/osgworks
5、bullet3下载地址:https://github.com/bulletphysics/bullet3
6、osgbullet下载地址:https://github.com/mccdo/osgbullet
编译依赖关系如下osgbullet依赖osgworks和bullet3,osgwords依赖osg,所以编译顺序为osg->osgworks->bullet3->osgbullet
一、编译osg
编译osg参考:路人甲JIA的这篇,按照步骤操作就行了,没有什么需要特别注意的地方:
https://blog.csdn.net/u013719339/article/details/78415685
二、编译osgworks
1、创建目录osgworks作为根目录,目录下创建三个文件夹osgworks-source、buildx64、install分别为源码目录,cmake生成工程目录,install安装目录;
2、打开cmake-gui,源码目录选择osgworks-source目录,生成目录选择buildx64,,勾选Advanced
3、点击Configure,弹出下图配置窗口,选择vs2017,平台选择x64,点Finished
4、等待结束,下边状态显示Configuring done。
5、修改CMAKE_INSTALL_PREFIX的值为步骤1中install路径。点击Generate按钮。
6、等待生成结束,状态显示Generating done,即结束CMAKE,可以关掉cmake-gui了。
7、找到osgworks/buildx64目录,使用vs2017打开ALL_BUILD.vcxproj
8、点击菜单栏》生成》批生成,勾选ALL_BUILD debug和ALL_BUILD Release,然后点生成按钮;
9、注意:此过程中报错:mgv.mergeGeode(geode)
解决方法:
在报错的文件/osgwTools/GeometryModifier.cpp中添加头文件#include <osg/Group>
将mgv.mergeGeode(geode);修改为mgv.mergeGroup(*geode.asGroup());
10、生成结束,再次点击菜单栏》生成》批生成,取消勾选ALL_BUILD debug和ALL_BUILD Release,勾选INSTALL Debug和INSTALL Release,然后点生成按钮。
该过程很快,该步骤是将生成的bin文件、lib文件、share文件和include文件安装到步骤(1)中我们创建的install目录下
至此,osgworks的编译工作结束。
三、编译bullet3
1、创建目录bullet3文件件下创建三个文件夹bullet3-2.89、buildx64、install分别为源码目录,cmake生成工程目录,install安装目录;
2、打开cmake-gui,源码目录选择bullet3/bullet3-2.89,构建目录选择bullet3/buildx64,勾选Advanced;
3、点击Configure,弹出下图配置窗口,选择vs2017,平台选择x64,点Finished
4、等待结束,下边状态显示Configuring done。
5、修改CMAKE_INSTALL_PREFIX的值为(1)中install路径。点击Generate按钮。
6、等待生成结束,状态显示Generating done,即结束CMAKE,可以关掉cmake-gui了。
7、找到bullet3/buildx64目录,使用vs2017打开ALL_BUILD.vcxproj
8、在项目树上,选择一个项目上,右键》属性》C/C++》代码生成》运行库:debug版本修改为:多线程调试 DLL (/MDd);Release版本修改为:多线程DLL(/MD)(不做此处修改的话,之后的编译会有各种冲突,因为之后的工程全是MDd的)。将所有项目都做此种修改。
9、点击菜单栏》生成》批生成,勾选ALL_BUILD debug和ALL_BUILD Release,然后点生成按钮??
生成过程可能需要1个小时左右
10、再次点击菜单栏》生成》批生成,取消勾选ALL_BUILD debug和ALL_BUILD Release,勾选INSTALL Debug和INSTALL Release,然后点生成按钮。
该过程很快,该步骤是将生成的lib文件和include文件安装到步骤(1)中我们创建的install目录下
至此,结束bullet3的编译。
四、编译osgbullet
1、首先创建工作目录,osgbullet文件夹作为根目录,创建三个文件夹:osgbullet-master、buildx64、insall,分别为源码目录、生成目录、安装目录;
2、打开cmake-gui,选择源码目录选择步骤1中osgbullet/osgbullet-master,构建目录选择步骤1中osgbullet/buildx64
3、点击Configure,弹出下图配置窗口,选择vs2017,平台选择x64,点Finished
4、本次生成会报错,需要手动修改以下内容:
(1)手动配置osgWorks_DIR路径为F:/埃斯顿/osgworks/install/lib
(2)配置bullet路径(如下图)
修改之后再次点击Configure。
5、等待结束,下边状态显示Configuring done。
6、修改CMAKE_INSTALL_PREFIX的值为(1)中install路径。点击Generate按钮
7、等待生成结束,状态显示Generating done,即结束CMAKE,可以关掉cmake-gui了。
8、找到bullet3/buildx64目录,使用vs2017打开ALL_BUILD.vcxproj
9、点击菜单栏》生成》批生成,勾选ALL_BUILD debug和ALL_BUILD Release,然后点生成按钮
10、此过程会有报错:TriangleFunctor(293): error C2660: “osgbCollision::ComputeTriMeshFunc::operator ()”: 函数不接受 3 个参数
解决:在所有报错的this->operator()开头的语句末尾增加一个参数false
例如:
this->operator()(*(vptr),*(vptr+1),*(vptr+2));
改为:this->operator()(*(vptr),*(vptr+1),*(vptr+2),false);
11、生成结束,再次点击菜单栏》生成》批生成,取消勾选ALL_BUILD debug和ALL_BUILD Release,勾选INSTALL Debug和INSTALL Release,然后点生成按钮。
该过程很快,该步骤是将生成的bin文件、lib文件、share文件和include文件安装到步骤(1)中我们创建的install目录下
至此,结束osgbullet的编译。
五、合并生成的库
创建physicalEngine文件夹,将步骤一、二、三、四的install目录中文件全部拷贝到physicalEngine文件中。
做好这些好,下次要用时你只要将physicalEngine下的include和lib两个文件包含进来,就可以把所有要用的库文件都包含进去了,然后添加依赖项,最后把这些dll拷贝到工程目录下。这样就可以运行了。
感谢:主要参考
1、编译OSG WIN10系统下OSG+VS2017编译及运行
https://blog.csdn.net/u013719339/article/details/78415685
2、给osg配置bullet物理引擎
https://blog.csdn.net/lh1162810317/article/details/17475297
3、bullet安装之——windows下的安装与VS开发
https://blog.csdn.net/m0_43436602/article/details/104630520
4、Bullet、osgWorks、osgBullet编译及配置(适用于最新的OSG
https://www.dazhuanlan.com/2019/12/27/5e0556c22585e/
我编译好的库:
VS版本:VS2017 64位
osg版本:3.6
bullet版本:bullet3-2.89
osgworks和osgbullet都是最新版
下载链接:https://download.csdn.net/download/weixin_42962516/13720558