網(wǎng)上搜索發(fā)現(xiàn)關(guān)于這幾個庫編譯過程的文章甚至要訂閱才能看,在此做個詳細記錄。
工具與環(huán)境
這里使用的 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英文官網(wǎng)中下載到。
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項的路徑修改為最上面創(chuàng)建的文件夾中的OpenSceneGraph文件夾(目錄下沒有這個文件夾沒關(guān)系,INSTALL時會自動創(chuàng)建)。
點擊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按鈕直到?jīng)]有紅色項,從下面log可見部分庫已經(jīng)找到(如果沒有其他要求,官網(wǎng)下的依賴包中的庫應該就已經(jīng)足夠,不需要額外再下別的庫了),然后點擊Generate按鈕,等進度條走完,下方log顯示Generating done,即項目生成結(jié)束。
3、VS2019編譯
打開生成的項目目錄,點擊sln文件打開項目,點擊最上方功能欄生成-批生成,在彈出的子窗口中勾選ALL_BUILD的Debug和Release,然后點擊生成按鈕,下方輸出中顯示“已啟動生成…”,項目開始編譯。
**注意:**應該會出現(xiàn)報錯,這是因為宏GL_EXT_texture_compression_s3tc已經(jīng)在glcorearb.h中定義,需要注釋掉osg/Texture文件中第60和69行。
接著等待編譯完成,應該是不會有失敗的。
然后再次打開批生成,將ALL_BUILD的兩個取消勾選,找到INSTALL勾選Debug和Release,點擊生成按鈕,等待完成。
再之后,打開之前CMAKE_INSTALL_PREFIX項中設(shè)置的目錄,即是生成好了的庫文件。注意:這個目錄的include中是不帶之前的GL和KHR文件夾的,記得手動復制過來。
4、測試
新建一個控制臺項目(如何引入庫頭文件和庫文件這里不再贅述),輸入以下內(nèi)容(glider.osg可以在OpenSceneGraph-Data-3.4.0中找到):
運行,如果出現(xiàn)一個紫色的滑翔機,應該就沒什么問題了。
注意:因為開啟了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的所有文件復制到項目目錄下。
然后右鍵項目,添加現(xiàn)有項。
右鍵項目屬性,將常規(guī)中的配置類型設(shè)置為動態(tài)庫(.dll),在目標文件名后加d(這個僅Debug設(shè)置),設(shè)置鏈接器-輸入中模塊定義文件為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都要設(shè)置。然后點擊生成-批生成,勾選Debug和Release,點擊生成,
等待編譯完成。在生成目錄下就可以看到生成的Debug和Release的lib和dll了。再記得創(chuàng)建一個include文件夾將.h文件復制進去。
1.2、glew
glew可以直接下載編譯好了的文件,直接下載Binaries即可。
下載地址:http://glew.sourceforge.net/
解壓后,將bin和lib中x64目錄下glew.dll和glew32.lib復制出來(glew32s.lib是靜態(tài)庫,這里我們需要動態(tài)庫,所以取glew32.lib即可),復制到一個新的文件夾,將include文件夾也復制進去。
2、cmake編譯
開始部分與OSG編譯一致,新建一個文件夾用于保存cmake生成的項目,cmake最上面第一欄選擇OSGEarth源碼中CMakeLists文件所在文件夾的路徑,第二欄選擇上面自己新建的文件夾路徑,點擊Configure按鈕,然后選VS2019和x64,點擊Finish按鈕,等待加載。
載入完成后跟前面的有一點不同的是,應該會彈出Error提示窗,這里不用擔心,查看log信息,大概率是有庫找不到,手動輸入一下就行,這里提示的是找不到curl庫,這個庫在OSG的3rdParty包中有,不需要額外去下。
上面還是一片紅,順著來處理。
點擊CMAKE項展開,將CMAKE_INSTALL_PREFIX項的路徑修改為創(chuàng)建的項目文件夾中的OSGEARTH文件夾(目錄下沒有這個文件夾沒關(guān)系,INSTALL時會自動創(chuàng)建)。
點擊CURL項展開,INCLUDE設(shè)置為OSG的3rdParty包中include目錄,此目錄下可見有curl文件夾,DEBUG和RELEASE設(shè)置為3rdParty包中l(wèi)ib目錄下的libcurl_impd.lib和libcurl_imp.lib文件。
然后就是下面一系列有關(guān)OSG的依賴,只用點開OSG項,在第一個OSG_DIR中設(shè)置之前OSG的CMAKE_INSTALL_PREFIX項設(shè)置的路徑,然后點擊
Configure按鈕,刷新完成應該會再次彈出Error提示窗,這次應該是找不到GDAL,依次點開OSG相關(guān)的項,應該就都自動找到了。
點擊GDAL項展開,INCLUDE輸入3rdParty的include目錄,LIBRARY輸入3rdParty的lib目錄中的gdal_i.lib。
點擊Configure按鈕,應該不會彈出Error提示窗了,不過會新增一系列其他依賴庫選項,請根據(jù)需要自行下載,這里只設(shè)置GLEW和SQLITE3。
點擊GLEW項展開,設(shè)置INCLUDE為之前glew的include目錄,SHARED_LIBRARY_DEBUG為glew32d.lib,SHARED_LIBRARY_RELEASE為glew32.lib。
點擊SQLITE3項展開,設(shè)置INCLUDE為之前sqlite3的include目錄(這里我沒有新建單獨的include文件夾,.h文件直接放在了根目錄下),LIBRARY為sqlite3.lib。
點擊OSGEARTH項展開,這里有幾種NodeKit,可以根據(jù)需要勾選,勾選后可能會需要另外的第三方依賴(例如Triton和Silverlining),請自行下載,這里我就保持默認,然后僅勾選OSGEARTH_INSTALL_SHADERS項。
最后點擊Generate按鈕,等待項目生成完畢。
3、VS2019編譯
跟之前的一樣,點擊生成-批生成,在彈出的子窗口中勾選ALL_BUILD的Debug和Release,然后點擊生成按鈕,等待生成完成,應該是不會有失敗的。
然后再次打開批生成,將ALL_BUILD的兩個取消勾選,找到INSTALL勾選Debug和Release,點擊生成按鈕,等待完成。
再之后,打開之前CMAKE_INSTALL_PREFIX項中設(shè)置的目錄,即是生成好了的庫文件。
4、測試
找個地方新建一個文件夾,將bin中的osgearth_viewer.exe復制進去,再將OSGEarth源碼目錄下的data文件夾中的world.tif復制進去,然后新建一個txt文件,后綴改為.earth,內(nèi)容寫:
<map>
<GDALImage name="test">
<url>world.tif</url>
</GDALImage>
</map>
然后將OpenSceneGraph和OSGEARTH的bin目錄下的所有dll以及osgPlugins文件夾復制到此目錄,將3rdParty的bin目錄下的所有dll復制到此目錄,將sqlite3.dll也復制到此目錄(其實這里應該區(qū)分一下Debug和Release的dll,將需要的復制進去,不過是測試就不考慮這么多,如果要用于實際項目,建議還是要做下區(qū)分)。
接著運行cmd,用cd命令切換到此目錄下,然后輸入osgearth_viewer test.earth,按下回車。
如果出現(xiàn)了一個粗糙的地球,應該就沒什么問題了。
三、編譯OSGQt
1、下載
下載不多贅述,在github上直接下的master版本。
2、cmake編譯
前面的和之前一樣,新建一個文件夾用于保存cmake生成的項目,cmake最上面第一欄選擇OSGQt源碼中CMakeLists文件所在文件夾的路徑,第二欄選擇上面自己新建的文件夾路徑,點擊Configure按鈕,然后選VS2019和x64,點擊Finish按鈕,等待加載。
然后會彈出Error提示窗,查看下面log是找不到OSG相關(guān)的庫,這里要麻煩一點,需要一個個的手動填寫。
然后點擊Configure按鈕,會彈出Error提示窗,查看下面log是找不到Qt相關(guān)的庫。
點擊Ungrouped Entries項展開,設(shè)置Qt5_DIR為:
點擊CMAKE項展開,將CMAKE_INSTALL_PREFIX項的路徑修改為創(chuàng)建的項目文件夾中的OSGQt文件夾(目錄下沒有這個文件夾沒關(guān)系,INSTALL時會自動創(chuàng)建)。
點擊Configure按鈕,應該是沒有報錯了,log中有一些紅色的Warning文本,這個可以不用管,然后點擊Generate按鈕,等待項目生成完畢。
3、VS2019編譯
打開項目,注意: 雙擊打開Header Files中的osgQOpenGLWidget和osgQOpenGLWindow,將第15行 #define _gl_h 的注釋解開,因為默認下會導致啟用系統(tǒng)的gl.h文件,并與之前下載的glcorearb.h文件產(chǎn)生沖突,出現(xiàn)接口重定義的問題。
接著跟之前的一樣,點擊生成-批生成,在彈出的子窗口中勾選ALL_BUILD的Debug和Release,然后點擊生成按鈕,等待生成完成,應該是不會有失敗的。
然后再次打開批生成,將ALL_BUILD的兩個取消勾選,找到INSTALL勾選Debug和Release,點擊生成按鈕,等待完成。
再之后,打開之前CMAKE_INSTALL_PREFIX項中設(shè)置的目錄,即是生成好了的庫文件。
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也復制到此目錄(其實這里應該區(qū)分一下Debug和Release的dll,將需要的復制進去,不過是測試就不考慮這么多,如果要用于實際項目,建議還是要做下區(qū)分)。
接著運行cmd,用cd命令切換到此目錄下,然后輸入osgviewerQt glider.osg,按下回車。
如果出現(xiàn)了一個小窗體,上面是之前看過的紫色滑翔機,應該就沒什么問題了。文章來源:http://www.zghlxwxcb.cn/news/detail-401657.html
四、結(jié)語
至此,所有的編譯就均已完成。文章來源地址http://www.zghlxwxcb.cn/news/detail-401657.html
到了這里,關(guān)于VS2019編譯OSG3.7.0+OSGEarth3.3+OSGQt的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!