




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一 旋轉(zhuǎn)其中 trans-setMatrix(osg:Matrix:translate(0,0,20);就是用來平移物體,這個(gè)表示象Z軸正方向平移也就是屏幕正上方。osg:Matrix:scale(0.5,0.5,0.5)表示縮放的比例,也就是原來物體的一般大小osg:Matrix:rotate(osg:DegreesToRadians(90.0),0,1,0)該方法參數(shù)分別表示角度,x,y,z當(dāng)xyz其中有值是那么物體會(huì)繞著物體旋轉(zhuǎn)。當(dāng)角度為正值的時(shí)候,物體繞著x,y,z箭頭指向向右旋轉(zhuǎn),否則物體繞著x,y,z箭頭指向向左旋轉(zhuǎn)osg筆記(一) 2011-07-05 19:37:29| 分類:
2、 OSG | 標(biāo)簽: |字號(hào)大中小 訂閱 場景圖形采用一種自頂向下的,分層的樹狀數(shù)據(jù)結(jié)構(gòu)來組織空間數(shù)據(jù)集,以提高渲染的效率場景圖形樹結(jié)構(gòu)的頂部是一個(gè)根節(jié)點(diǎn),從根節(jié)點(diǎn)向下延伸,各個(gè)組節(jié)點(diǎn)中均包含了幾何信息和用于控制其外觀的渲染狀態(tài)信息。根節(jié)點(diǎn)和各個(gè)組節(jié)點(diǎn)都可以有零個(gè)(實(shí)際上是沒有執(zhí)行任何操作)或多個(gè)子成員。在場景圖形的最底部,各個(gè)葉節(jié)點(diǎn)包含了構(gòu)成場景中物體的實(shí)際幾何信息。Osg程序使用組節(jié)點(diǎn)來組織和排列場景中的幾何體。場景圖形通常包含了多種類型的節(jié)點(diǎn)以執(zhí)行各種各樣的用戶功能,例如開關(guān)節(jié)點(diǎn)可以設(shè)置其子節(jié)點(diǎn)可用或不可用,細(xì)節(jié)層次節(jié)點(diǎn)(LOD)可以根據(jù)觀察者的距離調(diào)用不同的子節(jié)點(diǎn),變換節(jié)點(diǎn)可以改變子節(jié)
3、點(diǎn)幾何體的坐標(biāo)變換狀態(tài)。場景圖形特征:1. 提供底層渲染API中具備的幾何信息和狀態(tài)管理功能之外,還兼?zhèn)湟韵碌母郊犹卣骱凸δ埽?. 空間結(jié)構(gòu):3. 場景揀選,投影面剔除和隱藏面剔除。4. 細(xì)節(jié)層次:5. 透明6. 狀態(tài)改動(dòng)最少化7. 文件I/O8. 更多高性能函數(shù):全特征文字支持,渲染特效的支持,渲染優(yōu)化,3d模型文件讀寫支持,跨平臺(tái)輸入渲染及顯示設(shè)備的訪問.場景圖形渲染方式:三種遍歷操作1. 更新2. 揀選3. 繪制Osg設(shè)計(jì)所采用的設(shè)計(jì)理念和工具:Ansi標(biāo)準(zhǔn)C+C+標(biāo)準(zhǔn)模板庫設(shè)計(jì)模式Osg命名習(xí)慣:命名空間:小寫字母開頭,然后大寫字母避免混淆。類:大寫字母開頭,每個(gè)單詞首字母大寫。類方法
4、:小寫字母開頭,此后每個(gè)單詞首字母大寫。類成員:同上模板:小寫字母,多個(gè)單詞之間使用下劃線分隔。靜態(tài)量:靜態(tài)量和函數(shù)的名稱使用s_開頭全局量:用g_開頭組件:一.Osg核心庫:提供了基本的場景圖形和渲染功能,以及3d圖形程序所需的某些特定功能實(shí)現(xiàn)。包括:1.osg庫:包含了用于創(chuàng)建場景圖形的場景圖形節(jié)點(diǎn)類,用作向量和矩陣運(yùn)算的類,幾何體類,以及用于描述和管理渲染狀態(tài)的類,3d圖形程序所需的典型功能類,例如命令行參數(shù)解析,動(dòng)畫路徑管理,以及錯(cuò)誤和警告信息類。2.osgUtil庫:osg工具庫包含的類和函數(shù),可以用于場景圖形及其內(nèi)容的操作,場景圖形數(shù)據(jù)統(tǒng)計(jì)和優(yōu)化,以及渲染器的創(chuàng)建。它還包括了幾何操
5、作的類,例如delaunay三角面片化,三角面片條帶化,紋理坐標(biāo)生成等。3.osgDB庫:建立和渲染3d數(shù)據(jù)庫的類和函數(shù):允許用戶程序加載,使用和寫入3d數(shù)據(jù)庫,它采用插件管理的架構(gòu)。osgDB維護(hù)插件的信息注冊(cè)表,并負(fù)責(zé)檢查將要被載入的osg插件接口的合法性。OsgDB:DatabasePager實(shí)現(xiàn)應(yīng)用程序從文件中讀取各部分?jǐn)?shù)據(jù)庫信息時(shí),在不干擾當(dāng)前渲染的前提下以后臺(tái)線程的方式進(jìn)行。4.osgViewer庫:包含了場景中視口及可視化內(nèi)容的管理類。定義了一些視口類,可以將osg集成到許多視窗設(shè)計(jì)工具中,如MFC,win32等。5.osgGA庫:用于改寫界面事件。二.NodeKits:擴(kuò)展了核
6、心osg場景圖形節(jié)點(diǎn)類的功能,以提高高級(jí)節(jié)點(diǎn)類型和渲染特效。包括如下庫:擴(kuò)展了Nodes,Drawables和StateAttributes。由兩部分組成,NodeKit本身,以及針對(duì).osg的封裝插件庫。有以下的幾種NodeKits:1.osgFX庫:提供了額外的場景圖形節(jié)點(diǎn),以便于特效的渲染,例如異向光照,凹凸貼圖,卡通著色等。2.osgParticle庫:提供了基于例子的渲染特效。如爆炸,火焰,煙霧。3.osgSim庫:提供了仿真系統(tǒng)中以及渲染OpenFlight數(shù)據(jù)庫所需的特殊渲染功能,例如地形高程圖,光點(diǎn)節(jié)點(diǎn),DOF變換節(jié)點(diǎn)等。4.osgText庫:此類庫提供了向場景中添加文字的得力
7、工具,可以完全支持TrueType字體。5.osgTerrain庫:提供了渲染高度場數(shù)據(jù)的能力。6.osgShadow庫:提供了支持陰影渲染的框架結(jié)構(gòu)。三.Osg插件:其中包含了2d圖像和3d模型文件的讀寫功能庫。四.互操作庫:使得osg易于與其他的開發(fā)環(huán)境集成。為了確保osg可以在更多環(huán)境中運(yùn)行,osg提供了一個(gè)與語言無關(guān)的,可供運(yùn)行時(shí)訪問的接口。OsgIntrospection庫允許用戶軟件使用反射式和自省式的編程范式與osg進(jìn)行交互。五.不斷擴(kuò)展的程序和實(shí)例集:提供了實(shí)用的功能函數(shù)和正確使用osg的例子。1.osgarchive:用于向.osga文件包中添加新的文件。也可以用這個(gè)程序?qū)崿F(xiàn)
8、包的分解和列表。2.osgconv:這個(gè)程序用于轉(zhuǎn)換文件格式。它可以將任何文件格式轉(zhuǎn)換為經(jīng)過優(yōu)化的.ive格式。3.osgdem:用于將高程圖等高程數(shù)據(jù)及圖像數(shù)據(jù)轉(zhuǎn)化成分頁的地形數(shù)據(jù)庫。場景圖形類:osg庫osg:Node :所有場景圖形類均繼承自此類。Node:場景圖形中所有節(jié)點(diǎn)的基類。包含了用于場景圖形遍歷,揀選,程序回調(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)。通常使用它來
9、創(chuàng)建場景中物體的多個(gè)顯示層級(jí)。MatrixTransform:包含了用于實(shí)施子節(jié)點(diǎn)幾何體的空間轉(zhuǎn)換的矩陣,以實(shí)現(xiàn)場景對(duì)象的旋轉(zhuǎn),平移,縮放,傾斜和映射等操作。Switch:用布爾模板來允許或禁止子節(jié)點(diǎn)的運(yùn)作。其他的如:Sequence,PositionAttitudeTransform等幾何體類:osg庫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ù)定義的幾何形狀,如球
10、,圓錐,矩形體等)。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庫保存場景所需的opengl渲染狀態(tài),狀態(tài)集合StateSet:osg在此類中保存一組定義狀態(tài)數(shù)據(jù)(模式和屬性)。場景圖形中的任何一個(gè)Node都可與StateSet相關(guān)聯(lián)。模式:與
11、glEnable和glDisable相類似。用Osg:StateSet:setMode()可在StateSet中保存一個(gè)模式信息。屬性:用于制定狀態(tài)信息,osg:StateSet:setAttribute()在StateSet中保存屬性信息。紋理模式和屬性:StateSet類方法的setTextureMode和setTextureAttribute進(jìn)行設(shè)置。繼承標(biāo)記:用于標(biāo)志量的操作。用于控制場景圖形遍歷中的狀態(tài)值。osgViewer庫包含了以下三個(gè)可能用到的視口類:SimpleViewer:負(fù)責(zé)管理單一場景中的單一視口。使用SimpleViewer時(shí),應(yīng)用程序應(yīng)當(dāng)創(chuàng)建一個(gè)窗口并設(shè)置當(dāng)前的圖形
12、上下文。Viewer:用于管理多個(gè)同步攝像機(jī),他們將從多個(gè)方向渲染單一的視口。CompositeViewer:此類支持同一窗口的多個(gè)視口,也支持不同場景的多個(gè)攝像機(jī)。其他實(shí)用類:osg庫涉及到osg的內(nèi)存引用計(jì)數(shù)策略。Referenced:所有場景圖形節(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支持,拷貝
13、和引用計(jì)數(shù)的對(duì)象的基類。Notify:osg庫提供了一系列的控制調(diào)試,警告和錯(cuò)誤輸出的函數(shù)。用戶可以通過指定一個(gè)來自NotifySeverity枚舉量的數(shù)值,設(shè)定輸出的信息量。交運(yùn)算:osgUtil庫通過提供大量用于場景圖形交運(yùn)算,使用如下類可以獲得場景圖形中被拾取部分的信息:Intersector:純虛類,定義了相交測試的接口。執(zhí)行相交測試時(shí),應(yīng)用程序?qū)⒗^承自Intersector的某個(gè)類實(shí)例化,傳遞給IntersectionVisitor的實(shí)例,并隨后請(qǐng)求該實(shí)例返回?cái)?shù)據(jù)以獲取交運(yùn)算的結(jié)果。IntersectionVisitor:IntersectionVisitor搜索場景圖形中與指定幾何
14、體相交的節(jié)點(diǎn),而最后的測試工作由Intersector繼承類完成。LineSegmentIntersector:繼承自Intersector,用于檢測指定線段和場景圖形之間的相交情況,并向程序提供查詢相交測試結(jié)果的函數(shù)。Intersections:交叉點(diǎn)。Iterator:迭代程序。PolytopeIntersector:與LineSegmentIntersector類似,該類用于檢測由一系列平面構(gòu)成的多面體的相交情況。當(dāng)用戶點(diǎn)擊鼠標(biāo),希望拾取到鼠標(biāo)位置附近的封閉多面體區(qū)域時(shí),PolytopeIntersector類尤其有效。PlaneIntersector:與LineSegmentInter
15、sector類似,用于檢測由一系列平面構(gòu)成的平面的相交情況。優(yōu)化:osgUtil庫Optimizer:用于優(yōu)化場景圖形。Statistics和StatsVisitor:StatsVisitor返回一個(gè)場景圖形中節(jié)點(diǎn)的總數(shù)和類型,Statistics返回渲染幾何體的總數(shù)和類型。幾何體操作:osgUtil庫Simplifier:使用此類用來減少Geometry對(duì)象中幾何體的數(shù)目,這有助于低細(xì)節(jié)層次的自動(dòng)生成。Tessellator:根據(jù)一組頂點(diǎn)的列表,生成由前述列表描述的多邊形,即一個(gè)osg:PrimitiveSetDelaunayTriangulator:實(shí)現(xiàn)了Delaunay三角網(wǎng)格化運(yùn)算,根
16、據(jù)一組頂點(diǎn)的集合生成一系列的三角形。TriStripVisitor:遍歷場景圖圖形并將多邊形圖元轉(zhuǎn)化成三角形和四邊形條帶。SmoothingVisitor:SmoothingVisitor可生成頂點(diǎn)法線,也就是所有共享此頂點(diǎn)的面的法線平均值。紋理貼圖生成:包含了建立反射貼圖,中途向量貼圖,高光貼圖。osg筆記二 2011-07-08 17:37:06| 分類: OSG | 標(biāo)簽: |字號(hào)大中小 訂閱 一內(nèi)存管理Osg的“廢棄物”收集系統(tǒng)有以下兩個(gè)組件:通用的基類:osg:Referenced,所有的osg節(jié)點(diǎn)和場景圖形均繼承自這一基類,它包含了一個(gè)整形的引用計(jì)數(shù)器。Osg定義的智能指針模板類r
17、ef_ptr。當(dāng)代碼中一個(gè)Referenced對(duì)象指針賦予類型變量ref_ptr時(shí),Referenced類的引用計(jì)數(shù)器會(huì)自動(dòng)加一。當(dāng)你創(chuàng)建任何繼承自Referenced的場景圖形節(jié)點(diǎn)或數(shù)據(jù)時(shí),你的應(yīng)用程序不可以直接釋放其內(nèi)存空間。Referenced類:實(shí)現(xiàn)了對(duì)內(nèi)存區(qū)段的引用計(jì)數(shù)器功能。包括三個(gè)主要組成部分:保護(hù)成員整形變量:_refCount,用作引用計(jì)數(shù)。公有函數(shù)ref()和unref()用于實(shí)現(xiàn)_refCount的增加或減少。不需要直接調(diào)用。作為保護(hù)成員存在的虛析構(gòu)函數(shù)。ref_ptr模板類:用于實(shí)現(xiàn)一個(gè)指向Referenced對(duì)象的智能指針,并對(duì)其引用計(jì)數(shù)器進(jìn)行管理。包含以下三個(gè)主要的
18、組成部分:一個(gè)私有指針_ptr:用于保存管理內(nèi)存區(qū)域的地址。 可以用get()方法返回_ptr的值。為了使ref_ptr可以像正常指針一樣工作,重載或定義了一些方法,如operator-()和Operator-()等。Valid方法用于判斷ref_ptr是否為空,不為NULL則返回true。總結(jié):1將派生自Referenced的對(duì)象賦予ref_ptr變量,將自動(dòng)調(diào)用Referenced:ref()并使引用計(jì)數(shù)加一。2.如果將ref_ptr變量指向其他的對(duì)象,或者將其釋放,那么將調(diào)用Referenced:unref(),使引用計(jì)數(shù)減一,當(dāng)引用計(jì)數(shù)的值為零時(shí),unref()自動(dòng)釋放對(duì)象所占用的內(nèi)存
19、空間。3.為新的Referenced對(duì)象開辟內(nèi)存空間時(shí),要盡量將其賦予ref_ptr,以保證osg的內(nèi)存管理工作正確。二葉節(jié)點(diǎn)和幾何信息Geometry概述向量與數(shù)組類:Osg:vec3可用來保存頂點(diǎn)和法線數(shù)據(jù);osg:vec4可用來保存顏色數(shù)據(jù);osg:vec2可用來保存2d紋理坐標(biāo),還提供了相關(guān)的向量計(jì)算函數(shù)。模板數(shù)組類:模板最常用法是保存向量數(shù)據(jù),如osg:Vec2Array,osg:Vec3Array,osg:Vec4Array,所有的模板數(shù)組類都繼承自std:vectorDrawables類用于保存將要渲染的數(shù)據(jù)。是一個(gè)無法直接實(shí)例化的虛基類。Osg核心庫從Drawables派生了三
20、個(gè)子類:Osg:DrawPixels,封裝了glDrawPixels()的相關(guān)功能;osg:ShapeDrawable,提供了一些已經(jīng)定義好的幾何體的接口,如圓柱體和球;osg:Geometry,使用的多,靈活。Geometry一些方法:setVertexArray(),setColorArray(),setNormalArray()setColorBinding(),setNormalBinding():設(shè)置顏色和法線綁定方式,參數(shù)是geometry的枚舉變量 BIND_OFF=0,BIND_OVERALL,BIND_PER_PRIMITIVE_SET,BIND_PER_PRIMITIVE,
21、BIND_PER_VERTEXAddPrimitiveSet:用于設(shè)置Geometry類數(shù)據(jù)渲染的方法。參數(shù)為PrimitiveSet* primitiveset:PrimitiveSet無法實(shí)例化的虛基類。PrimitiveSet的子類:DrawArrays(GLenum mode, GLint first, GLsizei count, int numInstances=0)。葉節(jié)點(diǎn)Osg:Geode是osg的葉節(jié)點(diǎn),它用于保存幾何信息用于渲染。三 組節(jié)點(diǎn)Group允許用戶程序?yàn)槠涮砑尤我鈹?shù)量的子節(jié)點(diǎn),子節(jié)點(diǎn)本身也可以繼續(xù)分發(fā)子節(jié)點(diǎn)。并且派生出了許多的子類:osg:Transform,os
22、g:LOD,osg:Switch等。由Referenced派生,可以自動(dòng)管理內(nèi)存空間。Osg編程的核心部分,它使得用戶應(yīng)用程序可以有效組織場景圖形中的數(shù)據(jù),它的強(qiáng)大之處在于它管理子節(jié)點(diǎn)的接口,還從Node處繼承了管理父節(jié)點(diǎn)的接口。1.子接口:Group使用std:vectorref_ptr來保存所有節(jié)點(diǎn)的指針,數(shù)組指針,因此可以使用索引來訪問某個(gè)子節(jié)點(diǎn)。2.父接口:Group從Node那里繼承了父節(jié)點(diǎn)管理的接口,允許節(jié)點(diǎn)有多個(gè)父節(jié)點(diǎn)。3.變換節(jié)點(diǎn):Tranform對(duì)OpenGL的模型視圖矩陣堆棧產(chǎn)生影響。虛基類,無法實(shí)例化。用戶應(yīng)當(dāng)使用osg:MatrixTransform或osg:Posit
23、ionAttitudeTransform來替代它,這兩者均繼承自Tranform。Matrix:osg中的矩陣類,采用左乘,列數(shù)組矩陣,與opengl相反。矩陣變換節(jié)點(diǎn):MatrixTransformMatrixTransform的內(nèi)部使用了osg:Matrix對(duì)象,要?jiǎng)?chuàng)建一個(gè)執(zhí)行變換的MatrixTransform節(jié)點(diǎn),首先要?jiǎng)?chuàng)建變換矩陣Matrix并將其關(guān)聯(lián)到MatrixTransform。位置屬性變換節(jié)點(diǎn)PositionAttitudeTransform使用PositionAttitudeTransform節(jié)點(diǎn)可以實(shí)現(xiàn)使用Vec3位置坐標(biāo)和一個(gè)四元數(shù)完成的變換操作。Osg使用Quat來保
24、存四元數(shù)方位數(shù)據(jù)。4.細(xì)節(jié)層次節(jié)點(diǎn) LODLOD允許用戶指定各個(gè)子節(jié)點(diǎn)的有效范圍。該范圍包括了最大及最小值,缺省情況下其意義表示為距離。缺省條件下,LOD計(jì)算視點(diǎn)到物體包絡(luò)體中心點(diǎn)的距離。如果這樣并不符合渲染要求,那么用戶可以指定一個(gè)自定義的中心點(diǎn)。還可以設(shè)置判斷視點(diǎn)到物體之間的距離單位是長度距離還是像素個(gè)數(shù)。5.開關(guān)節(jié)點(diǎn)使用osg:Switch節(jié)點(diǎn)可以渲染或者跳過指定的子節(jié)點(diǎn)。四 渲染狀態(tài)用戶的應(yīng)用程序需要在osg:StateSet中設(shè)置渲染狀態(tài)。StateSet能夠自動(dòng)對(duì)狀態(tài)進(jìn)行優(yōu)化,并可以關(guān)聯(lián)到場景圖形中的任意一個(gè)節(jié)點(diǎn)或Drawable類。用戶需要盡量使關(guān)聯(lián)到場景圖形的StateSet最
25、少化。Osg渲染狀態(tài)的兩部分:渲染屬性和渲染模式。渲染模式是指渲染的某個(gè)功能,而渲染屬性是這個(gè)功能的控制變量和參數(shù)。如果要設(shè)置渲染狀態(tài)的值,用戶程序需要執(zhí)行以下幾步操作:1.為將要設(shè)置狀態(tài)的Node或Drawable對(duì)象提供一個(gè)StateSet實(shí)例。2.在StateSet實(shí)例中設(shè)置狀態(tài)的渲染模式和渲染屬性。渲染屬性(Attribute)和渲染模式(mode)Osg為每個(gè)狀態(tài)屬性定義了不同的類,以便應(yīng)用程序采用,所有的屬性類均繼承自osg:StateAttribute,StateAttribute是一個(gè)無法直接實(shí)例化的虛基類。Osg將所有的屬性和模式分成兩大部分:紋理和非紋理。設(shè)置渲染屬性如果要
26、設(shè)置一項(xiàng)屬性,首先將要修改的屬性類實(shí)例化。設(shè)置該類的數(shù)值,然后用osg:StateSet:setAttribute()將其關(guān)聯(lián)到StateSet。設(shè)置渲染模式可以使用Osg:StateSet:setMode()允許或禁止某種模式。設(shè)置渲染屬性和模式如果要將某個(gè)屬性關(guān)聯(lián)到StateSet,同時(shí)打開其對(duì)應(yīng)模式的許可,那么可以使用osg:StateSet:setAttributeAndModes()方法。狀態(tài)繼承當(dāng)你設(shè)置節(jié)點(diǎn)的渲染狀態(tài)時(shí),這個(gè)狀態(tài)將被賦予當(dāng)前的節(jié)點(diǎn)及其子節(jié)點(diǎn)。如果子節(jié)點(diǎn)對(duì)同一個(gè)渲染狀態(tài)設(shè)置了不同的屬性參數(shù),那么新的子節(jié)點(diǎn)狀態(tài)參數(shù)將會(huì)覆蓋原有的。換句話說,缺省情況下子節(jié)點(diǎn)可以改變自身的
27、某個(gè)狀態(tài)參數(shù),或者繼承父節(jié)點(diǎn)的同一個(gè)狀態(tài)。Osg允許用戶根據(jù)場景圖形中任意位置的渲染屬性和模式需求,而單獨(dú)改變?cè)械臓顟B(tài)繼承特性。用戶可以選擇以下這幾種枚舉形式:Osg:setAttribute:OVERRIDE:所有的子節(jié)點(diǎn)都將繼承這一屬性或模式,子節(jié)點(diǎn)對(duì)他們更改將會(huì)無效。Osg:setAttribute:PROTECTED:視為OVERRIDE的一個(gè)例外, 凡是設(shè)為這種形式的屬性或模式都不會(huì)受到父節(jié)點(diǎn)的影響。 Osg:setAttribute:INHERIT:這種模式強(qiáng)制子節(jié)點(diǎn)繼承父節(jié)點(diǎn)的渲染狀態(tài)。其效果是子節(jié)點(diǎn)的渲染狀態(tài)被解除,而使用父節(jié)點(diǎn)的狀態(tài)代替。紋理與映射為了在程序中實(shí)現(xiàn)基本的紋理
28、映射功能,用戶的代碼需要支持以下的步驟:1. 指定用戶幾何體的紋理坐標(biāo)2. 創(chuàng)建紋理屬性對(duì)象并保存紋理圖形信息3. 為StateSet設(shè)置合適的紋理屬性和模式1. 紋理坐標(biāo):Geometry類同時(shí)還允許用戶程序指定一個(gè)或多個(gè)紋理坐標(biāo)數(shù)據(jù)數(shù)組。指定了紋理坐標(biāo)之后,還要指定相應(yīng)的紋理單元,osg使用紋理單元來實(shí)現(xiàn)多重紋理。(多重紋理就是在渲染一個(gè)多邊形的時(shí)候可以用到多張紋理圖.把多張紋理圖進(jìn)行一些顏色的操作,可以達(dá)到一些效果.但是多重紋理必須是在顯卡支持的情況下.)Osg并不支持非多重紋理接口。因此,用戶程序必須制定一個(gè)紋理單元,以對(duì)應(yīng)紋理坐標(biāo)數(shù)據(jù)和紋理狀態(tài)。如果要使用單一紋理的話,只需要制定到紋
29、理單元0即可。2. 讀取圖像用戶程序可以使用兩個(gè)類來實(shí)現(xiàn)基本的2d紋理映射:osg:Texture2D和osg:Image,Texture2D屬于setAttribute的派生類,用于管理OpenGL紋理對(duì)象,而Image用于管理圖像像素?cái)?shù)據(jù)。如果要使用2d圖像文件作為紋理映射的圖形,只要將文件名賦給Image對(duì)象并將Image關(guān)聯(lián)到Texture2D即可。3. 紋理狀態(tài)用戶可以使用osg:StateSet:setTextureAttribute()將一個(gè)紋理屬性關(guān)聯(lián)到StateSet對(duì)象。setTextureAttribute()的第一個(gè)參數(shù)是紋理單元,第二個(gè)參數(shù)是繼承自StateAttri
30、bute類的一種紋理屬性。合法的屬性紋理類有六種:五種紋理類型osg:Texture1D,osg:Texture2D, osg:Texture3D,osg:TextureCubeMap,osg:TextureRectangle,另一個(gè)是用于紋理坐標(biāo)的生成osg:TexGen。五 光照要在應(yīng)用程序中使用光照,需要遵循下面的步驟:1. 指定幾何體法線2. 允許光照并設(shè)定光照狀態(tài)3. 指定光源屬性并關(guān)聯(lián)到場景圖形4. 指定表面材質(zhì)屬性法線光照狀態(tài)光源:定義一個(gè)osg:Light對(duì)象以定義光源參數(shù)。然后將Light添加到osg:LightSource節(jié)點(diǎn)中,并將LightSource添加到場景圖形。由
31、Light定義的光源將對(duì)整個(gè)場景產(chǎn)生影響。材質(zhì)屬性:osg:Material封裝了OpenGL中的glMatrial()和glColorMaterial()指令的函數(shù)功能。要允許顏色追蹤材質(zhì)的特性,需要調(diào)用Material:setColorMode()方法。六 文件I/OosgDB庫提供了用戶程序讀取和寫入2D圖形和3D模型文件的函數(shù)接口。osgDB庫還負(fù)責(zé)管理osg的插件系統(tǒng),以實(shí)現(xiàn)對(duì)不同文件格式的支持。1. 接口osgDB提供了文件I/O的函數(shù)接口,從而將插件系統(tǒng)完全影藏在用戶程序之外。需要的兩個(gè)頭文件是:osgDB/ReadFileosgDB/WriteFile讀取文件:使用函數(shù)osgD
32、B:readNodeFile(string & filename)(3d模型文件的讀取)和osgDB:readImageFile(string & filename)(2d圖像的讀?。﹣碜x取3d模型和2d圖像文件。readNodeFile()返回一個(gè)指向場景圖形節(jié)點(diǎn)的指針。readImageFile()返回Image對(duì)象的指針。寫入文件:利用函數(shù)osgDB:writeNodeFile()和osgDB:writeImageFile()將數(shù)據(jù)寫入到3d模型或2d圖像文件中。插件的檢索和注冊(cè):osg插件也就是一組動(dòng)態(tài)鏈接庫,其中實(shí)現(xiàn)了osgDB頭文件ReadFile定義的接口。Registry類維護(hù)
33、了一個(gè)擴(kuò)展名的化名映射表來對(duì)應(yīng)不同的文件格式和支持此類格式的插件。七 NodeKit與osgTextOsg庫提供了豐富的設(shè)計(jì)功能,不過有時(shí)還是需要從osg的核心節(jié)點(diǎn)類中派生出自己的特定節(jié)點(diǎn)。而這些派生的功能往往不屬于osg核心部分,而是適合作為輔助的庫存在。所謂NodeKit就是指一種開發(fā)集成庫,它擴(kuò)展自osg核心功能的特定節(jié)點(diǎn)類(Node),渲染屬性類(StateAttribute),繪圖類(Drawable),并且使用osg包裝類(wrapper)對(duì)這些新的功能類提供.osg文件格式的支持。osgText組件:在這個(gè)命名空間中有一些十分使用的加載字體和文字渲染類。核心類:Text:繼承自D
34、rawable類,可用于顯示任意長度的字符串。Font:osgText的函數(shù)可以根據(jù)字體文件的名稱來創(chuàng)建Font對(duì)象。要在程序中使用osgText,用戶通常要遵守下面的三個(gè)步驟:1. 如果要使用一種字體顯示多行文字,只需要?jiǎng)?chuàng)建一個(gè)Font對(duì)象,然后在Text對(duì)象之間共享即可。2. 為每一段要顯示的字符串建立一個(gè)Text對(duì)象。指定對(duì)齊方式,文字方向,位置和大小參數(shù),將步驟一中的Font對(duì)象關(guān)聯(lián)到新的Text對(duì)象中。3. 使用addDrawable函數(shù)將Text對(duì)象添加到Geode節(jié)點(diǎn)。用戶可以向一個(gè)Geode節(jié)點(diǎn)添加多個(gè)Text對(duì)象,或者根據(jù)自己的需要?jiǎng)?chuàng)建多個(gè)Geode節(jié)點(diǎn)。將Geode節(jié)點(diǎn)作為
35、場景圖形的子節(jié)點(diǎn)加入。坐標(biāo)位置:利用Text:setPosition()改變?cè)谠c(diǎn)的默認(rèn)值。文字方向:可以使用Text:setAxisAlignment方法來設(shè)置文字的位置。輸入?yún)?shù)為Text:AxisAlignment的枚舉量。對(duì)齊方式:使用函數(shù)Text:setAlignment()參數(shù)是Text:AlignmentType枚舉量。文字尺寸:分辨率:顏色:Text:setColor()設(shè)置顏色.osg文件格式:osg筆記三 2011-07-10 11:41:02| 分類: OSG | 標(biāo)簽: |字號(hào)大中小 訂閱 在用戶程序中使用osg一渲染Osg開放了所有的功能模塊。因此用戶程序完全可以使用
36、最底層的osg功能來執(zhí)行渲染操作。假設(shè)用戶希望能夠完全自主的控制場景圖形的渲染,那么也可以按照下面的步驟編寫應(yīng)用程序的代碼:1. 設(shè)計(jì)自己的視角管理代碼:以改變OpenGL的模型視圖矩陣。2. 創(chuàng)建用戶窗口和OpenGL上下文,并將他們激活。如果有需要的話,用戶也可以自行編寫管理多窗口和多個(gè)設(shè)備上下文的代碼。3. 如果應(yīng)用程序需要使用分頁數(shù)據(jù)庫,那么可以使用osgDB:DatabasePager類4. 可以將osgUtil:UpdateVisitor,osgUtil:CullVisitor,osgUtil:RenderStage對(duì)象實(shí)例化,以實(shí)現(xiàn)場景的更新,挑選和繪制遍歷。如果用戶希望獲得更多
37、的控制權(quán),則可以自己編寫類來實(shí)現(xiàn)以上遍歷的特性。5. 編寫主循環(huán)代碼來處理操作系統(tǒng)返回的事件。并且調(diào)用自己的視角觀察代碼來更新模型視圖矩陣。6. 在渲染一幀之前先要調(diào)用glClear()。渲染時(shí)要依次執(zhí)行場景更新,挑選和繪制遍歷,最后交換緩存數(shù)據(jù)。7. 如果用戶程序或者運(yùn)行改程序的軟硬件平臺(tái)需要立體化渲染(stereo rendering)或者多通道渲染(multipipe rendering)功能的支持,則可以自行編寫額外的代碼。8. 最后請(qǐng)依照平臺(tái)無關(guān)性的要求來編寫所有的代碼,這樣你的代碼才可以在所有的目標(biāo)平臺(tái)上運(yùn)行通過。用戶使用osg時(shí),往往可以利用以下這些工具和庫來簡化開發(fā)的過程:1.
38、 osgUtil:SceneView:這個(gè)類封裝了更新,挑選,和繪制遍歷,但是并不啟用DatabasePager。有一部分應(yīng)用程序會(huì)使用SceneView作為osg渲染的主接口。2. Producer和osgProducerProducer是一個(gè)外部的攝像機(jī)庫,可以支持多通道渲染。osgProducer是一個(gè)集成了Producer和osg的應(yīng)用庫。Producer有相當(dāng)多的用戶,目前有一部分的osg程序是基于osgProducer和Producer開發(fā)的。Osg2.0版本核心添加了一個(gè)新的庫成員osgViewer。osgViewer包含了一系列的用于控制視口顯示的相關(guān)的類,并封裝了大量用戶常用
39、的功能函數(shù),例如顯示管理,事件響應(yīng),場景渲染等。這個(gè)庫使用osg:Camera類來管理OpenGL的模型視圖矩陣。與SceneView類不同,osgViewer的視口類提供了對(duì)DatabasePager的全部支持。osgViewer還可以針對(duì)同一個(gè)場景圖形,提供并通過多個(gè)獨(dú)立的視口顯示該場景。3.1.1 Viewer類改變視口:Viewer在其內(nèi)部創(chuàng)建了一個(gè)osg:Camera攝像機(jī)對(duì)象來管理osg的模型視圖矩陣。用戶可以通過以下的兩個(gè)方法來控制Camera對(duì)象。將一個(gè)攝像機(jī)控制器對(duì)象關(guān)聯(lián)到Viewer中。如果你的程序不需要這么做,那么Viewer.run()將自動(dòng)創(chuàng)建一個(gè)osgGA:Trac
40、kballManipulator對(duì)象來控制攝像機(jī)的工作。osgGA庫定義了一些常用的控制器類。用戶可以調(diào)用Viewer:setCameraManipulator來指定一個(gè)期望的控制器。設(shè)置Camera對(duì)象的投影矩陣和觀察矩陣為自定義的矩陣值。這樣也可以保證用戶程序能夠完全控制視口的瀏覽動(dòng)作。osgViewer:setViewMatrix()方法來設(shè)置視口矩陣。參數(shù)是一個(gè)osg:Matrix矩陣,osgViewer:setViewMatrixAsLookat():參數(shù)和gluLookAt類似,三個(gè)向量:eye,center,up。設(shè)置清屏顏色:Camera:setClearColor()用來設(shè)置
41、清屏顏色,缺省情況下會(huì)清除深度和顏色緩存,可以使用Camera:setClearMask(GL_CLOLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)來設(shè)置清除屬性。3.1.2 SimpleViewer 和 CompositeViewerosgViewer:SimpleViewer類不會(huì)主動(dòng)的創(chuàng)建窗口或者設(shè)備上下文,它需要依賴用戶程序來創(chuàng)建窗口、上下文,并將其激活為當(dāng)前設(shè)備,如果操作正確的話,SimpleViewer:frame()將會(huì)在用戶給定的窗口中渲染。osgViewer:CompositeViewer:Viewe
42、r類只能在一個(gè)場景中添加一個(gè)視口,而CompositeViewer類可以支持一個(gè)或多個(gè)場景的多個(gè)視口顯示,并允許用戶程序指定其渲染順序。CompositeViewer還支持渲染到紋理(RTT)的操作,即,允許用戶程序?qū)⒁粋€(gè)視口中渲染的圖像作為另一個(gè)視口的紋理貼圖。二動(dòng)態(tài)更改Osg允許用戶動(dòng)態(tài)的修改場景圖形并因而改變每一幀的顯示。用戶可以更改幾何數(shù)據(jù),渲染狀態(tài)參數(shù),Switch節(jié)點(diǎn)設(shè)置,以及任何場景圖形的結(jié)構(gòu)。OsgViewer庫支持多線程模式,每一個(gè)線程均獨(dú)立的運(yùn)行挑選及繪制遍歷,但osg并沒有為了線程的安全性增設(shè)內(nèi)存鎖,而是要求用戶程序只可在挑選及繪制遍歷的時(shí)域之外修改場景圖形。確保用戶的修
43、改不會(huì)與挑選及繪制線程發(fā)生沖突,一個(gè)簡單的方案是,在Viewer:frame()的調(diào)用之外進(jìn)行場景圖形的修改,這需要在主渲染循環(huán)中添加額外的代碼。但如果用戶希望自己的程序更加整潔及規(guī)范的話,可以選擇在更新遍歷中進(jìn)行場景的修改操作。一些與場景圖形動(dòng)態(tài)更改相關(guān)的基本技術(shù):1. 處于性能優(yōu)化和線程安全性的考慮,用戶需要通知osg,場景圖形的哪些部分是可能要進(jìn)行修改的。用戶可以通過設(shè)置Object對(duì)象(Node,Drawable,StateSet等)的數(shù)據(jù)變度(data variance)屬性來完成這一工作。2. osh允許用戶為Node和Drawable設(shè)置回調(diào)(callback)。Osg將在特定遍
44、歷中執(zhí)行這些回調(diào),3. 用戶程序有時(shí)不能預(yù)知場景圖形的哪一部分需要修改。這是需要搜索整個(gè)場景圖形來查找特定的節(jié)點(diǎn),或者由用戶使用鼠標(biāo)等輸入設(shè)備來選擇一個(gè)節(jié)點(diǎn)。3.21 數(shù)據(jù)邊度OsgViewer支持的多線程模型允許主循環(huán)不必等到繪制遍歷結(jié)束就可以繼續(xù)運(yùn)行,也就是Viewer:frame()方法在繪制遍歷仍未結(jié)束的時(shí)候就可以返回。換句話說,上一幀的繪制遍歷可以與下一幀的更新遍歷產(chǎn)生重疊。Osg提供了osg:object:DataVariance()方法解決繪制遍歷與多線程的更新操作的沖突。(Frame():Render a complete new frame)。用于處理繪制遍歷與其他遍歷的同步
45、性。3.2.2 回調(diào)Osg允許用戶設(shè)置Node和Drawable對(duì)象的回調(diào)類。Node可以在執(zhí)行更新和挑選時(shí)進(jìn)行回調(diào),Drawable可以在挑選和繪制遍歷時(shí)進(jìn)行回調(diào)。使用NodeCallback,用戶程序所需要執(zhí)行的步驟:1. 從NodeCallback繼承一個(gè)新的類。2. 重載NodeCallback:operator()方法,實(shí)現(xiàn)場景圖形的動(dòng)態(tài)更改。3. 實(shí)例化繼承而來的類,然后使用Node:setUpdateCallback()方法關(guān)聯(lián)到將要修改的Node。NodeCallback:operator()兩參數(shù):第一個(gè)是回調(diào)類所關(guān)聯(lián)的Node節(jié)點(diǎn)地址,第二個(gè)參數(shù)是osg:NodeVisit
46、or對(duì)象的地址。NodeVisitor:traverse():這個(gè)方法允許osg訪問其他的節(jié)點(diǎn)并執(zhí)行其回調(diào)。3.2.3 NodeVisitor類這是osg對(duì)于訪問器(visitor)設(shè)計(jì)思想的實(shí)現(xiàn)。從本質(zhì)上說,NodeVisitor類遍歷了一個(gè)場景圖形并為每一個(gè)被訪問節(jié)點(diǎn)調(diào)用特定的函數(shù)。這一簡單的技術(shù)卻是許多osg操作的基類,如osgUtil:Optimizer,osgUtil的幾何體處理類。Osg使用osgUtil:UpdateVisitor類(繼承自NodeVisitor)來實(shí)現(xiàn)更新遍歷。NodeVisitor是一個(gè)基類,用戶程序無法直接將其實(shí)例化。但用戶程序可以使用osg提供的任何Nod
47、eVisitor派生類,也可以自己編寫繼承自NodeVisitor類的代碼。NodeVisitor包含了一些經(jīng)過重載的apply()方法,其輸入?yún)?shù)涵蓋了大部分osg的節(jié)點(diǎn)類型。當(dāng)一個(gè)NodeVisitor對(duì)象遍歷整個(gè)場景圖形時(shí),它將會(huì)為每個(gè)被訪問的節(jié)點(diǎn)調(diào)用其相應(yīng)的apply()方法。使用特定的名稱來搜索節(jié)點(diǎn)也是一種簡單而實(shí)用的操作。允許NodeVisitor遍歷:缺省情況下,NodeVisitor類禁止執(zhí)行遍歷。因此在你的派生類中,需要使用枚舉量NodeVisitor:TRAVERSE_ALL_CHILDREN來初始化基類,以允許執(zhí)行遍歷,否則osg將不會(huì)調(diào)用apply()方法。如果要使用N
48、odeVisitor來遍歷整個(gè)場景圖形,可以將NodeVisitor作為Node:accept()的輸入?yún)?shù)傳遞。你可以在任何一個(gè)節(jié)點(diǎn)上調(diào)用accept(),NodeVisitor將從那個(gè)節(jié)點(diǎn)開始遍歷整個(gè)場景圖形,如果要搜索整個(gè)場景圖形的話,可以從根節(jié)點(diǎn)開始調(diào)用accept()。3.2.4 用戶選擇從本質(zhì)上講,osg程序通過兩個(gè)步驟來實(shí)現(xiàn)用戶選擇:1. 接受鼠標(biāo)事件osgGA提供了允許程序接受鼠標(biāo)事件的事件類,它具備設(shè)備平臺(tái)無關(guān)特性。2. 判斷場景圖形的哪個(gè)部分被鼠標(biāo)光標(biāo)覆蓋。osgUtil提供了一種相交集類(Intersection),可以在鼠標(biāo)xy坐標(biāo)的周圍創(chuàng)建包圍盒,并判段包圍盒與場景圖
49、形的相交情況,osgUtil將按照由前至后的順序返回與包圍盒相交的節(jié)點(diǎn)列表。捕捉鼠標(biāo)事件osgGA:TrackballManipulator將鼠標(biāo)事件作為輸入,并修改用于控制用戶視口的osg:Camera視口矩陣。TrackballManipulator派生自osgGA:GUIEventHandler類,是虛基類,無法實(shí)例化,但用戶可以從GUIEventHandler派生自己的類,以實(shí)現(xiàn)各種基于GUI事件的操作。要實(shí)現(xiàn)鼠標(biāo)控制的選擇操作,可以從GUIEventHandler派生新的類,并重載GUIEventHandler:Handle()方法,以接收鼠標(biāo)事件。然后用戶可以創(chuàng)建新類的實(shí)例并將其關(guān)
50、聯(lián)到應(yīng)用程序的觀察視口。Virtual bool GUIEventHandler:Handle(const osgGA:GUIEventAdapter & ea,osgGA:GUIActionAdapter & aa);用戶實(shí)現(xiàn)的Handle()方法可以接收來自GUIEventAdapter的各種GUI事件,包括鼠標(biāo)事件。GUIEventAdapter類的頭文件中定義了枚舉類型EventType,用戶程序可以從中選擇自己需要的GUI事件。使用GUIEventAdapter.getEventType()方法可以得到當(dāng)前的事件類型。GUIActionAdapter是用戶返回給GUI系統(tǒng)的程序接口。
51、當(dāng)遇到鼠標(biāo)選擇的操作時(shí),用戶將用于選擇事件的GUIEventHandler關(guān)聯(lián)到視口類,則視口類就是一個(gè)GUIActionAdapter。用戶需要使用他來實(shí)現(xiàn)當(dāng)前視口與場景之間的交互。在渲染視口之前,用戶往往會(huì)創(chuàng)建一個(gè)GUIEventHandler派生類的實(shí)例,并使用Viewer:addEventHandler()將其關(guān)聯(lián)到視口。一個(gè)視口可以有多個(gè)事件處理器,Viewer將事件處理對(duì)象添加到一個(gè)事件處理列表中。運(yùn)行時(shí)Viewer將調(diào)用每個(gè)GUI事件的handle()函數(shù),直到其中一個(gè)的handle()函數(shù)返回true為止。要實(shí)現(xiàn)接收鼠標(biāo)事件并實(shí)現(xiàn)用戶選擇的功能,需要經(jīng)過以下幾個(gè)步驟:1. 從G
52、UIEventHandler繼承新的類,重載handler()方法。2. 在handler()方法中檢查GUIEventAdapter參數(shù)傳遞的事件類型,并針對(duì)需要的事件類型執(zhí)行相應(yīng)的操縱。方法返回true時(shí)將阻止其他事件處理器繼續(xù)接受事件消息。3. 在渲染之前,創(chuàng)建事件處理器的實(shí)例,并使用addEventHandler()方法添加到視口中。Osg將會(huì)把視口作為GUIActionAdapter參數(shù)傳遞給handler()方法。交集Osg使用一種多胞體(polytope)的金字塔形包圍盒代替射線。這種金字塔的頂峰位于視點(diǎn),其中心軸直接穿過鼠標(biāo)(光標(biāo))的位置。它距離視點(diǎn)的寬度是由視場和程序控制的寬
53、度參數(shù)決定的。osgUtil:IntersectionVisitor類繼承自NodeVisitor,它可以監(jiān)測每個(gè)定點(diǎn)的包圍盒與交集包圍盒的關(guān)系,并允許在某個(gè)子圖形不可能存在有交集的子節(jié)點(diǎn)時(shí),跳過該子圖形的遍歷。用戶可以設(shè)置IntersectionVisitor類并使用幾種不同的幾何結(jié)構(gòu)進(jìn)行交集檢測。其構(gòu)造函數(shù)使用osgUtil:Intersector作為輸入?yún)?shù),Intersector定義了選擇操作的幾何體并執(zhí)行實(shí)際的交集操作。Intersector是一個(gè)純虛基類,osgUtil庫從中派生了許多代表不同幾何結(jié)構(gòu)的新類。有些程序需要拾取單獨(dú)的頂點(diǎn)和多邊形,而有些程序只需要簡單的獲取那些包含了被
54、選節(jié)點(diǎn)的Group或Transform父節(jié)點(diǎn)。IntersectionVisitor返回osg:NodePath對(duì)象來滿足這些要求。NodePath是一個(gè)std:vector向量,它表示沿著根節(jié)點(diǎn)到葉節(jié)點(diǎn)呈現(xiàn)出一定排列層次的節(jié)點(diǎn)路線。如果用戶程序需要獲取中的父節(jié)點(diǎn),只需要從后到錢搜索滿足要求的節(jié)點(diǎn)即可。要實(shí)現(xiàn)osg中的鼠標(biāo)選擇操作,需要按照如下的步驟編寫代碼:1. 創(chuàng)建并設(shè)置PolytopeIntersector,其中的鼠標(biāo)位置應(yīng)當(dāng)使用GUIEventAdapter中經(jīng)過歸一化的數(shù)據(jù)。2. 創(chuàng)建IntersectionVisitor對(duì)象,并將PolytopeIntersector作為其構(gòu)造函數(shù)
55、的輸入?yún)?shù)。3. 由場景圖形的根節(jié)點(diǎn)加載IntersectionVisitor,一般來說是通過Viewer中的Camera對(duì)象,如下面的代碼:iv是一個(gè)IntersectionVisitor對(duì)象viewer.getCamera()-accept(iv);4. 如果PolytopeIntersector的返回值包含了交集,那么可以獲取返回的NodePath并搜索符合要求的節(jié)點(diǎn)。osg筆記 四 2011-08-03 16:10:23| 分類: OSG | 標(biāo)簽: |字號(hào)大中小 訂閱 九 例子系統(tǒng)osgParticle:explosionEffect用于爆炸的模擬,fireEffect用于火的模擬,
56、explosionDebrisEffect用于爆炸后四散的顆粒的模擬。osgParticle的中堅(jiān)類:osgParticle:Particle 粒子模板,塊定粒子的大小,顏色,生命周期等等。osgParticle:ParticleSystem 粒子系統(tǒng)的總體屬性,粒子總數(shù),紋理等。osgParticle:Counter 粒子產(chǎn)生的數(shù)目范圍 osgParticle:Placer 粒子出生點(diǎn)的形狀態(tài) 如環(huán) 圓 點(diǎn) 形osgParticle:Shooter 粒子發(fā)射器,決定粒子的初速 osgParticle:Emitter 上述模板以及操作都為此類服務(wù),類名:發(fā)射器osgParticle:Progr
57、am 可接受對(duì)粒子的操作,如軌跡的定義,矩陣的變換等等osgParticle:Operator 粒子操作或用戶自定義粒子操作osgParticle:ParticleEffect 可單獨(dú)使用的粒子渲染,模仿煙霧,爆炸等等osgParticle:osgPrecipitationEffect 可以使用霧效,雪效等等osg使用粒子系統(tǒng)所經(jīng)歷步驟:1. 確定意圖 包括粒子的運(yùn)動(dòng)方式等等 2. 建立粒子模板 按所需要的類型確定粒子的角度,形狀,生命周期等3. 建立粒子系統(tǒng) 設(shè)置總的屬性4. 設(shè)置發(fā)射器 發(fā)射形狀,發(fā)射粒子的數(shù)目變化等等 5. 設(shè)置操作 旋轉(zhuǎn)度,風(fēng)力等等6. 加入節(jié)點(diǎn),更新視口&LOD&多通道1. 多視口創(chuàng)建視口必須有以下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)站優(yōu)化維護(hù)技術(shù)作業(yè)指導(dǎo)書
- 游戲娛樂業(yè)電競產(chǎn)業(yè)發(fā)展規(guī)劃與實(shí)施方案研究
- 廣西南寧市武鳴區(qū)2024年中考適應(yīng)性考試數(shù)學(xué)試題含解析
- 優(yōu)化磁性組件在航空航天設(shè)計(jì)
- 2025年萍鄉(xiāng)從業(yè)資格證模擬考試題貨運(yùn)考題
- 2025年安徽貨運(yùn)從業(yè)資格考試模擬考試題
- 河北省滄州市2024-2025學(xué)年高三下學(xué)期二模地理試題(原卷版+解析版)
- 2025年山東省淄博市博山區(qū)中考一模英語試題(原卷版+解析版)
- 2025年入黨積極分子黨校理論知識(shí)培訓(xùn)結(jié)業(yè)考試題庫及答案(共180題)
- 公益課程合同樣本
- 菩薩蠻黃鶴樓(毛澤東).中職課件電子教案
- 銀行存款日記賬課件
- 2023高中學(xué)業(yè)水平合格性考試歷史重點(diǎn)知識(shí)點(diǎn)歸納總結(jié)(復(fù)習(xí)必背)
- 導(dǎo)游人員管理法律制度課件
- 2022年江蘇安東控股集團(tuán)有限公司招聘筆試題庫及答案解析
- 美國地圖高清中文版
- 金屬監(jiān)督監(jiān)理實(shí)施細(xì)則
- 正確認(rèn)識(shí)汽車太陽膜課件
- 工程建筑給排水外文文獻(xiàn)翻譯1
- 曲線上梁的平分中矢坐標(biāo)計(jì)算方法解讀
- DB4201∕T 646-2021 軌道交通工程運(yùn)營期結(jié)構(gòu)監(jiān)測技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論