[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。