【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)

最近开始了OSG的学习,开始搭建OSG开发环境,期间遇到了很多问题,也查阅了很多资料,最终搭建成功。OSG本来就是开源的,不应该敝帚自珍,应该多交流多分享,所以在此记录一下环境搭建的过程,方便以后查阅和交流。

1、下载文件

1.1、OSG源码下载

OSG3.6.5稳定版下载,下载地址: OpenSceneGraph-3.6.5 release download

下载 OpenSceneGraph-OpenSceneGraph-3.6.5.zip

1.2、OSG第三方依赖库下载

下载地址: Dependencies

里面有各种版本的第三方依赖库,下载自己需要的就可以了,但是必须和自己的编译器版本保持一致。我下载的是2017版本的 3rdParty_VS2017_v141_x64_V11_full.7z。

1.3、数据包下载

下载地址:Data Resources

下载的是 OpenSceneGraph-Data-3.4.0.zip

1.4、编译工具下载

编译工具选择的是CMake,官网上推荐2.6.x:

直接下载最新版的CMake,下载地址:Download | CMake

下载的是 cmake-3.21.3-windows-x86_64.msi

2、CMake构建

2.1、构建前的准备

为了方便编译,在硬盘下建立一个OSG文件夹,然后分别建立如下3个文件夹:

OpenSceneGraph-3.6.5: 用于存放解压后的 OpenSceneGraph-OpenSceneGraph-3.6.5.zip 文件

3rdParty:   用于存放解压后的 3rdParty_VS2017_v141_x64_V11_full.7z 文件

Data:        用于存放解压后的 OpenSceneGraph-Data-3.4.0.zip

build:       用于存放编译后的文件

如下图所示:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第1张图片

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第2张图片

 

 【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第3张图片

安装CMake。默认安装即可。 

2.2、开始构建

打开CMake,配置源文件目录和编译后的生成目录,如下所示:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第4张图片

 (也可以直接将OpenSceneGraph-3.6.5下的CMakeLists.txt文件直接拖放到CMake界面,然后在重新配置一下build文件目录就可以了)

点击“Configure”按钮,按如下所示进行配置:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第5张图片

 点击“Finish”按钮:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第6张图片

 修改 ACTUAL_3RDPARTY_DIR 的值为 C:\OSG\3rdParty(前面配置好的3rdParty的目录):

 BUILD_OSG_EXAMPLES 打钩:

 CMAKE_INSTALL_PREFIX 的值为上面设置的build的路径:

 再次点击“Configure”按钮:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第7张图片

还是有红色的选项,BUILD_MFC_EXAMPLE 打钩(切记!!!VS2017一定要安装MFC开发组件!!!)

再次点击“Configure”按钮,此时没有红色选项:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第8张图片

 然后点击“Generate”按钮,进行生成。

3、编译

3.1、ALL_BUILD编译

在build目录()中找到生成的OpenSceneGraph.sln文件,然后使用vs2017打开:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第9张图片

 选择生成->批生成:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第10张图片

 选择 ALL BUILD 的 Debug 和 Release:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第11张图片

 然后点击“生成”,此时会花费比较久的时间(我的机器上大概用了3个小时左右)。如果前面配置的没有错误的话,此时应该不会报错。

3.1.1、问题1

在运行过程中提示了以下错误:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第12张图片

 经检查,发现是因为我使用的VS2017版本没有安装MFC组件,所以打开vs2017的安装程序,选择安装MFC组件即可,安装方法:

打开vs2017 community的安装程序:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第13张图片

 然后点击修改按钮就会开始安装MFC组件:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第14张图片

 (20K左右的下载速度,很难受~~)

3.1.2、问题2

安装完成之后,又重新ALL_BUILD一下,ALL_BUILD之后出现如下错误:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第15张图片

出现了一大堆的错误,这个时候不要慌,一般这种错误都是因为一个原因,可以看到出现的错误基本上都是在Examples osgviewerMFC工程中,出现问题的文件基本上集中在afxwin.h中,而这个是库文件,一般不会出错。经查,这种问题一般是因为MFC的编译平台的原因。

可以看到该工程的目标编译平台为:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第16张图片

 其中的_WIN32_WINNT=Ox0A00,表明目标平台是Win10的,对应关系如下所示:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第17张图片

 参考链接:使用 Windows 标头 - Win32 apps | Microsoft Docs

而该工程中定义的目标平台为0x0501(该工程中的stdafx.h头文件下定义的):

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第18张图片

 0x0501是面向xp系统的,因为我使用的是Win10操作系统,所以需要进行以下修改:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第19张图片

 保存,再重新ALL_BUILD一下,就没有报错了。

3.2、INSTALL编译

ALL_BUILD编译完成之后,需要进行INSTALL编译,同样打开生成->批生成,选择INSTALL:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第20张图片

 点击“生成”按钮,进行编译生成,这部分会快一些;

4、配置环境变量

添加系统环境变量 OSG_FILE_PATH,值为前面的Data的目录(C:\OSG\Data):

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第21张图片

 然后在Path变量中添加前面生成目录build目录中的bin目录(C:\OSG\build\bin):

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第22张图片

 配置完成之后最好重启一下。

5、测试

5.1、命令行测试(解决了两个问题)

在命令行中输入osgversion:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第23张图片

 在命令行中输入osglogo:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第24张图片

 能够进行拖动,缩放等操作,但是图形渲染的有问题。命令行上打印的信息如下:

 5.1.1、解决arial.ttf:  file not handled 的问题

参考链接:关于在osgearth 中 出现 arial.ttf : file not handled 的问题 - 尚码园

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第25张图片

 取消勾选 OSG_TEXT_USE_FONTCONFIG

 配置freetype路径:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第26张图片

 Configure->Generate,然后重新打开 .sln解决方案,生成->批生成,先ALL_BUILD,然后再 INSTALL。再运行osglogo:
【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第27张图片

 文字能够正常显示了,但是旁边的地球没有显示出来。

5.1.2、解决无法读取.jpg的问题

有了5.1.1的经验,猜测可能是因为缺少了读取.jpg文件的库,所以需要CMake重新配置一下:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第28张图片

Configure->Generate,然后重新打开 .sln解决方案,生成->批生成,先ALL_BUILD,然后再 INSTALL,再重新运行osglogo显示如下,问题解决:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第29张图片

 而且地球也一直在转。

5.2、新建项目测试

在vs2017中新建C++控制台程序项目,项目属性,选择x64,然后配置头文件目录为build的目录下的include目录,如下所示:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第30张图片

然后配置链接库文件,添加以下链接库:

OpenThreadsd.lib
osgd.lib
osgDBd.lib
osgUtild.lib
osgGAd.lib
osgViewerd.lib
osgTextd.lib
(注:在编译生成的lib文件中,每个lib文件有一对名称相似的文件,其中文件名最后一个字母为“d”的为Debug版本所使用的,没有“d”的为Release版本所使用的。)

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第31张图片

 然后配置链接库的目录(build目录下的lib目录):

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第32张图片

 在程序文件中编写以下代码:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第33张图片

 编译出现以下错误:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第34张图片

 经调试发现,main函数中什么语句都不写,只是单纯的包含这两个头文件就会报这些错误,所以应该不是代码的问题,经查,应该是预处理器未定义的原因,需要在预处理器中添加 WIN32:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第35张图片

 或者在程序中所有头文件之上添加 #include

编译没问题,运行结果:

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_第36张图片

 (牛~,你终于出来了,喜极而泣)

你可能感兴趣的:(OSG,osg)