1. 程式人生 > >OSG學習過程中的筆記

OSG學習過程中的筆記

漫遊 交互式 notify 點擊 tin 大量 節點和 攝像 窗口

1、osg庫:

Notify:osg庫提供了一系列的控制調試,警告和錯誤輸出的函數。用戶可以通過指定一個來自notifyseveritu枚舉量的數值,設定輸出的信息量。

osg::Camera 為視口添加camera的類。用於顯示。

2、交運算osgUtil庫:

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

Intersector:純虛類,定義了相交測試的接口。執行相交測試時,應用程序將繼承自intersector的某個類實例化,傳遞給intersectionvisitor的實例,並隨後請求該實例返回數據以獲取交運算的結果。

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

lineSegmentIntersector:繼承自intersector,用於檢測指定線段和場景圖形之間的相交的節點,並向程序提供查詢相交測試結果的函數。

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

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

3、漫遊器

漫遊器是操作器中很重要的一種,實現自定義的操作器。osg自帶的操作器是TrackBall。

場景的核心管理器是viewer,而漫遊時需要響應事件,如鼠標移動,場景也會隨之變化,響應事件的類是osgGA::GUIEventHandler。需要從響應事件的類派生一個新類出來,這個類專門用於根據響應控制viewer。這個類就是osgGA::CameraManipulator,這個類有一些操作矩陣的公共接口,而viewer在渲染時又會去讀取這些矩陣,通過操作變換矩陣,這些接口就可以有效控制viewer了。

4、視景器

視景器包括幾個最主要的組件:漫遊器_cameraManipulator,用於實現交互式的場景漫遊;事件處理器組_eventHandlers,負責處理視景器的事件隊列_eventQuene,主要是鍵盤鼠標事件的處理;場景_scene,它包括視景器所對應的場景圖形根節點,以及用於提高節點和圖像數據處理速度的兩個分頁數據庫:攝像機_camera和_slaves,前者為場景的住攝像機,後者為從攝像機,不過OSG並沒有規定一定要使用主攝像機來顯示場景,它的更重要的作用是為OSG世界矩陣的計算提供依據。

攝像機是OSG視圖顯示的核心器件,沒有攝像機就沒有辦法將場景圖形的實景展現給用戶。它包括:

1.視口(viewport),它指示了攝像機顯示窗口的位置和尺寸。

2.圖形上下文(GraphicsContext),通常這就是平臺相關的圖形顯示窗口(即GraphicsWindow,對於Win32系統而言,它實際是通過CreateWindowEx這個API創建的),不過也可能是離屛渲染的設備。

3.渲染器(GraphicsOperation,更多時候是osgViewer::Renderer)這時整個OSG篩選(CULL)和繪制(DRAW)的關鍵。

5、多視口的創建

1、多相機創建多視口

一個視景器,一個圖形上下文,多個相機。

2、多窗口創建多視口

一個視景器,多個圖形上下文,多個相機。每一個窗口都包含一個設備上下文。

3、CompositeViewer創建多視口

   多個視景器,多個相機,一個圖形上下文。很多程序的首選。不僅可以讓數據在各個viewer之間方便的傳遞,也可以讓各個viewer獨立運作,每個viewer可以使用不同的操作器。

OSG學習過程中的筆記