osgfx-開發(fā)者簡明手冊

osgfx-開發(fā)者簡明手冊

ID:35201974

大?。?1.50 KB

頁數(shù):4頁

時間:2019-03-21

osgfx-開發(fā)者簡明手冊_第1頁
osgfx-開發(fā)者簡明手冊_第2頁
osgfx-開發(fā)者簡明手冊_第3頁
osgfx-開發(fā)者簡明手冊_第4頁
資源描述:

《osgfx-開發(fā)者簡明手冊》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、osgFX-開發(fā)者簡明手冊MarcoJez2003年9月?osgFX是一個OpenSceneGraph的附加庫,是一個用于實現(xiàn)一致、完備、可重用的特殊效果的構(gòu)架工具,其效果可以添加到OSG的節(jié)點中。它同時還包含了一系列預(yù)定義好的特殊效果。osgFX概述所謂“特效”指的是裝載于單個對象中的一系列可視的屬性和行為。要實現(xiàn)一個真正可用的特效,相應(yīng)的特效類應(yīng)當(dāng)具備一個公有的接口,以修改各種配置和微調(diào)量。特效也可以被理解成是提出問題(對象應(yīng)當(dāng)是什么樣子)與解決問題(應(yīng)當(dāng)設(shè)置哪些屬性和其它調(diào)節(jié)量)之間的“橋梁”。從C++代碼來看,特效具現(xiàn)了osgFX::Ef

2、fect類的實例。或者說,是這個類的派生類的實例,因為osgFX::Effect直接派生自osg::Node,因此它是抽象類。對于OSG而言,特效就是一個Node節(jié)點。它與其它節(jié)點類的特性完全相同,因此可以關(guān)聯(lián)到場景圖形中的任意位置。特效功能圖如圖1所示。Effect類是一個多子節(jié)點的組節(jié)點。它使用addChild()方法和其它節(jié)點關(guān)聯(lián)。在特效類中設(shè)置的可視屬性將被關(guān)聯(lián)到它的子節(jié)點上,與此相類似,Transform節(jié)點也會將坐標(biāo)變換的信息應(yīng)用到其子節(jié)點上。Effect中的各種屬性不會在其子節(jié)點以外生效。如果用戶想要將某一種特效應(yīng)用到自己的圖形子樹

3、上,那么需要遵循下面的步驟:1、創(chuàng)建所需特效的實例,例如,osgFX::Scribe;2、必要的話,使用特效類的方法設(shè)置特效屬性;3、調(diào)用Effect::addChild()方法,將圖形子樹與特效節(jié)點相關(guān)聯(lián);4、將特效節(jié)點與場景圖形關(guān)聯(lián)。下面的例子中使用了刻線(scribe)特效:osg::ref_ptrmy_node=osgDB::readNodeFile(“cow.osg”);osg::ref_ptrscribe_fx=newosgFX::Scribe;scribe_fx->addChild

4、(my_node.get());scribe_fx->setEnabled(true);root->addChild(scribe_fx.get());代碼執(zhí)行的結(jié)果如圖2所示。深入學(xué)習(xí):技法和通道技法就是實現(xiàn)特效的某一種可能方法。由于圖形硬件設(shè)備種類繁多,OpenGL也在不斷擴展,因此不太可能用一種通用的方法來實現(xiàn)復(fù)雜的效果:針對不同的硬件和OpenGL環(huán)境,用戶需要采用不同的實現(xiàn)手段來實現(xiàn)某個特效。一種特效的產(chǎn)生往往可以采用一種或幾種技法,每一種技法都采用不同的方式來嘗試實現(xiàn)相同的效果。缺省情況下,Effect類使用私有的StateAttri

5、bute對象來實時演算和驗證各種技法,并選擇最好的一種。特效的開發(fā)者可以自行定義各種技法的優(yōu)先級,從而要求OSG首先驗證用戶所選的技法。Effect類會選擇在實時的所有活動渲染設(shè)備中,可通過驗證的優(yōu)先級最高的技法,以為己用。如果需要的話,用戶可以在任何時刻重載這一缺省特性。Effect類的技法功能圖表如圖3所示。多通道渲染的意思是,每次都使用不同的可視屬性,多次繪制同一對象后,合并所有通道獲得的最終圖像。某些技法可能需要不止一個通道來實現(xiàn)所需的輸出結(jié)果。技法類為每個渲染通道都創(chuàng)建一個StateSet對象,然后交由osgFX管理多通道的渲染工作。E

6、ffect類的通道功能圖表如圖4所示。擴展osgFX創(chuàng)建一個新的特效的基本步驟如下。1、特效都是從osgFX::Effect派生而來的,因此用戶可以自由創(chuàng)建自己的派生類,例如命名它為TestFx。2、具現(xiàn)抽象方法,例如effectName(),effectDescription()等,可能需要用到META_Effect宏。3、向系統(tǒng)注冊新的特效類,即創(chuàng)建一個Registry::Proxy的靜態(tài)實例:osgFX::Registry::Proxyproxy(newTestFx);4、具現(xiàn)保護成員中的抽象方法define_techniques(),以便

7、創(chuàng)建所需的特效技法。為了實現(xiàn)某個技法,用戶需要編寫一個繼承自osgFX::Technique的類;且這個類應(yīng)當(dāng)是私有的。在用戶特效類的define_techniques()方法中,創(chuàng)建上述用戶技法類的實例,并使用Effect::addTechnique()按照優(yōu)先級降序的順序?qū)⑵涮砑拥教匦ь愔?。為新建的技法提供一個驗證手段。最簡單(但不是最靈活的)的方法是重載Technique::getRequiredExtensions()方法,并指定這個技法所需的OpenGL擴展函數(shù)。具現(xiàn)Technique::define_passes()方法,以便創(chuàng)建渲染

8、通道。渲染通道的內(nèi)部實現(xiàn),是將其作為一個Group對象與一個StateSet相關(guān)聯(lián)。特效類的子節(jié)點在運行時將自動被添加到通道節(jié)點上。技法

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。