OSG学习之路(一)osg各个库的用途
介紹一下osg各個(gè)庫(kù)的用途
組件
提供了基本的場(chǎng)景圖形和渲染功能,以及3d圖形程序所需的某些特定功能實(shí)現(xiàn)。包括:
- osg庫(kù)
包含了用于創(chuàng)建場(chǎng)景圖形的場(chǎng)景圖形節(jié)點(diǎn)類,用作向量和矩陣運(yùn)算的類,幾何體類,以及用于描述和管理渲染狀態(tài)的類,3d圖形程序所需的典型功能類,例如命令行參數(shù)解析,動(dòng)畫路徑管理,以及錯(cuò)誤和警告信息類。 - osgUtil庫(kù)
osg工具庫(kù)包含的類和函數(shù),可以用于場(chǎng)景圖形及其內(nèi)容的操作,場(chǎng)景圖形數(shù)據(jù)統(tǒng)計(jì)和優(yōu)化,以及渲染器的創(chuàng)建。它還包括了幾何操作的類,例如delaunay三角面片化,三角面片條帶化,紋理坐標(biāo)生成等。 - osgDB 庫(kù)
建立和渲染3d數(shù)據(jù)庫(kù)的類和函數(shù):允許用戶程序加載,使用和寫入3d數(shù)據(jù)庫(kù),它采用插件管理的架構(gòu)。osgDB維護(hù)插件的信息注冊(cè)表,并負(fù)責(zé)檢查將要 被載入的osg插件接口的合法性。OsgDB::DatabasePager實(shí)現(xiàn)應(yīng)用程序從文件中讀取各部分?jǐn)?shù)據(jù)庫(kù)信息時(shí),在不干擾當(dāng)前渲染的前提下以后 臺(tái)線程的方式進(jìn)行。 - osgViewer庫(kù)
包含了場(chǎng)景中視口及可視化內(nèi)容的管理類。定義了一些視口類,可以將osg集成到許多視窗設(shè)計(jì)工具中,如MFC,win32等。 - osgGA庫(kù)
用于改寫界面事件。
NodeKits
擴(kuò)展了核心osg場(chǎng)景圖形節(jié)點(diǎn)類的功能,以提高高級(jí)節(jié)點(diǎn)類型和渲染特效。包括如下庫(kù):擴(kuò)展了Nodes,Drawables和 StateAttributes。由兩部分組成,NodeKit本身,以及針對(duì).osg的封裝插件庫(kù)。有以下的幾種NodeKits:
osgFX庫(kù)
提供了額外的場(chǎng)景圖形節(jié)點(diǎn),以便于特效的渲染,例如異向光照,凹凸貼圖,卡通著色等。
osgParticle庫(kù)
提供了基于例子的渲染特效。如爆炸,火焰,煙霧。
osgSim庫(kù)
提供了仿真系統(tǒng)中以及渲染OpenFlight數(shù)據(jù)庫(kù)所需的特殊渲染功能,例如地形高程圖,光點(diǎn)節(jié)點(diǎn),DOF變換節(jié)點(diǎn)等。
osgText庫(kù)
此類庫(kù)提供了向場(chǎng)景中添加文字的得力工具,可以完全支持TrueType字體。
osgTerrain庫(kù)
提供了渲染高度場(chǎng)數(shù)據(jù)的能力。
osgShadow庫(kù)
提供了支持陰影渲染的框架結(jié)構(gòu)。
Osg插件
其中包含了2d圖像和3d模型文件的讀寫功能庫(kù)。
使得osg易于與其他的開發(fā)環(huán)境集成。為了確保osg可以在更多環(huán)境中運(yùn)行,osg提供了一個(gè)與語(yǔ)言無關(guān)的,可供運(yùn)行時(shí)訪問的接口。OsgIntrospection庫(kù)允許用戶軟件使用反射式和自省式的編程范式與osg進(jìn)行交互。
提供了實(shí)用的功能函數(shù)和正確使用osg的例子。
1.osgarchive:用于向.osga文件包中添加新的文件。也可以用這個(gè)程序?qū)崿F(xiàn)包的分解和列表。
2.osgconv:這個(gè)程序用于轉(zhuǎn)換文件格式。它可以將任何文件格式轉(zhuǎn)換為經(jīng)過優(yōu)化的.ive格式。
3.osgdem:用于將高程圖等高程數(shù)據(jù)及圖像數(shù)據(jù)轉(zhuǎn)化成分頁(yè)的地形數(shù)據(jù)庫(kù)。
場(chǎng)景圖形類
osg::Node :所有場(chǎng)景圖形類均繼承自此類。
Node:場(chǎng)景圖形中所有節(jié)點(diǎn)的基類。包含了用于場(chǎng)景圖形遍歷,揀選,程序回調(diào),以及狀態(tài)管理的方法。
Group:所有可分支節(jié)點(diǎn)的基類。
Geode:相當(dāng)于osg中的葉節(jié)點(diǎn)(geometry node)。沒有子節(jié)點(diǎn),但是包含了osg::Drawable對(duì)象,此中存放了將要被渲染的幾何體。
LOD:此類根據(jù)觀察點(diǎn)與圖像子節(jié)點(diǎn)的距離選擇顯示子節(jié)點(diǎn)。通常使用它來創(chuàng)建場(chǎng)景中物體的多個(gè)顯示層級(jí)。
MatrixTransform:包含了用于實(shí)施子節(jié)點(diǎn)幾何體的空間轉(zhuǎn)換的矩陣,以實(shí)現(xiàn)場(chǎng)景對(duì)象的旋轉(zhuǎn),平移,縮放,傾斜和映射等操作。
Switch:用布爾模板來允許或禁止子節(jié)點(diǎn)的運(yùn)作。
其他的如:Sequence,PositionAttitudeTransform等
幾何體類:osg庫(kù)
Geode:osg的葉節(jié)點(diǎn),包含了渲染用的幾何數(shù)據(jù),使用以下類實(shí)現(xiàn)幾何數(shù)據(jù)的存儲(chǔ):
Drawable:用于存儲(chǔ)幾何數(shù)據(jù)信息的基類,Geode維護(hù)了一個(gè)Drawable的列表。純虛類無法實(shí)例化,必須實(shí)現(xiàn)派生類,如:Geometry,或者ShapeDrawable(允許用戶繪制預(yù)定義的幾何形狀,如球,圓錐,矩形體等)。
Geometry:與PrimitiveSet類相關(guān)聯(lián),實(shí)現(xiàn)了對(duì)opengl頂點(diǎn)數(shù)組功能的高級(jí)封裝。保存了頂點(diǎn)數(shù)組的數(shù)據(jù),紋理坐標(biāo),顏色以及法線數(shù)組。
PrimitiveSet:提供了opengl頂點(diǎn)數(shù)組繪圖命令的高層次支持。用戶可以從Geometry中獲得保存的數(shù)據(jù),再使用這個(gè)類制定要繪制的幾何體數(shù)據(jù)的類型。
Vector類:支持float和double類型。
Array類:數(shù)組類型。
狀態(tài)管理類:osg庫(kù)
保存場(chǎng)景所需的opengl渲染狀態(tài),
狀態(tài)集合StateSet:osg在此類中保存一組定義狀態(tài)數(shù)據(jù)(模式和屬性)。場(chǎng)景圖形中的任何一個(gè)Node都可與StateSet相關(guān)聯(lián)。
模式:與glEnable和glDisable相類似。用Osg::StateSet::setMode()可在StateSet中保存一個(gè)模式信息。
屬性:用于制定狀態(tài)信息,osg::StateSet::setAttribute()在StateSet中保存屬性信息。
紋理模式和屬性:StateSet類方法的setTextureMode和setTextureAttribute進(jìn)行設(shè)置。
繼承標(biāo)記:用于標(biāo)志量的操作。用于控制場(chǎng)景圖形遍歷中的狀態(tài)值。
osgViewer庫(kù)包含了以下三個(gè)可能用到的視口類:
SimpleViewer:負(fù)責(zé)管理單一場(chǎng)景中的單一視口。使用SimpleViewer時(shí),應(yīng)用程序應(yīng)當(dāng)創(chuàng)建一個(gè)窗口并設(shè)置當(dāng)前的圖形上下文。
Viewer:用于管理多個(gè)同步攝像機(jī),他們將從多個(gè)方向渲染單一的視口。
CompositeViewer:此類支持同一窗口的多個(gè)視口,也支持不同場(chǎng)景的多個(gè)攝像機(jī)。
其他實(shí)用類:osg庫(kù)
涉及到osg的內(nèi)存引用計(jì)數(shù)策略。
Referenced:所有場(chǎng)景圖形節(jié)點(diǎn)和osg的許多其他對(duì)象的基類。它實(shí)現(xiàn)了一個(gè)用于跟蹤內(nèi)存使用情況的引用計(jì)數(shù)。如果某個(gè)繼承自Referenced類的對(duì)象引用計(jì)數(shù)數(shù)值到達(dá)0,那么系統(tǒng)將自動(dòng)調(diào)用其析構(gòu)函數(shù)并清理為此對(duì)象分配的內(nèi)存。
ref_ptr<>:模板類ref_ptr<>為其模板內(nèi)容定義了一個(gè)智能指針。模板內(nèi)容必須繼承自Referenced。
Object:純虛類,一切需要I/O支持,拷貝和引用計(jì)數(shù)的對(duì)象的基類。
Notify:osg庫(kù)提供了一系列的控制調(diào)試,警告和錯(cuò)誤輸出的函數(shù)。用戶可以通過指定一個(gè)來自NotifySeverity枚舉量的數(shù)值,設(shè)定輸出的信息量。
交運(yùn)算:osgUtil庫(kù)
通過提供大量用于場(chǎng)景圖形交運(yùn)算,使用如下類可以獲得場(chǎng)景圖形中被拾取部分的信息:
Intersector:純虛類,定義了相交測(cè)試的接口。執(zhí)行相交測(cè)試時(shí),應(yīng)用程序?qū)⒗^承自Intersector的某個(gè)類實(shí)例化,傳遞給IntersectionVisitor的實(shí)例,并隨后請(qǐng)求該實(shí)例返回?cái)?shù)據(jù)以獲取交運(yùn)算的結(jié)果。
IntersectionVisitor:IntersectionVisitor搜索場(chǎng)景圖形中與指定幾何體相交的節(jié)點(diǎn),而最后的測(cè)試工作由Intersector繼承類完成。
LineSegmentIntersector:繼承自Intersector,用于檢測(cè)指定線段和場(chǎng)景圖形之間的相交情況,并向程序提供查詢相交測(cè)試結(jié)果的函數(shù)。
PolytopeIntersector:與LineSegmentIntersector類似,該類用于檢測(cè)由一系列平面構(gòu)成的多面體的相交情況。當(dāng)用戶點(diǎn)擊鼠標(biāo),希望拾取到鼠標(biāo)位置附近的封閉多面體區(qū)域時(shí),PolytopeIntersector類尤其有效。
PlaneIntersector:與LineSegmentIntersector類似,用于檢測(cè)由一系列平面構(gòu)成的平面的相交情況。
優(yōu)化:osgUtil庫(kù)
Optimizer:用于優(yōu)化場(chǎng)景圖形。
Statistics和StatsVisitor:StatsVisitor返回一個(gè)場(chǎng)景圖形中節(jié)點(diǎn)的總數(shù)和類型,Statistics返回渲染幾何體的總數(shù)和類型。
幾何體操作:osgUtil庫(kù)
Simplifier:使用此類用來減少Geometry對(duì)象中幾何體的數(shù)目,這有助于低細(xì)節(jié)層次的自動(dòng)生成。
Tessellator:根據(jù)一組頂點(diǎn)的列表,生成由前述列表描述的多邊形,即一個(gè)osg::PrimitiveSet
DelaunayTriangulator:實(shí)現(xiàn)了Delaunay三角網(wǎng)格化運(yùn)算,根據(jù)一組頂點(diǎn)的集合生成一系列的三角形。
TriStripVisitor:遍歷場(chǎng)景圖圖形并將多邊形圖元轉(zhuǎn)化成三角形和四邊形條帶。
SmoothingVisitor:SmoothingVisitor可生成頂點(diǎn)法線,也就是所有共享此頂點(diǎn)的面的法線平均值。
紋理貼圖生成:包含了建立反射貼圖,中途向量貼圖,高光貼圖。
總結(jié)
以上是生活随笔為你收集整理的OSG学习之路(一)osg各个库的用途的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据仓库建设Best Pratice学习
- 下一篇: ppt目录页的设计布局有哪些