前言:
OpenSceneGraph(簡稱
OSG
)使用OpenGL技術開發,是一套基于C++平臺的應用程序接口(API),它讓程序員能夠更加快速、便捷地創建高性能、跨平臺的交互式圖形程序。它作為中間件(middleware)為應用軟件提供了各種高級渲染特性,IO,以及空間結構組織函數;而更低層次的OpenGL 硬件抽象層(HAL)實現了底層硬件顯示的驅動。
OpenSceneGraph是一個開源的
三維引擎
,被廣泛的應用在可視化仿真、游戲、虛擬現實、科學計算、三維重建、地理信息、太空探索、石油礦產等領域。OSG采用標準C++和OpenGL編寫而成,可運行在所有的Windows平臺、OSX、GNU/Linux、IRIX、Solaris、HP-Ux、AIX、Android和FreeBSD 操作系統。OSG在各個行業均有著豐富的擴展,能夠與使用OpenGL書寫的引擎無縫的結合,使用國際上最先進的圖形渲染
技術,讓每個用戶都能站在巨人的肩上。
一.相關文件下載
1.1 Osg源碼
OpenSceneGraph的3.0.0.zip(現在最新版已經到3.4了)
1.2 Osg第三方庫
3rdParty_VC10_x86_x64.zip
下載鏈接:http://members.iinet.net.au/~bchrist/3rdParty_VC10_x86_x64.zip
1.3 OSG官方示例數據包
OpenSceneGraph-Data-3.0.0.zip
1.4 安裝源碼工具(雖然寫的x86的,但是64位系統也可以用的)
1.4.1 之前版本下載連接: cmake-2.8.4-win32-x86.exe
1.4.2 最新版本下載連接: cmake-3.4.1-win32-x86.exe
二、編譯環境創建
為了編譯的順利進行,將下載的文件組織如下,在E盤建立一個OSG的文件夾,然后其他文件如下放置:
E:\OSG\OpenSceneGraph,源碼解壓后放于此;
E:\OSG\3rdParty,第三方依賴庫解壓后放于此;
注意:這個里面的第三方庫一般包含x64和x86的兩個版本的,這里要根據你自己的電腦需要選擇一個然后把里面的文件復制到3rdParty文件夾中。
由于本人的電腦是64位的系統,所以我選擇的留下了的是“x86”。
之所以選擇x86,也就是32位是因為64位的隱患很大,很多庫沒有64位的,
而我也自己親身實踐過,在后面的VS批生成的時候導致ALL_INSTALL出現了2個失敗,在后面的直接4個全失敗。所以這里我建議選擇使用32位的;
E:\OSG\data,數據包解壓后放于此。
三.編譯OSG源碼
3.1 首先安裝CMake,之后打開CMake -gui.exe
這里要補充說下,因為有些教程里面說到,在創建” E:\OSG\OpenSceneGraph”文件夾之后,
最好在里面新建兩個文件夾,一個叫”build”;一個叫”bin”;
3.2 將源碼OpenSceneGraph文件夾里頭的CmakeLists.txt,拖到Cmake界面,如圖:
技術分享
然后將“where to build the binaries”設置為,剛剛新建的“build”文件夾,具體如上圖。
3.3 點擊Configure,選擇Visual Studio 10,如下圖:
技術分享
這里需要說的是,因為我上面第三方依賴庫我保留的是x86,所以我這里也就自然選擇VS10就可以了;
另外還有一個是VS10 Win64 的那就是要對應之前的第三方依賴庫的選擇了;
3.4 點擊Finish之后,等一下,然后進行相關設置:
ACTUAL_3RDPARTY_DIR:E:/OSG/3rdParty
BUILD_OSG_EXAMPLES :勾上
CMAKE_INSTALL_PREFIX:E:/OSG/OpenSceneGraph/
如下圖:
技術分享
3.5 點擊Configure后,等一會;
然后將Advanced打勾,將BUILD_MFC_ EXAMPLE設置為on,進行最后一次的Configure配置,點擊Configure:
如果這過程中下面的這個區域:
技術分享
出現了紅色的亂碼,可能是跟你的VS10的一些默認項目文件存放的路徑有關,之所以會亂碼,是因為可能上面說到的路徑有中文。
所以,建議不要去修改VS10的一些默認的存放的路徑,避免不必要的錯誤。
當然隨著這步勾選上BUILD_MFC_ EXAMPLE,正常的情況應該是中間區域的紅色會全部消失,但是下面的區域你去查看會發現任然有些紅色的語句警告,這無關緊要;
繼續進行下一步。
3.6 點擊Generate,自此建構完成。
四.編譯階段
4.1 用VS2010打開OpenSceneGraph.sln(此文件在E:\OSG\OpenSceneGrap\build下);
找到菜單:生成-批生成,對All_BUILD進行生成,選擇(Debug和Release兩個版本),這段編譯時間是很長的,估計2個小時左右,主要看電腦,這的確要很久;
建議大家要耐心等待,代碼好像要走到13000左右差不多就好了,這段時間可以打局LOL或者看看視頻之類的,玩笑了。
4.2 第1步完成后,再對INSTALL也進行相應生成編譯,這段時間很快的:
五.數據轉移
在C盤新建OSG文件夾(這個可以放在你想放的地方,不僅僅限于C盤,因為畢竟不是所有人都是把C盤設置的很大,而且不免有些人的C盤是容量不大的SSD)
將E:\OSG\OpenSceneGraph下的bin,include,lib文件夾,拷貝到C:\OSG下;
將E:\OSG\data下的數據,拷貝到C:\OSG\data下;
這幾個文件是OSG需要的。
六.環境變量設置
6.1右擊“計算機”,然后“屬性”,在計算機屬性窗口的左邊有個高級系統設置,如下圖:
點擊之后,高級--環境變量,對系統變量設置如下:
新建一個變量:OSG_FILE_PATH:C:\OSG\data
追加變量內容:PATH:C:\OSG\bin;
6.2 在命令行(CMD)進行測試:
osgversion
osgviewer cow.osg
osglogo
注意:測試osglogo時,出現如下錯誤:
‘osglogo‘ 不是內部或外部命令,也不是可運行的程序
或批處理文件。
這個原因我搜索了一下osglogo.exe,發現它存在于兩個地方:
E:\OSG\OpenSceneGraph\share\OpenSceneGraph\bin
E:\OSG\OpenSceneGraph\build\bin
實際上到這一步,已經編譯成功,如果覺得非得調出osglogo的話,就把osglogo.exe復制到C:\OSG\bin下面,就可以了。
七.新建OSG項目測試
7.1 在VS2010下,找到C++,新建WIN32控制臺程序;
7.2 添加一個cpp;
7.3 輸入以下代碼:
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
int main( int argc, char **argv )
{
osgViewer::Viewer viewer;
viewer.setSceneData( osgDB::readNodeFile( "cow.osg" ) );
return viewer.run();
}
7.4 右鍵項目,選擇“屬性”,選擇“VC++目錄”,在包含目錄添加:C:\OSG\include,在庫目錄添加:C:\OSG\lib
7.5 打開項目屬性的鏈接器,在輸入厘米那,附加依賴項加上:
OpenThreadsd.lib
osgd.lib
osgDBd.lib
osgUtild.lib
osgGAd.lib
osgViewerd.lib
osgTextd.lib
7.6 運行,效果如下圖:
Congratulations,下面你就可以享受OSG的世界了!