[toc]html
1. 数据资源准备
在OSG官方网站上下载最新的源码包。通常要求下载三个包:node
- OpenSceneGraph-3.6.3,OSG的源码包。
- osg-3rdparty-cmake-master.zip,源码包依赖的第三方库。
- OpenSceneGraph-Data-3.4.0.zip,自带的一些数据资源文件。
同时还须要提早安装好VisualStudio环境,我这里用的VS2015;以及cmake,用来生成VS工程,我这里用的最新的cmake3.13.3。ios
2. 编译第三方库
在VS2015下官方并无提供编译好的包,只能本身编译,这一步若是有已经编译好的第三方库则能够跳过。建议没库编译经验的同窗用其余VS版本跳过这一步,或者找已经编译好的版本(本文最后提供已经编译好的版本)。git
解压下载好的第三方库包osg-3rdparty-cmake-master,就会发现里面有个download_dependencies.bat,用记事本打开:windows
也就是说第三方库源代码须要经过这个批处理文件来获取,最后会下载到C:\3rdparty这个文件夹(不想下载能够从本文最后处地址获取)。里面有三个cmd不识别的命令:git、curl以及7z。能够参考《Git安装教程(windows)》来安装git;参考《windows(64位)下使用curl安装》来安装curl;至于7z能够安装7-Zip。app
都安装好之后,将download_dependencies.bat加载cmd里面运行,等待下载完成就能够了,注意在cmd里面检查批处理命令的输出结果。curl
下载完成之后,打开cmake,填入source目录以及build目录,点击configure,选择VS2015-64位编译器,configure完成后,按照以下配置进行再次configure,直到没有红色高亮显示。学习
点击Generate生成VS工程,用VS2015打开,生成解决方案,等待编译完成就能够了。编译完成后单独生成INSTALL工程,编译结果就会自动安装到CMAKE_INSTALL_PREFIX设置的文件夹。测试
3. 编译GDAL
可参看个人另一篇文章《Win64下编译集成GEOS和Proj4的GDAL》。建议不熟悉GDAL的同窗直接找编译好的版本就能够了。或者直接略过,GDAL应该只是可选的编译项之一。网站
4. 编译OSG
解压源码包,文件夹重命名为OpenSceneGraph-3.6.3。启动cmake,填入源代码路径和编译路径,点击Configure,界面就会出现一些编译选项。
以前不少资料说多Configure几回,cmake会把有问题的地方红色高亮显示。可是到我这里最后红色高亮却消失了,只是会提示找不到对应的类库。以防万一我仍是将这些依赖库一一配置进去了。注意配置如下几个选项:
1) CMAKE_INSTALL_PREFIX:
cmake获得的工程都有install工程,生成以后就会自动把须要的头文件、lib还有dll复制到对应的目录中去,这样方便咱们管理。能够把这里设置成一个咱们想要的目录,我这里设置的是D:\Work\OSGBuild\OpenSceneGraph-3.6.3\install。
2) BUILD_OSG_EXAMPLES/BUILD_MFC_ EXAMPLE:
这两个都是OSG的示例,能够勾选编译进去方便之后学习。
3) ACTUAL_3RDPARTY_DIR
这里设置成第三方库的路径,我这里设置成上面编译好的第三方库安装路径:D:\Work\OSGBuild\osg-3rdparty-cmake-master\install。固然这里也能够是下载的已经编译好的第三方路径。
设置好这三项,再次Configure。第三方库有9个:zlib、libpng、libjpeg、libtiff、FreeType、GLUT、GIFLIB、MINIZIP、curl,再加上一个GDAL。仔细看输出,若是存在库没找到,则会提示对应的库Could NOT find。
若是一旦发现没找到对应的库,能够回头找对应的配置项。勾选Grouped和Advanced能够方便查找,如下是我本身配置的路径。
仔细看就会知道万变不离其宗,简单来讲就是include找头文件,library找.lib,debug找debug的.lib,release找release的.lib。
4) BUILD_DOCUMENTATION
勾选这个,能够生成编译OSG帮助文档的工程,可参照这篇文章《VS2010+64+OSG3.2.1之一帮助文档的生成》。注意这篇文章的第三个设置好像不必了,能够直接生成chm。
5) 编译过程的问题
修改以上配置Configure没有问题以后,点击Generate,就能够生成工程文件。用VS2015打开工程,生成解决方案,剩下的就是漫长的等待了。编译完成以后有个osgviewerMFC生成错误:
在网上查找解决方案,缘由是VS2015已经不支持太远古的VC了。在这个项目的stdafx.h文件中,找到WINVER和_WIN32_WINNT的宏定义,修改成
// Modify the following defines if you have to target a platform prior to the ones specified below. // Refer to MSDN for the latest info on corresponding values for different platforms. #ifndef WINVER // Allow use of features specific to Windows XP or later. #define WINVER 0x0601 // Change this to the appropriate value to target other versions of Windows. #endif #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. #define _WIN32_WINNT 0x0601 // Change this to the appropriate value to target other versions of Windows. #endif
也就是将0x501修改成0x0601,这段的含义也就是指定须要win7及以上版本的windows来运行。
再次生成解决方案,编译就没有问题了。
6) 安装
分别仅单独生成doc_openscenegraph和doc_openthreads,就会生成帮助文档。仅单独生成INSTALL,OSG的全部依赖、文档就会发送到CMAKE_INSTALL_PREFIX设置的目录中。最后目录中的结果:
5. 测试环境
看了不少资料基本上都是在安装绝对环境,好处是配置好了本机哪里均可以经过文件名调用,不过坏处是一旦存在相同的dll环境或者换了电脑就麻烦了。我这里习惯配置相对环境,只要拷贝好代码,在任何电脑均可以直接使用,不用费心再配置一次。
以下图所示,创建文件夹:
将咱们刚刚编译的OSG的dll拷贝到bin/bin_D目录里面,带_D的表示是debug版本,注意第三方库的dll也应该拷贝进去。include文件夹就是OSG安装的include文件夹,里面是OSG的头文件。lib/lib_D则放入OSG的lib文件。HelloOSG就是咱们用VS2015新建的空白win32控制台工程。
在新建main.cpp文件,编写下面代码:
//main.cpp #include <iostream> #include <Windows.h> #include <osgViewer/Viewer> #include <osgDB/ReadFile> using namespace std; int main() { //这里修改为OSG数据包里面的实例数据 string osgPath = "D:\\Work\\OSGBuild\\OpenSceneGraph-Data\\cow.osg"; osgViewer::Viewer viewer; osg::Node * node = new osg::Node; node = osgDB::readNodeFile(osgPath); viewer.setSceneData(node); return viewer.run(); }
在工程属性中,按照以下设置:
- 指定头文件文件夹
- 指定lib文件夹
- 指定lib文件
- 指定dll的文件夹
你们能够配置一个选项而后编译运行试试,就能够体会到程序具体是如何使用C/C++动态库的。注意debug设置debug目录,release设置release目录。因为我这里都是设置的相对目录,即便换了电脑仍然可使用。最后运行的结果:
6. 资源下载
全套的编译资源(包含编译的chm帮助)都已经上传到网盘:https://pan.baidu.com/s/1V5c2_XO1167y3yg1S9OEFA ,密码:70fh。
其中第一个文件夹内就是第2节提到的bat命令下载的第三方源码。全部的动态库都是VS2015-64位编译的,包含了debug和release两套dll。