因工作需要,学习了OSG、osgEarth。
虽然OSG、osgEarth是开源软件,但我个人感觉,要从源码生成能用的软件版本还是有困难的。有时第三方库不完整、有时需要匹配各个软件配置项的版本;经常是编译出来的软件无法正常运行。
我零零散散使用了将近一个多月时间,才创建了一个能在Win10中正常运行的软件。总结一下,希望能为大家节省一些学习的时间。
1. 第三方组件下载及解压缩
下载网址:
http://www.openscenegraph.org/index.php/download-section/dependencies
我选择的是:
- Full package for 64 bit https://download.osgvisual.org/3rdParty_VS2017_v141_x64_V11_full.7z - Last Update: V11 on 2017/04/08
下载完成后,得到的压缩包名为“3rdParty_VS2017_v141_x64_V11_full.7z”。是由VS2017(v141)生成的第三方库。
解压后,将其保存在目录“D:\OSGCore\Bulid\3rdParty”中。
将目录“D:\OSGCore\Bulid\3rdParty\bin”加入系统环境变量Path中。
2. OSG数据资源的下载
下载网址:
http://www.openscenegraph.org/index.php/download-section/data
下载完成后,得到的压缩包名为“OpenSceneGraph-OpenSceneGraph-3.4.0.zip”。
解压后,将其保存在目录“D:\OSGCore\Bulid\OpenScenGraph-Data”中。
添加系统环境变量 OSG_FILE_PATH ,值为 D:\OSGCore\Bulid\OpenScenGraph-Data 。
3. CMake的下载和安装
下载网址:
我当时下载的是: cmake-3.20.1-windows-x86_64.msi
安装目录:C:\Program Files\CMake
4. OSG3.6.5的下载、编译及配置
下载网址:
http://www.openscenegraph.org/index.php/download-section/stable-releases
下载完成后,得到的压缩包名为“OpenSceneGraph-OpenSceneGraph-3.6.5.zip”,将其解压到目录“D:\OsgEarth\OpenSceneGraph-3.6.5”。
CMake初始配置
运行CMake。
将目录“D:\OsgEarth\OpenSceneGraph-3.6.5”中的“CMakeLists.txt”拖放到CMake中。
在CMake界面点击“Configure”按钮。
我的电脑上已安装了VS2019,点击“Finish”。CMake会产生初始配置(需做些修改)。
指定ACTURAL_3RDPARTY_DIR
将ACTURAL_3RDPARTY_DIR的值指定为第三方组件所在的目录,即“D:\OSGCore\Bulid\3rdParty”。
指定FREETYPE
若不指定该项的值,osgEarth显示地球时,可能会提示错误信息“arial.ttf : file not handled”。(https://www.cnblogs.com/XiaoXiaoShuai-/p/12247425.html)
指定的值如下图所示:
做上述修改后,再点击“Configure”按钮,进行配置,配置完成后,点击“Generate”,在“D:/OsgEarth/OpenSceneGraph-3.6.5/build”目录中生成解决方案(扩展名为sln的文件)。再点击“Open Project”,由VS2019打开解决方案。
MSVC v141 – VS2017 C++ x64/x86 生成工具(v14.16)的安装(若已安装,可跳过)
由于使用的第三方组件是由VS2017(v141)生成的“3rdParty_VS2017_v141_x64_V11_full.7z”。为了使得基于osgEarth开发的软件能够正常调试和运行,需要将OSG和osgEarth使用相同的编译器进行编译。
开始菜单àVisual Studio Installer
在主界面点击“修改”按钮
勾选“MSVC v141 – VS2017 C++ x64/x86 生成工具(v14.16)”,点击“下载时安装”,程序自动从网站下载并完成安装。
在VS2019中设置项目工具集
在解决方案的“类视图”中,利用shift键选中所有项目,右键单击,在弹出菜单中点击“属性”,弹出“属性页”对话框。在“平台工具集”右侧的下拉列表中选择“Visual Studio 2017(v141)”。点击“应用”“确定”按钮使设置生效。
完成上述设置后(Release和Debug版都需要设置),即可开始生成。由于项目较多,编译时间需几个小时。
OSG生成后的相关设置
在“D:\OSGCore\Bulid”目录中创建“OpenSceneGraphic”,并在其中创建目录include, lib, bin。
头文件复制。将目录“D:\OsgEarth\OpenSceneGraph-3.6.5\src”和“D:\OsgEarth\OpenSceneGraph-3.6.5\build\include”中的所有文件复制建立的include目录中。
库文件复制。将目录“D:\OsgEarth\OpenSceneGraph-3.6.5\build\lib”中的文件复制到建立的lib目录中。
可执行文件复制。将目录“D:\OsgEarth\OpenSceneGraph-3.6.5\build\bin”中的文件复制到建立的bin目录中。
添加系统环境变量 OSG_ROOT,值为 D:\OSGCore\Bulid\OpenSceneGraphic。
将目录“D:\OSGCore\Bulid\bin”添加到系统环境变量Path中。
OSG运行正确性测试
在命令行窗口输入命令“osgviewer cow.osg”,如显示出奶牛,则说明OSG正常运行。
5. osgEarth2.10.0的下载、安装及编译
下载网址:
https://codeload.github.com/gwaldron/osgearth/zip/osgearth-2.10
下载完成后,得到的压缩包名为“3rdParty_VS2017_v141_x64_V11_full.7z”。是由VS2017(v141)生成的第三方库。
下载完成后,得到的压缩包名为 “osgearth-osgearth-2.10.zip”中。
解压后,将其保存在目录“D:\OsgEarth\osgearth-osgearth-2.10”中。
OsgEarth2.10.0的编译
运行CMake。
将目录“D:\OsgEarth\osgearth-osgearth-2.10”中的“CMakeLists.txt”拖放到CMake中。
在CMake界面点击“Configure”按钮。
我的电脑上已安装了VS2019,点击“Finish”。CMake会产生初始配置(需做些修改)。
指定THIRD_PARTY_DIR
将THIRD_PARTY_DIR的值指定为第三方组件所在的目录,即“D:\OSGCore\Bulid\3rdParty”。
指定CURL
指定的值如下图所示:
指定GDAL
做上述修改后,再点击“Configure”按钮,进行配置,配置完成后,点击“Generate”,在“D:\OsgEarth\osgearth-osgearth-2.10\build”目录中生成解决方案(扩展名为sln的文件)。再点击“Open Project”,由VS2019打开解决方案。
在VS2019中设置项目工具集
在类视图中选中所有项目,在属性页对话框的“平台工具集”右侧的下拉列表中选择“Visual Studio 2017(v141)”。点击“应用”“确定”按钮使设置生效。
生成Release和Debug版本。需消耗几小时。
osgEarth生成后的相关设置
在“D:\OSGCore\Bulid”目录中创建“OsgEarth”,并在其中创建目录include, lib, bin。
头文件复制。将目录“D:\OsgEarth\osgearth-osgearth-2.10\src”中的所有文件复制建立的include目录中。
库文件复制。将目录“D:\OsgEarth\osgearth-osgearth-2.10\build\lib\Release”和“D:\OsgEarth\osgearth-osgearth-2.10\build\lib\Debug”中的文件复制到建立的lib目录中。
可执行文件复制。将目录“D:\OsgEarth\osgearth-osgearth-2.10\build\bin\Release”和“D:\OsgEarth\osgearth-osgearth-2.10\build\bin\Debug”中的文件复制到建立的bin目录中。
osgEarth数据文件复制。将“D:\OsgEarth\osgearth-osgearth-2.10\data”中的文件复制到目录“D:\OSGCore\Bulid\OpenScenGraph-Data”中。
将目录“D:\OSGCore\Bulid\OsgEarth\bin”添加到系统环境变量Path中。
osgEarth运行正确性测试
在命令行窗口输入命令“osgearth_viewer gdal_tiff.earth”,如显示出地球,则说明osgEarth正常运行。