1. 程式人生 > >osg的一些必須知道的知識

osg的一些必須知道的知識

元件:

   一.Osg核心庫:提供了基本的場景圖形和渲染功能,以及3d圖形程式所需的某些特定功能實現。包括:

1.osg庫:包含了用於建立場景圖形的場景圖形節點類,用作向量和矩陣運算的類,幾何體類,以及用於描述和管理渲染狀態的類,3d圖形程式所需的典型功能類,例如命令列引數解析,動畫路徑管理,以及錯誤和警告資訊類。

2.osgUtil庫:osg工具庫包含的類和函式,可以用於場景圖形及其內容的操作,場景圖形資料統計和優化,以及渲染器的建立。它還包括了幾何操作的類,例如delaunay三角面片化,三角面片條帶化,紋理座標生成等。

3.osgDB 庫:建立和渲染3d資料庫的類和函式:允許使用者程式載入,使用和寫入3d資料庫,它採用外掛管理的架構。osgDB維護外掛的資訊登錄檔,並負責檢查將要 被載入的osg外掛介面的合法性。OsgDB::DatabasePager實現應用程式從檔案中讀取各部分資料庫資訊時,在不干擾當前渲染的前提下以後 臺執行緒的方式進行。

4.osgViewer庫:包含了場景中視口及視覺化內容的管理類。定義了一些視口類,可以將osg整合到許多視窗設計工具中,如MFC,win32等。

5.osgGA庫:用於改寫介面事件。

   二.NodeKits:擴充套件了核心osg場景圖形節點類的功能,以提高高階節點型別和渲染特效。包括如下庫:擴充套件了Nodes,Drawables和 StateAttributes。由兩部分組成,NodeKit本身,以及針對.osg的封裝外掛庫。有以下的幾種NodeKits:

        1.osgFX庫:提供了額外的場景圖形節點,以便於特效的渲染,例如異向光照,凹凸貼圖,卡通著色等。

        2.osgParticle庫:提供了基於例子的渲染特效。如爆炸,火焰,煙霧。

        3.osgSim庫:提供了模擬系統中以及渲染OpenFlight資料庫所需的特殊渲染功能,例如地形高程圖,光點節點,DOF變換節點等。

        4.osgText庫:此類庫提供了向場景中新增文字的得力工具,可以完全支援TrueType字型。

        5.osgTerrain庫:提供了渲染高度場資料的能力。

        6.osgShadow庫:提供了支援陰影渲染的框架結構。

   三.Osg外掛:其中包含了2d影象和3d模型檔案的讀寫功能庫。

   四.互操作庫:使得osg易於與其他的開發環境整合。

為了確保osg可以在更多環境中執行,osg提供了一個與語言無關的,可供執行時訪問的介面。OsgIntrospection庫允許使用者軟體使用反射式和自省式的程式設計正規化與osg進行互動。

   五.不斷擴充套件的程式和例項集:提供了實用的功能函式和正確使用osg的例子。

        1.osgarchive:用於向.osga檔案包中新增新的檔案。也可以用這個程式實現包的分解和列表。

        2.osgconv:這個程式用於轉換檔案格式。它可以將任何檔案格式轉換為經過優化的.ive格式。

        3.osgdem:用於將高程圖等高程資料及影象資料轉化成分頁的地形資料庫。

場景圖形類:osg庫

   osg::Node :所有場景圖形類均繼承自此類。

   Node:場景圖形中所有節點的基類。包含了用於場景圖形遍歷,揀選,程式回撥,以及狀態管理的方法。

   Group:所有可分支節點的基類。

   Geode:相當於osg中的葉節點(geometry node)。沒有子節點,但是包含了osg::Drawable物件,此中存放了將要被渲染的幾何體。

   LOD:此類根據觀察點與影象子節點的距離選擇顯示子節點。通常使用它來建立場景中物體的多個顯示層級。

   MatrixTransform:包含了用於實施子節點幾何體的空間轉換的矩陣,以實現場景物件的旋轉,平移,縮放,傾斜和對映等操作。

   Switch:用布林模板來允許或禁止子節點的運作。

   其他的如:Sequence,PositionAttitudeTransform等

幾何體類:osg庫

   Geode:osg的葉節點,包含了渲染用的幾何資料,使用以下類實現幾何資料的儲存:

   Drawable:用於儲存幾何資料資訊的基類,Geode維護了一個Drawable的列表。純虛類無法例項化,必須實現派生類,如:Geometry,或者ShapeDrawable(允許使用者繪製預定義的幾何形狀,如球,圓錐,矩形體等)。

   Geometry:與PrimitiveSet類相關聯,實現了對opengl頂點陣列功能的高階封裝。儲存了頂點陣列的資料,紋理座標,顏色以及法線陣列。

PrimitiveSet:提供了opengl頂點陣列繪圖命令的高層次支援。使用者可以從Geometry中獲得儲存的資料,再使用這個類制定要繪製的幾何體資料的型別。

Vector類:支援float和double型別。

Array類:陣列型別。

狀態管理類:osg庫

儲存場景所需的opengl渲染狀態,

狀態集合StateSet:osg在此類中儲存一組定義狀態資料(模式和屬性)。場景圖形中的任何一個Node都可與StateSet相關聯。

模式:與glEnable和glDisable相類似。用Osg::StateSet::setMode()可在StateSet中儲存一個模式資訊。

屬性:用於制定狀態資訊,osg::StateSet::setAttribute()在StateSet中儲存屬性資訊。

紋理模式和屬性:StateSet類方法的setTextureMode和setTextureAttribute進行設定。

繼承標記:用於標誌量的操作。用於控制場景圖形遍歷中的狀態值。

osgViewer庫包含了以下三個可能用到的視口類:

     SimpleViewer:負責管理單一場景中的單一視口。使用SimpleViewer時,應用程式應當建立一個視窗並設定當前的圖形上下文。

     Viewer:用於管理多個同步攝像機,他們將從多個方向渲染單一的視口。

     CompositeViewer:此類支援同一視窗的多個視口,也支援不同場景的多個攝像機。

其他實用類:osg庫

涉及到osg的記憶體引用計數策略。

Referenced:所有場景圖形節點和osg的許多其他物件的基類。它實現了一個用於跟蹤記憶體使用情況的引用計數。如果某個繼承自Referenced類的物件引用計數數值到達0,那麼系統將自動呼叫其解構函式並清理為此物件分配的記憶體。

ref_ptr<>:模板類ref_ptr<>為其模板內容定義了一個智慧指標。模板內容必須繼承自Referenced。

Object:純虛類,一切需要I/O支援,拷貝和引用計數的物件的基類。

Notify:osg庫提供了一系列的控制除錯,警告和錯誤輸出的函式。使用者可以通過指定一個來自NotifySeverity列舉量的數值,設定輸出的資訊量。

交運算:osgUtil庫

通過提供大量用於場景圖形交運算,使用如下類可以獲得場景圖形中被拾取部分的資訊:

Intersector:純虛類,定義了相交測試的介面。執行相交測試時,應用程式將繼承自Intersector的某個類例項化,傳遞給IntersectionVisitor的例項,並隨後請求該例項返回資料以獲取交運算的結果。

IntersectionVisitor:IntersectionVisitor搜尋場景圖形中與指定幾何體相交的節點,而最後的測試工作由Intersector繼承類完成。

LineSegmentIntersector:繼承自Intersector,用於檢測指定線段和場景圖形之間的相交情況,並向程式提供查詢相交測試結果的函式。

PolytopeIntersector:與LineSegmentIntersector類似,該類用於檢測由一系列平面構成的多面體的相交情況。當用戶點選滑鼠,希望拾取到滑鼠位置附近的封閉多面體區域時,PolytopeIntersector類尤其有效。

PlaneIntersector:與LineSegmentIntersector類似,用於檢測由一系列平面構成的平面的相交情況。

優化:osgUtil庫

     Optimizer:用於優化場景圖形。

Statistics和StatsVisitor:StatsVisitor返回一個場景圖形中節點的總數和型別,Statistics返回渲染幾何體的總數和型別。

幾何體操作:osgUtil庫

     Simplifier:使用此類用來減少Geometry物件中幾何體的數目,這有助於低細節層次的自動生成。

     Tessellator:根據一組頂點的列表,生成由前述列表描述的多邊形,即一個osg::PrimitiveSet

     DelaunayTriangulator:實現了Delaunay三角網格化運算,根據一組頂點的集合生成一系列的三角形。

     TriStripVisitor:遍歷場景圖圖形並將多邊形圖元轉化成三角形和四邊形條帶。

     SmoothingVisitor:SmoothingVisitor可生成頂點法線,也就是所有共享此頂點的面的法線平均值。

     紋理貼圖生成:包含了建立反射貼圖,中途向量貼圖,高光貼圖。