osg編譯opengl
① 關於opengl和 osg的問題
簡介
OpenSceneGraph是一個開放源碼,跨平台的圖形開發包,它為諸如飛行器模擬,游戲,虛擬現實,科學計算可視化這樣的高性能圖形應用程序開發而設計。它基於場景圖的概念,它提供一個在OpenGL之上的面向對象的框架,從而能把開發者從實現和優化底層圖形的調用中解脫出來,並且它為圖形應用程序的快速開發提供很多附加的實用工具。
特性
有了OpenSceneGraph,我們的目標是讓所有的人在場景圖技術中受益,無論是商業還是非商業的用戶。它完全是由標准C++程序和OpenGL寫的,充分利用STL和設計模式,發揮開源開發模型的優勢來提供一個免費的開發庫,並且重點集中在用戶的需求上。隨著使用一個全特性的場景圖OpenSceneGraph的關鍵優勢在於它的性能、可擴展性、可移植性和快速開發(proctivity),更具體的來說:
性能
支持視圖投影剔除(view frustum culling),隱藏面剔除(occlusion culling),小特性剔除(small feature culling),細節層次節點(LOD),狀態排序(state sorting),頂點數組,頂點緩沖對象(vertex buffer objects),OpenGL著色語言和顯示列表(display lists),以上所列都是場景圖內核的一部分。它們共同使OpenSceneGraph成為一個高性能的圖形庫變為可能,OpenSceneGraph也支持繪制進程(drawing process)的定製,比如場景圖的連續細節層次(CLOD)的網格(參見虛擬地形項目和Delta3D)。
快速開發
場景圖的內核封裝了包括最新擴展的大部分OpenGL功能,提供諸如剔除和排序的渲染優化功能,同樣提供能快速開發高性能圖形應用程序的一整套補充庫。應用程序開發者可以更關心實質性內容和如何操控這些它們,而不再是底層的代碼
??? 通過學習已有的場景圖,比如:Performer和Open Inventor,把它們同像設計模式這樣現代軟體工程理念聯合起來,加上早期開發周期中的大量反饋信息,設計一個清晰的可擴展的庫已經成為可能。用戶可以很簡單的適應OpenSceneGraph並且把它集成到自己的應用程序中
數據裝載
為了讀入和寫出資料庫,有一個資料庫的支持庫(osgDB)增加了通過後綴名動態插件機制,從而支持大量數據格式,目前的發布版本有55種單獨的插件支持3D數據和圖像格式的裝載。支持的3D數據格式包括COLLADA, LightWave (.lwo),Alias Wavefront (.obj),OpenFlight (.flt), 多線程頁面調度支持的TerraPage (.txp),Carbon Graphics GEO (.geo), 3D Studio MAX (.3ds), Peformer (.pfb),AutoCAd (.dxf), Quake Character Models (.md2). Direct X (.x), and Inventor Ascii 2.0 (.iv)/ VRML 1.0 (.wrl), Designer Workshop (.dw) ,AC3D (.ac) 和自帶的.osg ASCII 文本格式。支持的圖像格式包括.rgb, .gif,.jpg, .png, .tiff, .pic, .bmp, .dds (包含壓縮的一系列Mip貼圖影像),.tga and quicktime (在OSX環境下),全范圍的高質量、抗鋸齒字體也能通過freetype插件支持,基於字體的圖像也可以通過.txf插件支持。
用戶也可以通過與我們同行的一個項目(VirtualPlanetBuilder)生成大規模地形空間數據(multi GB),使用OpenSceneGraph的自帶數據分頁調度支持來查看這些數據。
節點工具箱
這個場景圖同樣有一套節點工具集,它們是可以在你的應用程序中編譯或者在運行時裝載的獨立庫,它們增加支持粒子系統(osgParticle),高質量抗鋸齒文本(osgText),特效框架結構(osgFX),陰影框架結構(osgShadow),交互控制(osgManipulator),與虛擬模擬相關的效果(osgSim)。
可移植性
場景圖的內核已經被設計成盡量少的依賴具體的平台,很少的部分超出了標准C++程序和OpenGL。這就使得這個場景圖可以快速移植到大部分系統中—最開始在IRIX開發,然後移植到linux,接著到Windows,再後來就是FreeBSD, Mac OSX,Solaris,HP-UX, AIX 甚至是PlayStation2!
完全獨立與窗口操作系統的場景圖內核庫使得用戶在它上面可以增加他們自己的指定窗口庫和應用程序,在發布版本中osgViewer庫提供自帶窗口支持,可支持Windows (Win32), Unices (X11) 和 OSX (Carbon)。osgViewer庫也可以輕松的和你的窗口開發包集成起來,作為OpenSceneGraph-2.0發布版本的一部分,有例子演示了如何在Qt, GLUT, FLTK, SDL, WxWidget, Cocoa and MFC中的使用。場景圖內核的可擴展性使得它不僅僅可運行在攜帶型設備,甚至高端的多核、多GPU的系統和集群上。這可能是因為場景圖內核為OpenGL的顯示列表和紋理對象支持多重圖形渲染環境(multiple graphics contexts),剔除和繪制的遍歷過程被設計成隱藏渲染數據為局部變數,這樣可以以幾乎只讀的方式使用場景圖內核。這樣就允許多對剔除—繪制過程運行在多個CPU上,CUP也是綁定在多個圖形子系統之上。對多圖形設備渲染環境和多線程的支持可以在osgViewer中方便使用,發布版本中所有的例子都可以以多線程和多GPU的方式運行。作為社區項目,OpenSceneGraph支持多種語言,比如java,Lua和Python。
② OSG是什麼的縮寫
OpenSceneGraph
OpenSceneGraph(簡稱OSG)使用OpenGL技術開發,是一套基於C++平台的應用程序介面(API)。OpenGL技術為圖形元素(多邊形、線、點……)和狀態(光照、材質、陰影……)的編程提供了標准化的介面。而OSG開發的主要意義在於,將3D場景定義為空間中一系列連續的對象,以進行三維世界的管理。正是由於場景及其參數定義的特點,通過狀態轉化、繪圖管道和自定製等操作,OSG還可以用於優化渲染性能。
可以運行OSG的平台需要具備OpenGL的支持能力,以及C++的編譯環境,支持OSG的系統包括Solaris,IRIX,Windows,Mac OSX,HP-UX,Sony Platystation等等,不過XBox除外。
和OpenGL類似,OSG的核心並沒有提供窗口系統的功能。因此用戶可以自由選擇所需的圖形開發介面,如GLUT,X11/Motif,Win32,MacOS X,Qt,wxWindows,Fox等。
OSG採用以下思想和工具進行構建:
· ANSI標准C++;
· C++標准模板庫(STL);
· 設計模式(Design patterns)。
這些工具使得OSG的開發者可以在自己喜好的平台上進行開發,並且依據用戶所要求的平台進行配置。
OSG是一個開源系統,主要包括場景圖形核心,Procer庫,OpenThread庫以及用戶插件四個部分。自Robert Osfield主持這個項目以來,OSG就作為一個開放源代碼的圖形開發工程開始在全球運作了。
目前,部分高性能的軟體已經使用了OSG來渲染復雜的2D和3D場景。雖然大部分基於OSG的軟體更適用於可視化設計和工業模擬,但是在使用3D圖形的每個領域,都已經出現了OSG的身影。這其中包括了地理信息系統(GIS),計算機輔助設計(CAD),建模和數字內容創作(DCC),資料庫開發,虛擬現實,動畫,游戲和娛樂業。
OpenSceneGraph的開發及免費下載網址為:http://www.openscenegraph.org/
③ linux下編譯osg示常式序出錯,請精通osg的高手幫忙。
試試降級gcc
④ 怎麼在ubuntu上安裝boost1.58
安裝好ubuntu14.04之後,下載boost、qt、osg的庫,進行編譯
1.boost
參考http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html
boost提取出來以後,先./configure,生成b2
這里b2好像就是對應1.40以前的bjam,都是boost自己的編譯程序。
再執行./b2 link=static runtime-link=static variant=debug,release
layout=versioned stage --stagedir="/home/username/boost_1_58_0/bin/gcc"
threading=multi
這個命令是個大概的格式,具體可能有些拼寫符號有誤,主要就多說幾點。一個是link和runtime-link,link是在編譯期間,是選擇
static還是shared,如果是static,那麼boost庫在編譯完成後,會綁入輸出的程序,如果是shared,那麼需要放在代碼目錄下,供
引用。runtime-link則是在程序發布之後,如果啟動運行,調用boost庫的方式,如果選擇shared,那麼不但需要把編譯輸出的文件給客
戶,還要給他一堆依賴的動態鏈接庫。
variant是以什麼方式輸出,如果既想要debug 又想要release,那麼就用逗號連接。
但是,如果同時輸出debug,release,會產生命名沖突,必須指定layout=versioned,這樣debug和release出來的庫的名字才不會沖突。
stage編譯的話,編譯完成後,所有的庫文件都會被輸入指定的stagedir裡面,而include文件本身就在boost_1_58_0下面
的boost文件夾中。不需要再執行make
install,install的作用會把所有生成的庫拷入/usr/local/lib裡面,/boost_1_58_0/boost也會拷入/usr
/local/include 裡面,有點多餘
但是stage方式編譯的話,在每次生成依賴boost庫的程序的時候,需要用-I在指定inlucde路徑。可以通過在環境變數文件裡面指定環境
變數,然後g++編譯的時候,指定這個環境變數。關於環境變數參考了這篇:http://blog.csdn.net/tigerjibo
/article/details/8513365
比如我有一個調用boost庫的代碼文件hboost.c,在/home/username/.profile文件裡面指定了
BOOST_ROOT,重啟生效。編譯的時候 執行 g++ -I$BOOST_ROOT hboost.c -o
hboost,就可以輸出編譯結果,再運行./hboost就可以看到程序運行的結果了。
2.qt
qt其實比較簡單,直接進入解壓到目錄,./congfigure;make;make install三個步驟就可以了。不過由於我要用osg 利用qt的庫編譯osgQT所以這里有個坑。
首先,為什麼選擇QT4.8,這是因為它是QT5.0以下的最新版。為什麼不用QT5呢,因為據osgChina裡面的大牛說,好像QT5在osg
裡面進行多線程方面有bug。具體參考這些帖子,http://bbs.osgchina.org/forum.php?mod=viewthread&
amp;tid=13908&highlight=qt5
http://bbs.osgchina.org/forum.php?mod=viewthread&tid=12703&highlight=qt5
其次,為了最後能生成osgQT,需要編譯QT的GLWidget等相關類,所以需要在本機上安裝opengl。開始的時候參考這篇文章
http://www.wikihow.com/Install-Mesa-(OpenGL)-on-Linux-Mint.但運行命令的時候總是告訴我
依賴有問題。於是看到有人說需要更新源(http://forum.ubuntu.org.cn/viewtopic.php?f=48&
t=468366),就又找到了這篇文章http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1
%A8#Trusty.2814.04.29.E7.89.88.E6.9C.AC。這下就全都妥了。
然後進入qt解壓目錄,做./configure -static -debug-and-release -no-sql-sqlite
-no-sql-sqlite2 -no-sql-sqlite_symbian
-opengl生成靜態庫。注意,那幾個no-sql的選項,如果不帶的話,會在下一步make的時候,報
qt_plugin_instance_qsqlite
unresolve之類的錯誤(http://www.qtcentre.org/threads/25304-making-qt-libs-as-
static-problem-under-Linux(ubuntu))。-opengl選項,會讓configure自動去默認路徑尋找opengl
相關的依賴,如果你的opengl安裝的位置不對,他會要求你自己指定其他的位置。
3.osg
osg默認是用cmake來編譯的,所以應該先用apt-get把cmake
cmake-gui搞下來。在編譯的過程中發現,如果本機的依賴庫有問題,有可能會導致編譯或者鏈接失敗。一個比較偷懶的辦法提供給大家。首先,請先更新
你linux的源,之後apt-get build-dep
openscenegraph,這個命令在我這里下載了幾十兆的依賴庫。然後進入到osg的解壓目錄,然後把makefile.txt拖進gui,點擊
configure,勾選group、advanced。如果要編譯Debug那麼先把cmake組裡面的參數build
type(似乎是這個選項)寫Debug,build組裡面的compile
example勾選。然後再點擊一次configure,再點generate。理論上依賴庫應該是沒問題的,因為我們apt-get了那麼多依賴庫對
吧。
然後終端里make,如果報錯,如果報錯是和某個依賴庫有關的,那麼就重新打開cmake-gui,把那個依賴庫選項下的include、library全部刪掉,再重新生成,然後再重新make。如此反復,最終一定會生成一份可用的osg。
當然也可以不下載依賴庫,直接把QT和opengl在默認路徑下准備好,如果這樣的話其實更簡單,直接終端裡面運行./configure就行了,
自動會以release方式cmake出makefile,如果想要Debug方式,那就改一下configure文件。然後make,一般不會有問題。
make結束之後,所有生成的文件會位於解壓文件夾里的bin、lib、inlcude里,把這些拷貝出來,放到另外一個文件夾比如build,然
後把下載到的data文件夾,裡麵包括那個牛、滑翔機和卡車等等經典的模型,也放到這個build裡面,設置一下環境變數,osg應該就可以用了。
設置有關環境變數的問題,需要設置兩個或者三個環境變數。如果在執行完make之後,再執行make
install,那麼只需要設置OSG_FILE_PATH指定data文件夾的位置,並在PATH中指定bin文件夾的位置(這樣可以運行
osgersion,osgiewer這些編譯時附送的應用)。make
install會把include和lib文件夾拷入usr/local下的include、lib文件夾。但是如果沒有執行make
install,那麼需要設置第三個環境變數,那就是LD_LIBRARY_PATH,我的分發版是ubuntu
14.04,sudo gedit /etc/environment打開配置文件,添加export
LD_LIRARY_PATH=$LD_LIBRARYPATH:path to lib然後在終端里執行source
/etc/environment。這樣做是因為在執行osgiewer的時候,如果要讀入cow.osg文件,osg需要lib文件夾下的plugIn
文件夾里的插件來讀取對應格式的文件。由於我我們沒有執行make install所以就需要告訴osg,這個lib文件夾到底在哪裡
http://stackoverflow.com/questions/14012021/osgviewer-cow-does-not-view-a-cow
http://forum.openscenegraph.org/viewtopic.php?t=11021
不得不說,我的osg生成的還是有問題,freetype總是用不了,字體顯示上有些蛋疼。後來很仔細的把cmake裡面的有關freetype的
地址都指定了,也輸出osgdb_freetype.so了,但使用的時候還是出現undefined
symbol錯誤。先不打算搞了,起碼現在主要功能都能用,字體的事先放一放。
http://blog.csdn.net/solofly752/article/details/45481137
⑤ OSG+VS2013運行常式,編譯不通過。出現如下錯誤:
if rv is not None and rsv is not None:
# extract version/subversion
self._nmap_version_number = int(line[rv.start():rv.end()])
self._nmap_subversion_number = int(line[rsv.start()+1:rsv.end()])
break
}
⑥ 小白請教osg(OpenSceneGraph)如何安裝
一下載資料:
1、下載源碼:
在http://www.openscenegraph.org/projects/osg/wiki/Downloads下載穩定版本的源代碼或預編譯包。
source code為源代碼,可以用CMAKE工具生成.sln的解決方案;
binaries為預編譯包,預編譯包不是openscenegraph官方直接維護,而是有其他愛好者上傳,可能會有隱患,最好是從源代碼進行編譯。
版本說明:<主版本號>.<副版本號>.<修訂號>
主版本號高的,功能豐富;副版本號為偶數的為正式版本,比較穩定;副版本號為奇數的為開發者版本,有新特性和功能,但會存在未解決的兼容性和效率問題;開發者版本和正式版本是同步發行的。
下載文件為:OpenSceneGraph-2.8.0.zip
2、下載Cmake工具:
在http://www.cmake.org/cmake/resources/software.html中下載CMake工具cmake-2.8.2-win32-x86.exe。
3、下載SVN軟體(用於下載源碼或第三方庫,有的版本不需要此軟體,可直接下,根據情況定):
在http://tortoisesvn.tigris.org/下載TortoiseSVN。
4、下載第三方庫Dependencies,http://www.openscenegraph.org/projects/osg/wiki/Downloads/Dependencies,
「VisualStudio 8 (2005) SP1 - svn access directory 」
5、下載示例:
在http://www.openscenegraph.org/projects/osg/wiki/Downloads/SampleDatasets中下載示例數據文件OpenSceneGraph-Data-2.8.0.zip 。
二、安裝
1、安裝cmake工具
2、在某盤符下建立osg文件夾,在該文件夾中放置源碼文件、第三方文件和示例文件。
3、運行cmake,
第一行(where is the source code)輸入osg文件夾中的源碼文件;
第二行(where to build the binaries)輸入一個新文件夾名及地址,如osg/build_osg;
點configure,選擇所用的編譯器版本,即c++版本;
點grouped,選擇build項,選擇build_osg_examples和build_osg_wrappers;
選擇cmake項,設置cmake_install_prefix的位置(用於存放編譯完的各種模塊文件,如庫文件、可執行文件和頭文件)
點configure,點advanced,選上build_mfc_example
點configure,
點generate,完成。
此時在osg/build_osg文件中生成了對應編譯版本的.sln文件。
4、用c++編譯器打開該.sln文件,在解決方案管理器窗口中的all_build上右擊,選「生成」,將在osg/build_osg中生成幾個G的文件。
在install上右擊,選「生成」,將在第三步中cmake_install_prefix設置的文件夾中生成編譯完的各種模塊文件(如庫文件、可執行文件和頭文件)。
三、設置環境變數
我的電腦-屬性-高級-環境變數
系統變數
OPENSCENEGRAPH_VERSION=2.8.0
OSGDIR=D:\Program Files\OpenSceneGraph
PATH新增:%OSGDIR%\bin;
%OSGDIR%\bin\osgPlugins-%OPENSCENEGRAPH_VERSION%
OSG_FILE_PATH=%OSGDIR%\data
OSG_NOTIFY_LEVEL=INFO
四、簡單測試
在控制台下輸入osgviewerd cow.osg
五、建立工程環境
1、使VS支持無擴展名頭文件的高亮顯示。
進入visual studio,選擇Tools-Options,選text editor-file extension,在下面的map extensionless files to選項選擇microsoft visual c++。
2、構建基於OSG開發的工程。
1)建一個工程
2)在project-properties中選擇configuration properties-c/c++,在additional include directories中輸入「$(OSGDIR)\include」。
3)選擇configuration properties-linker,在additional library directories中輸入「$(OSGDIR)\lib」。
4)選擇configuration properties-linker-input,打開additional dependencies窗口,准備配置輸入的依賴庫文件名稱。如OpenThreadsd.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgGAd.lib;osgTextd.lib;osgViewerd.lib
注意:Debug版本的工程和Release版本的工程所依賴的OSG庫文件類型相同,但名稱有區別.Debug版本的文件名末尾有"d"標識。根據用戶需要的不同,還可以添加其他庫依賴文件,這些文件在osg的lib文件夾中。
OK,現在可以編代碼,編譯、調試,輸出效果了,體會OSG渲染引擎的強大吧
⑦ OpenGL4.4可以支持OSG開發嗎
OSG是指OpenSceneGraph嗎?支持OpenGL4.4的顯卡,昌信鄭支持OpenSceneGraph 開發沒問耐頌題啊
就OpenSceneGraph基於的坦皮OpenGL版本,看Features頁,說是"OpenGL 1.0 through to OpenGL 4.2, and OpenGL ES 1.1 and 2.0 are supported..."
⑧ java編程,問下opengl是夠可以讀取osg文件
不可以,osg文件是openscenegraph引擎使用的文件,它按照一定的格式保存結游和脊點(node)信息數據,這些數據是共osgDB使用的。opengl只是這個棚雹引擎用來具體畫圖的工具。它不能神滲讀取osg文件!