一、資料准備
1、OSG源碼官網下載地址:http://www.openscenegraph.org/index.php/download-section/stable-releases或者OSGChina官網:http://www.osgchina.org/downloads-son.php?id=34,本人使用的是OpenSceneGraph-OpenSceneGraph-3.6.3.zip
2、OSG第三方依賴庫下載地址:http://www.openscenegraph.org/index.php/download-section/dependencies,找到相對應VS版本的庫進行下載,本人使用的是3rdParty_VS2017_v141_x64_V11_full.7z
3、數據包下載地址:http://www.openscenegraph.org/index.php/download-section/data,本人使用的是OpenSceneGraph-Data-3.4.0.zip
4、編碼工具下載地址:https://cmake.org/download/,本人使用的是cmake-3.12.0-rc1-win64-x64.msi,下載后進行安裝。
5、ffmpeg的資源包(64位開發版):https://ffmpeg.zeranoe.com/builds/win64/dev/。OSG可以通過ffmpeg插件來實現播放視頻的功能,在編譯OSG的時候要確保全部成功編譯才可以順利使用插件功能。本人在編譯OSG的時候就是這個插件項目編譯有問題,一直沒有編譯成功。究其原因發現,本人之前安裝過OpenCASCADE,它會錯誤的致使Cmake編譯ffmpeg項目時配置錯誤,(這是個大坑,三天才跳出來),所以本人下載了ffmpeg的資源包,版本是ffmpeg-4.0-win64-dev.zip,在Cmake時手動進行相關的FFMPEG配置。注:沒有安裝過OpenCASCADE的人暫不清楚第5步需不需要,可嘗試。
二、文件夾准備
在C盤之外的盤符下新建OSG文件夾,將下載的資料解壓到該文件夾下,注意解壓方式選擇“解壓到”,只定位到OSG文件夾即可,它會自己產生相應文件夾。
1、源碼解壓后如下圖
2、第三方庫解壓后如下圖
3、數據包解壓后如下圖
4、在OSG文件夾下新建build文件夾,作為Cmake編譯輸出文件夾。
5、ffmpeg解壓后如下圖
6、修改E:\OSG\OpenSceneGraph-OpenSceneGraph-3.6.3\CMakeModules\FindFFmpeg.cmake文件,在SET(FFMPEG_FOUND "NO")之后添加SET(STDINT_OK TRUE),如下圖,(參考:https://blog.csdn.net/zhuquanfu/article/details/84635316)
三、Cmake編譯源碼
1、打開CMake (cmake-gui).exe,指定源碼位置和編譯輸出位置,勾選Grouped,如下圖
2、點擊一次Configure,出現下圖所示,選擇本機的VS2017版本,Win64代表編譯輸出64位工程,點擊Finish,開始進行配置
3、此時Cmake界面窗口出現編譯的信息,而build文件夾也產生了相應的文件。注意:標紅部分是需要進行確認的
4、修改相關路徑
ACTUAL_3RDPARTY_DIR(第三方庫)設置為E:/OSG/3rdParty_x64/x64
勾選BUILD_OSG_EXAMPLES
CMAKE_INSTALL_PREFIX設置為E:/OSG/build/bin
COLLADA_DOM_ROOT設置為E:/OSG/3rdParty_x64/x64/include/1.4/dom
修改ffmpeg相關路徑,由於本人安裝了OpenCASCADE,導致FFMPEG相關路徑都是錯誤的,如下圖
手動進行修改ffmpeg的各個值,如下圖,注意FFMPEG_STDINT_INCLUDE_DIR的值為空
再次點擊一次Configure,又出現部分紅色,勾選BUILD_MFC_EXAMPLE,如下圖
再次點擊Configure,此時所有標紅部分消失,點擊Generate,等待完成,如下圖
四、VS編譯項目
1、用VS2019打開OpenSceneGraph.sln,如下圖
2、在生成項目之前,先修改stdafx.h,定位到Examples osgviewerMFC工程,如下圖
3、上圖標紅的宏定義部分,_WIN32_WINNT實際的值為0x0601(本機是WIN7),而這里定義為0x0501,顯然是錯的,所以將WINVER和_WIN32_WINNT都統一修改為0x0601,如下圖。注:若是 WIN10其值應該是0x0A00。
4、點擊生成,批生成
5、編譯生成ALL_BUILD, 勾選相關的編譯輸出類型,本人只勾選了Release,若勾選Debug,編譯時間會更長(約4小時)。確保ALL_BUILD所有項目均成功編譯,否則第6步會失敗。
6、編譯生成INSTALL,本人也只勾選了Release版。
五、拷貝庫文件至文件夾
1、在OSG文件夾下新建output文件夾,並在該文件夾下新建bin、include、lib三個文件夾,用於存放OSG編譯后的動態庫、頭文件和庫文件,如下圖
2、拷貝E:\OSG\3rdParty_x64\x64下的bin、include、lib文件夾至E:\OSG\output文件夾下,選擇覆蓋即可。
3、拷貝E:\OSG\build下的bin、include、lib文件夾至E:\OSG\output文件夾下,選擇覆蓋即可。
4、拷貝E:\OSG\OpenSceneGraph-OpenSceneGraph-3.6.3下的include文件夾至E:\OSG\output文件夾下,選擇覆蓋即可。
六、配置環境變量
1、新建系統變量OSG_FILE_PATH,值為E:\OSG\OpenSceneGraph-Data
2、將下列路徑加入到Path中
E:\OSG\output\bin
3、輸入cmd命令,測試OSG是否安裝成功,如下圖
osgversion
osgviewer cow.osg
osglogo
七、測試,新建WIN32控制台工程
1、在cpp中輸入以下代碼
#include <iostream>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
int main()
{
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
return viewer.run();
}
如圖
2、鼠標右鍵工程,選擇屬性,在VC++ 目錄選項下,配置包含目錄和庫目錄,如下圖
3、在鏈接器->輸入選項下,配置附加依賴項,添加下列庫,注:Debug模式下這些庫后綴帶d,Release模式下不帶d,本機沒有編譯Debug模式的庫,所以直接用Release版,如下圖
OpenThreads.lib;osg.lib;osgDB.lib;osgUtil.lib;osgGA.lib;osgViewer.lib;osgText.lib;
4、編譯運行,效果顯示
八、參考鏈接
https://www.jianshu.com/p/7fb0e414e1a9