osg 筆記一 (轉)


場景圖形采用一種自頂向下的,分層的樹狀數據結構來組織空間數據集,以提高渲染的效率

 

場景圖形樹結構的頂部是一個根節點,從根節點向下延伸,各個組節點中均包含了幾何信息和用於控制其外觀的渲染狀態信息。根節點和各個組節點都可以有零個(實際上是沒有執行任何操作)或多個子成員。在場景圖形的最底部,各個葉節點包含了構成場景中物體的實際幾何信息。

 

Osg程序使用組節點來組織和排列場景中的幾何體。

 

場景圖形通常包含了多種類型的節點以執行各種各樣的用戶功能,例如開關節點可以設置其子節點可用或不可用,細節層次節點(LOD)可以根據觀察者的距離調用不同的子節點,變換節點可以改變子節點幾何體的坐標變換狀態。

 

場景圖形特征:

1.       提供底層渲染API中具備的幾何信息和狀態管理功能之外,還兼備以下的附加特征和功能:

2.       空間結構:

3.       場景揀選,投影面剔除和隱藏面剔除。

4.       細節層次:

5.       透明

6.       狀態改動最少化

7.       文件I/O

8.       更多高性能函數:全特征文字支持,渲染特效的支持,渲染優化,3d模型文件讀寫支持,跨平台輸入渲染及顯示設備的訪問.

 

場景圖形渲染方式:

三種遍歷操作

1.       更新

2.       揀選

3.       繪制

 

Osg設計所采用的設計理念和工具:

  Ansi標准C++

  C++標准模板庫

  設計模式

 

Osg命名習慣:

   命名空間:小寫字母開頭,然后大寫字母避免混淆。

   類:大寫字母開頭,每個單詞首字母大寫。

   類方法:小寫字母開頭,此后每個單詞首字母大寫。

   類成員:同上

   模板:小寫字母,多個單詞之間使用下划線分隔。

   靜態量:靜態量和函數的名稱使用s_開頭

   全局量:用g_開頭

 

組件:

   一.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可生成頂點法線,也就是所有共享此頂點的面的法線平均值。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM