原文链接:VS2019编译OSG3.7.0+OSGEarth3.3+OSGQt-CSDN博客
工具与环境
这里使用的 cmake-3.18.3 、 VS2019 和 Qt5.15.2 进行编译。
一、编译OSG3.7.0
1、下载
下载不多赘述,在github上下master版本就是3.7.0版本。
另外还需要 3rdParty_VS2017_v141_x64_V11_full 和 OpenSceneGraph-Data-3.4.0 可以在OSG英文官网中下载到。
2、cmake编译
将OSG3.7.0源码、3rdParty_VS2017_v141_x64_V11_full、OpenSceneGraph-Data-3.4.0解压到合适的目录,并新建一个文件夹用于保存cmake生成的项目。如下图,这里我放在了同级目录下。
然后打开cmake,在最上面第一栏选择OSG源码中CMakeLists文件所在文件夹的路径,第二栏选择上面自己新建的文件夹路径,然后点击Configure按钮,会弹出如下图子界面,第一栏选择VS2019,第二栏选择x64点击Finish按钮,cmake开始加载。
等待加载完成,会显示一片红,并在下面的log中显示一些库找不到。
点击Ungrouped Entries项展开,在第一项ACTUAL_3RDPARTY_DIR中选择3rdParty_VS2017_v141_x64_V11_full中的x64文件夹路径。
点击BUILD项展开,勾选BUILD_OSG_EXAMPLES项。
点击CMAKE项展开,将CMAKE_INSTALL_PREFIX项的路径修改为最上面创建的文件夹中的OpenSceneGraph文件夹(目录下没有这个文件夹没关系,INSTALL时会自动创建)。
点击OPENGL项展开,修改OPENGL_HEADER1项为
#include <GL/glcorearb.h>,修改OPENGL_PROFILE项为GL3。
注意: OSGEarth3.3版本必须要OSG支持GL3,所以需要下载另外的GL API文件。
下载地址:
https://github.com/KhronosGroup/OpenGL-Registry
https://github.com/KhronosGroup/EGL-Registry
将第一个的GL文件夹和第二个的KHR文件夹复制到OSG源码的include目录下。
点击OSG项展开,
勾选
OSG_GL3_AVAILABLE
取消勾选
OSG_GL1_AVAILABLE
OSG_GL2_AVAILABLE
OSG_GLES1_AVAILABLE
OSG_GLES2_AVAILABLE
OSG_GL_DISPLAYLISTS_AVAILABLE
OSG_GL_FIXED_FUNCTION_AVAILABLE
OSG_GL_MATRICES_AVAILABLE
OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE
OSG_GL_VERTEX_FUNCS_AVAILABLE
修改OSG_GL_CONTEXT_VERSION项为3.3。
然后一直点击Configure按钮直到没有红色项,从下面log可见部分库已经找到(如果没有其他要求,官网下的依赖包中的库应该就已经足够,不需要额外再下别的库了),然后点击Generate按钮,等进度条走完,下方log显示Generating done,即项目生成结束。
3、VS2019编译
打开生成的项目目录,点击sln文件打开项目,点击最上方功能栏生成-批生成,在弹出的子窗口中勾选ALL_BUILD的Debug和Release,然后点击生成按钮,下方输出中显示“已启动生成…”,项目开始编译。
**注意:**应该会出现报错,这是因为宏GL_EXT_texture_compression_s3tc已经在glcorearb.h中定义,需要注释掉osg/Texture文件中第60和69行。
接着等待编译完成,应该是不会有失败的。、
然后再次打开批生成,将ALL_BUILD的两个取消勾选,找到INSTALL勾选Debug和Release,点击生成按钮,等待完成。
再之后,打开之前CMAKE_INSTALL_PREFIX项中设置的目录,即是生成好了的库文件。注意:这个目录的include中是不带之前的GL和KHR文件夹的,记得手动复制过来。
4、测试
新建一个控制台项目(如何引入库头文件和库文件这里不再赘述),输入以下内容(glider.osg可以在OpenSceneGraph-Data-3.4.0中找到):
运行,如果出现一个紫色的滑翔机,应该就没什么问题了。
注意:因为开启了GL3,所以会对有些渲染不兼容,导致glider.osg和cow.osg的显示效果与通常的有所不同。
二、编译OSGEarth3.3
1、下载
下载不多赘述,在github上下master版本就是3.3版本。
不过要注意的是在src/third_party下三个蓝色链接的项目需要手动下载然后拷贝到此目录下。
必要的还有sqlite3,另外我这里还编译了glew。
1.1、编译sqlite3
1.1.1、下载
下载地址:https://sqlite.org/download.html
这里下载下图两个包,第二张图下载x64版本,下载解压完成后,将文件复制到同一个目录。
1.1.2、编译
打开VS2019,新建一个空项目,起名为sqlite3。
将下载的sqlite的所有文件复制到项目目录下。
然后右键项目,添加现有项。
右键项目属性,将常规中的配置类型设置为动态库(.dll),在目标文件名后加d(这个仅Debug设置),设置链接器-输入中模块定义文件为sqlite3.def,在C/C+±预处理器中预处理器定义中添加以下宏:
SQLITE_CORE
SQLITE_EXPORTS
SQLITE_ENABLE_FTS3
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_SESSION
SQLITE_ENABLE_PREUPDATE_HOOK
SQLITE_ENABLE_DESERIALIZE
记得Debug和Release都要设置。然后点击生成-批生成,勾选Debug和Release,点击生成,
等待编译完成。在生成目录下就可以看到生成的Debug和Release的lib和dll了。再记得创建一个include文件夹将.h文件复制进去。
1.2、glew
glew可以直接下载编译好了的文件,直接下载Binaries即可。
下载地址:http://glew.sourceforge.net/
解压后,将bin和lib中x64目录下glew.dll和glew32.lib复制出来(glew32s.lib是静态库,这里我们需要动态库,所以取glew32.lib即可),复制到一个新的文件夹,将include文件夹也复制进去。
2、cmake编译
开始部分与OSG编译一致,新建一个文件夹用于保存cmake生成的项目,cmake最上面第一栏选择OSGEarth源码中CMakeLists文件所在文件夹的路径,第二栏选择上面自己新建的文件夹路径,点击Configure按钮,然后选VS2019和x64,点击Finish按钮,等待加载。
载入完成后跟前面的有一点不同的是,应该会弹出Error提示窗,这里不用担心,查看log信息,大概率是有库找不到,手动输入一下就行,这里提示的是找不到curl库,这个库在OSG的3rdParty包中有,不需要额外去下。
上面还是一片红,顺着来处理。
点击CMAKE项展开,将CMAKE_INSTALL_PREFIX项的路径修改为创建的项目文件夹中的OSGEARTH文件夹(目录下没有这个文件夹没关系,INSTALL时会自动创建)。
点击CURL项展开,INCLUDE设置为OSG的3rdParty包中include目录,此目录下可见有curl文件夹,DEBUG和RELEASE设置为3rdParty包中lib目录下的libcurl_impd.lib和libcurl_imp.lib文件。
然后就是下面一系列有关OSG的依赖,只用点开OSG项,在第一个OSG_DIR中设置之前OSG的CMAKE_INSTALL_PREFIX项设置的路径,然后点击
Configure按钮,刷新完成应该会再次弹出Error提示窗,这次应该是找不到GDAL,依次点开OSG相关的项,应该就都自动找到了。
点击GDAL项展开,INCLUDE输入3rdParty的include目录,LIBRARY输入3rdParty的lib目录中的gdal_i.lib。
点击Configure按钮,应该不会弹出Error提示窗了,不过会新增一系列其他依赖库选项,请根据需要自行下载,这里只设置GLEW和SQLITE3。
点击GLEW项展开,设置INCLUDE为之前glew的include目录,SHARED_LIBRARY_DEBUG为glew32d.lib,SHARED_LIBRARY_RELEASE为glew32.lib。
点击SQLITE3项展开,设置INCLUDE为之前sqlite3的include目录(这里我没有新建单独的include文件夹,.h文件直接放在了根目录下),LIBRARY为sqlite3.lib。
点击OSGEARTH项展开,这里有几种NodeKit,可以根据需要勾选,勾选后可能会需要另外的第三方依赖(例如Triton和Silverlining),请自行下载,这里我就保持默认,然后仅勾选OSGEARTH_INSTALL_SHADERS项。
最后点击Generate按钮,等待项目生成完毕。
3、VS2019编译
跟之前的一样,点击生成-批生成,在弹出的子窗口中勾选ALL_BUILD的Debug和Release,然后点击生成按钮,等待生成完成,应该是不会有失败的。
然后再次打开批生成,将ALL_BUILD的两个取消勾选,找到INSTALL勾选Debug和Release,点击生成按钮,等待完成。
再之后,打开之前CMAKE_INSTALL_PREFIX项中设置的目录,即是生成好了的库文件。
4、测试
找个地方新建一个文件夹,将bin中的osgearth_viewer.exe复制进去,再将OSGEarth源码目录下的data文件夹中的world.tif复制进去,然后新建一个txt文件,后缀改为.earth,内容写:
<map>
<GDALImage name="test">
<url>world.tif</url>
</GDALImage>
</map>
然后将OpenSceneGraph和OSGEARTH的bin目录下的所有dll以及osgPlugins文件夹复制到此目录,将3rdParty的bin目录下的所有dll复制到此目录,将sqlite3.dll也复制到此目录(其实这里应该区分一下Debug和Release的dll,将需要的复制进去,不过是测试就不考虑这么多,如果要用于实际项目,建议还是要做下区分)。
接着运行cmd,用cd命令切换到此目录下,然后输入osgearth_viewer test.earth,按下回车。
如果出现了一个粗糙的地球,应该就没什么问题了。
三、编译OSGQt
1、下载
下载不多赘述,在github上直接下的master版本。
2、cmake编译
前面的和之前一样,新建一个文件夹用于保存cmake生成的项目,cmake最上面第一栏选择OSGQt源码中CMakeLists文件所在文件夹的路径,第二栏选择上面自己新建的文件夹路径,点击Configure按钮,然后选VS2019和x64,点击Finish按钮,等待加载。
然后会弹出Error提示窗,查看下面log是找不到OSG相关的库,这里要麻烦一点,需要一个个的手动填写。
然后点击Configure按钮,会弹出Error提示窗,查看下面log是找不到Qt相关的库。
点击Ungrouped Entries项展开,设置Qt5_DIR为:
点击CMAKE项展开,将CMAKE_INSTALL_PREFIX项的路径修改为创建的项目文件夹中的OSGQt文件夹(目录下没有这个文件夹没关系,INSTALL时会自动创建)。
点击Configure按钮,应该是没有报错了,log中有一些红色的Warning文本,这个可以不用管,然后点击Generate按钮,等待项目生成完毕。
3、VS2019编译
打开项目,注意: 双击打开Header Files中的osgQOpenGLWidget和osgQOpenGLWindow,将第15行 #define _gl_h 的注释解开,因为默认下会导致启用系统的gl.h文件,并与之前下载的glcorearb.h文件产生冲突,出现接口重定义的问题。
接着跟之前的一样,点击生成-批生成,在弹出的子窗口中勾选ALL_BUILD的Debug和Release,然后点击生成按钮,等待生成完成,应该是不会有失败的。
然后再次打开批生成,将ALL_BUILD的两个取消勾选,找到INSTALL勾选Debug和Release,点击生成按钮,等待完成。
再之后,打开之前CMAKE_INSTALL_PREFIX项中设置的目录,即是生成好了的库文件。
4、测试
找个地方新建一个文件夹,将项目目录下bin中的osgviewerQt.exe复制进去,再在开始菜单中找到Qt 5.15.2(MSVC 2019 64-bit),点击打开。
用cd命令切换到此目录,然后输入
windeployqt osgviewerQt.exe
回车,它会将exe需要的Qt库复制进去。
然后将OpenSceneGraph的bin目录下的所有dll以及osgPlugins文件夹复制到此目录,将osgQt的bin目录下的osg145-osgQOpenGL.dll复制到此目录,将3rdParty的bin目录下的所有dll复制到此目录,将之前用到的glider.osg也复制到此目录(其实这里应该区分一下Debug和Release的dll,将需要的复制进去,不过是测试就不考虑这么多,如果要用于实际项目,建议还是要做下区分)。
接着运行cmd,用cd命令切换到此目录下,然后输入osgviewerQt glider.osg,按下回车。
如果出现了一个小窗体,上面是之前看过的紫色滑翔机,应该就没什么问题了。
四、结语
至此,所有的编译就均已完成。