OSG 學習第一天 場景的組織及渲染

2021-08-04 18:13:32 字數 3384 閱讀 9497

osg 場景的組織及渲染

前言:翻開導師給的osg學習資料,開啟各個參考書。如《openscenegraph三維渲染引擎程式設計指南 》、《openscenegraph程式開發指南 》。發現osgchina是十年前從我們實驗室走出去的,看著大師兄們留下的資料感覺無比的榮幸;看著他們最初的奮鬥歷程異常艱辛,他們是多麼的努力多麼對學習充滿激情,深感自愧不如。

有意願了解osg在中國的朋友,可以登入 osgchina 檢視。

本文參照:《openscenegraph三維渲染引擎程式設計指南 》

1.geode

osg::geode是osg中的葉節點,用於儲存幾何資訊以便渲染。同時,作為葉節點,它就不會再包含子節點。在應用程式中,所有相關的幾何體的渲染都必須與geode節點相關聯。

類說明:geode 結點,是個幾何結點,可以說是乙個幾何 group 結點,一般的可繪製幾何體都是通過它來 傳向 root 進行渲染。是 osg 幾何繪製的最高管理結點。 

類繼承圖:

1.1佈告板示例

billboard節點繼承自geode節點,因此它是乙個葉節點,不可再包含其他的子節點,只能像葉節點那樣通過新增drawable 來繪製資訊。billboard 有下面3種模式:

enum   moda

#include #include #include #include #include #include #include #include #include #include #include #include #include osg::ref_ptrcreatebillboardtree(osg::ref_ptrimage)

//建立billbroad 物件一

osg::ref_ptrbillbroad1 = new osg::billboard();

//設定旋轉模式為繞視點

billbroad1->setmode(osg::billboard::point_rot_eye);

//新增drawable,並設定其位置,預設位置為osg::vec3(0.0f,0.0f,0.0f)

billbroad1->adddrawable(geometry.get(),osg::vec3(5.0f,0.0f,0.0f));

osg::ref_ptrbillbroad2 = new osg::billboard();

//設定旋轉模式為繞軸轉,因此還需要設定旋轉軸

billbroad2->setmode(osg::billboard::axial_rot);

//設定旋轉軸

billbroad2->setaxis(osg::vec3(0.0f,0.0f,1.0f));

billbroad2->adddrawable(geometry.get(),osg::vec3(10.0f,0.0f,0.0f));

osg::ref_ptrbillbroad = new osg::group();

billbroad->addchild(billbroad1.get());

billbroad->addchild(billbroad2.get());

return billbroad.get();

}int main()

1.  建立新的geometry例項,用於輸入頂點,顏色等資料的osg::vec3array,osg::vec4array變數陣列,以及用於建立點索引的osg::ubytearray,osg:: intarray等。示例**如下:

osg::ref_ptrgeo = new osg::geometry;

osg::vec3array* vecarray = new osg::vec3array; //頂點座標陣列

osg::ubytearray* vecindex = new osg::ubytearray; //頂點索引陣列

osg::vec4array* colarray = new osg::vec4array; //顏色rgb值陣列

osg::ubytearray* colindex = new osg::ubytearray; //顏色索引陣列

osg::vec3array* norarray = new osg::vec3array; //法線座標陣列

osg::ubytearray* norindex = new osg::ubytearray; //法線索引陣列

2.向頂點座標變數陣列中輸入頂點資料,osg::vec3array是乙個模板類,繼承自stl的vector,因此可以使用push_back方法送入osg::vec3的座標資料。顏色資料,法線座標資料的儲存與此類似,不過一般來說顏色資料使用osg::vec4array加以儲存,除了rgb值之外,還包括乙個alpha分量。示例**如下:

vecarray->push_back(osg::vec3(1.0, 0.0, 1.0));

vecarray->push_back(osg::vec3(-1.0, 0.0, 1.0));

vecarray->push_back(osg::vec3(-1.0, 0.0, -1.0));

vecarray->push_back(osg::vec3(1.0, 0.0, -1.0));

colarray->push_back(osg::vec4(1.0, 0.0, 0.0, 1.0)); //red

colarray->push_back(osg::vec4(0.0, 1.0, 0.0, 1.0)); //green

colarray->push_back(osg::vec4(0.0, 0.0, 1.0, 1.0)); //blue

colarray->push_back(osg::vec4(1.0, 1.0, 1.0, 1.0)); //white

norarray->push_back(osg::vec3(0.0, -1.0, 0.0));

2.group

類描述:對結點起到組織作用,一般做為父結點或者根結點出現。它允許有一系列的孩子,相同的孩子或 者孩子之間有引用重得加入的會共享記憶體,是通過父類 osg::referenced 實現自動管理記憶體控制代碼的。

類繼承圖: 

附上group 的子類程式,位置變換節點示例:

#include #include #include #include #include #include #include #include int main()

學習第一天

知識是學會的,不是教會的 程式設計 驗證性或體驗性 創造性 學程式設計的4個階段 1.能看懂別人的 除錯別人的 2.能修改別人的 3.能拷貝別人的 做自己的事 4.能自己設計編寫 方法 多讀 做記錄 執行 修改 執行 練習,光說不練假把式 刷oj總結 寫部落格或許是個不錯的選擇 學生和已經工作的程式...

第一天的學習

matlab mat2gray函式 函式功能 實現影象矩陣的歸一化操作。歸一化 就是使矩陣的每個元素的值都在0和1之間。該函式在數字影象處理中經常用到。在matlab命令視窗中輸入 doc mat2gray或者help mat2gray即可獲得該函式的幫助資訊,鍵入type mat2gray可以檢視...

第一天的學習

今天是我第一天在蘇嵌學習,在經過乙個早上的老師自我介紹和同學們的互相認識後,我們開始了第一天的課程,以下是我這一天的所學和心得體會。1.什麼是嵌入式系統?在以前的計算機中,軟體控制著硬體,但是硬體變化,軟體也要變化,但如今,作業系統在中間,硬體改變,只要作業系統不變,軟體也就不需要變。嵌入式系統的定...