青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

翻譯:osgFX - 開發者簡明手冊

LINK:     http://cg.cnblogs.com/default.aspx?page=6&paging=1
               http://bbs.vrchina.net/viewthread.php?tid=3472
osgFX - 開發者簡明手冊
Marco Jez
2003年9月

osgFX是一個OpenSceneGraph的附加庫,是一個用于實現一致、完備、可重用的特殊效果的構架工具,其效果可以添加到OSG的節點中。它同時還包含了一系列預定義好的特殊效果。

osgFX概述
所謂“特效”指的是裝載于單個對象中的一系列可視的屬性和行為。要實現一個真正可用的特效,相應的特效類應當具備一個公有的接口,以修改各種配置和微調量。
特效也可以被理解成是提出問題(對象應當是什么樣子)與解決問題(應當設置哪些屬性和其它調節量)之間的“橋梁”。從C++代碼來看,特效具現了osgFX::Effect類的實例。或者說,是這個類的派生類的實例,因為osgFX::Effect直接派生自osg::Node,因此它是抽象類。
對于OSG而言,特效就是一個Node節點。它與其它節點類的特性完全相同,因此可以關聯到場景圖形中的任意位置。
特效功能圖如圖1所示。
Effect類是一個多子節點的組節點。它使用addChild()方法和其它節點關聯。
在特效類中設置的可視屬性將被關聯到它的子節點上,與此相類似,Transform節點也會將坐標變換的信息應用到其子節點上。Effect中的各種屬性不會在其子節點以外生效。

如果用戶想要將某一種特效應用到自己的圖形子樹上,那么需要遵循下面的步驟:
1、創建所需特效的實例,例如,osgFX::Scribe;
2、必要的話,使用特效類的方法設置特效屬性;
3、調用Effect::addChild()方法,將圖形子樹與特效節點相關聯;
4、將特效節點與場景圖形關聯。

下面的例子中使用了刻線(scribe)特效:
osg::ref_ptr<osg::Node> my_node = osgDB::readNodeFile(“cow.osg”);
osg::ref_ptr<osgFX::Scribe> scribe_fx = new osgFX::Scribe;
scribe_fx->addChild(my_node.get());
scribe_fx->setEnabled(true);
root->addChild(scribe_fx.get());
代碼執行的結果如圖2所示。

深入學習:技法和通道
技法就是實現特效的某一種可能方法。
由于圖形硬件設備種類繁多,OpenGL也在不斷擴展,因此不太可能用一種通用的方法來實現復雜的效果:針對不同的硬件和OpenGL環境,用戶需要采用不同的實現手段來實現某個特效。
一種特效的產生往往可以采用一種或幾種技法,每一種技法都采用不同的方式來嘗試實現相同的效果。
缺省情況下,Effect類使用私有的StateAttribute對象來實時演算和驗證各種技法,并選擇最好的一種。
特效的開發者可以自行定義各種技法的優先級,從而要求OSG首先驗證用戶所選的技法。
Effect類會選擇在實時的所有活動渲染設備中,可通過驗證的優先級最高的技法,以為己用。
如果需要的話,用戶可以在任何時刻重載這一缺省特性。
Effect類的技法功能圖表如圖3所示。

多通道渲染的意思是,每次都使用不同的可視屬性,多次繪制同一對象后,合并所有通道獲得的最終圖像。
某些技法可能需要不止一個通道來實現所需的輸出結果。
技法類為每個渲染通道都創建一個StateSet對象,然后交由osgFX管理多通道的渲染工作。
Effect類的通道功能圖表如圖4所示。

擴展osgFX
創建一個新的特效的基本步驟如下。
1、特效都是從osgFX::Effect派生而來的,因此用戶可以自由創建自己的派生類,例如命名它為TestFx。
2、具現抽象方法,例如effectName(),effectDescription()等,可能需要用到META_Effect宏。
3、向系統注冊新的特效類,即創建一個Registry::Proxy的靜態實例:
osgFX::Registry::Proxy proxy(new TestFx);
4、具現保護成員中的抽象方法define_techniques(),以便創建所需的特效技法。
為了實現某個技法,用戶需要編寫一個繼承自osgFX::Technique的類;且這個類應當是私有的。
在用戶特效類的define_techniques()方法中,創建上述用戶技法類的實例,并使用Effect::addTechnique()按照優先級降序的順序將其添加到特效類中。
為新建的技法提供一個驗證手段。最簡單(但不是最靈活的)的方法是重載Technique::getRequiredExtensions()方法,并指定這個技法所需的OpenGL擴展函數。
具現Technique::define_passes()方法,以便創建渲染通道。
渲染通道的內部實現,是將其作為一個Group對象與一個StateSet相關聯。特效類的子節點在運行時將自動被添加到通道節點上。
技法類的define_passes()方法為每個渲染通道創建了一個StateSet對象,并調用Technique::addPass()將其添加到技法類中。通道節點將自動生成并連接到渲染狀態之上。

以下為創建一個特效類所需的基本代碼:
Class TestFX (public)
{
……
META_Effect(……);
bool define_techniques()
{
addTechnique(new FirstTechnique);
// 也可以繼續添加別的技法實例。
}
……
}

Class FirstTechnique (private)
{
……
void getRequiredExtensions(……) const
{
// 指定所需的GL擴展功能。
}
void define_passes()
{
osg::ref_ptr<osg::StateSet> ss1 = new osg::StateSet;
// 添加渲染屬性到ss1之后……
addPass(ss1.get());

osg::ref_ptr<osg::StateSet> ss2 = new osg::StateSet;
// 添加渲染屬性到ss2之后……
addPass(ss2.get());
}
……
}

總結:
1、繼承osgFX::Effect并創建特效類(例如TestFx),為其添加名字和描述信息,并使用注冊代理(registry proxy)注冊到系統中;
2、為用戶所需的每個技法創建私有類,并定義它們的驗證手段;
3、在TestFx::define_techniques()中創建一個技法類的實例,并調用addTechnique()將其添加到特效中;
4、在每個技法類的define_passes()方法中,創建一個或多個StateSet對象(每個渲染通道創建一個),并調用addPass()將其添加到技法中。例子程序

osgfxbrowser的效果如圖5~8所示。對于目前已提供的特效,簡介如下:

刻線(Scribe)
這是一個雙通道的特效;第一個通道以通常的方式渲染圖形,而第二個通道使用線框模式,用戶設置好光照和材質之后,即可使用指定的顏色進行渲染。這個特效中使用了PolygonOffset渲染屬性類來避免多邊形斑駁(Z-fighting)的現象,它所需的OpenGL版本至少為1.1。各向異性光照(Anisotropic Lighting)
這種特效使用單一通道,它使用了一種各向異性的光照來替代OpenGL的標準光照模型。幾何體頂點的顏色在這里不是直接進行計算的,而是紋理映射到用戶指定的光照圖板的結果。這里需要使用頂點著色器(vertex program)來計算紋理坐標S和T的值:S = N · H;T = N · L。(其中的數學運算為點乘)這里N表示頂點的法線,L表示光到頂點的向量,H表示中間向量。這種特效很好地演示了State::getInitialViewMatrix()方法的使用,它可以直接獲取視口的初始矩陣并實現直接與視口相關的特效,而不需要任何假借的工作。
該特效需要ARB_vertex_program擴展的支持。

卡通渲染(Cartoon)
這種特效實現了一種名為卡通著色(Cel-Shading)的技法,從而產生一種卡通式的(非真實感的)的渲染效果。它需要兩個通道支持;第一個用于繪制實體表面,第二個用于繪制輪廓線。該特效需要使用頂點著色器來設置紋理坐標,以便在運行時生成的紋理單元0上實現一種尖銳的光照效果。
該特效需要ARB_vertex_program擴展或者OpenGL著色語言的支持。

基于立方映射圖的鏡面高光(Cubemap-based Specular Highlights)
這種特效在片斷層級(fragment level)上(而不是OpenGL通常的頂點層級)應用了鏡面高光,它使用了立方映射圖和反射紋理生成(reflective texgen)的技術。首先要計算出紋理矩陣以實現立方映射圖的自動旋轉;這樣無論從觀察的方向和光照位置上來說,鏡面光的效果都將是始終不變的。用戶可以選擇使用何種光照來計算紋理矩陣。
該特效需要GL_ARB_texture_env_add擴展以及任意一種立方映射圖擴展(GL_EXT_texture_cube_map,GL_ARB_texture_cube_map,或者OpenGL 1.3)的支持。

凹凸貼圖(Bump Mapping)
這種特效可以創建一種凹凸不平的表面效果。其子節點必須使用兩種紋理,其一是漫反射顏色,另一個是法線貼圖(可以使用nVIDIA的法線貼圖生成器或者其它工具,根據高度圖自動生成)。此外,還需要創建正切空間(tangent-space)的基向量并將其關聯到每個Geometry幾何體上;這一步驟可以調用BumpMapping::prepareChildren()方法來迅速完成。注意Geometry對象的漫反射顏色和法線貼圖紋理都必須提前定義好對應的UV貼圖。
該特效推薦使用一種運用了ARB頂點和片斷著色器的技法,另外還定義了一種不使用片斷著色器的技法。后者無法處理環境和鏡面組件的運算,因此在運行時很受限制。

posted on 2009-02-13 15:08 zmj 閱讀(1765) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲免费av观看| 久久最新视频| 国产亚洲综合性久久久影院| 国产精品99久久久久久白浆小说 | 欧美激情一区二区三区| 久久免费视频在线观看| 久久夜色精品国产欧美乱极品| 久久国产精品黑丝| 久久精品水蜜桃av综合天堂| 久久久精品视频成人| 久久久久网站| 亚洲国产美女| 亚洲国产精品一区二区第四页av| 一区二区三区产品免费精品久久75| 激情欧美日韩| 亚洲精一区二区三区| 亚洲小说欧美另类社区| 欧美一区二区三区在线观看视频| 久久理论片午夜琪琪电影网| 亚洲国产欧美不卡在线观看| 一区二区三区回区在观看免费视频| 亚洲欧美另类在线| 巨乳诱惑日韩免费av| 欧美日韩午夜剧场| 国产亚洲一级| 亚洲最新在线视频| 久久久精品五月天| 日韩视频中文字幕| 久久精品首页| 欧美午夜宅男影院在线观看| 狠狠色综合一区二区| 在线一区二区三区四区五区| 久久精品欧美日韩| 99视频有精品| 久久亚洲精品中文字幕冲田杏梨| 欧美电影免费观看大全| 国产精品亚洲а∨天堂免在线| 在线观看欧美视频| 久久gogo国模裸体人体| 亚洲精品小视频| 欧美专区日韩视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 国产亚洲精品一区二区| 在线亚洲美日韩| 99re热精品| 欧美一区二区三区在线观看| 久久爱www久久做| 亚洲日本欧美在线| 麻豆亚洲精品| 在线国产精品一区| 久久久91精品| 欧美日韩亚洲另类| 亚洲在线一区| 欧美日韩卡一卡二| 亚洲福利在线观看| 久久久久**毛片大全| 中文国产一区| 欧美精品大片| 日韩天堂av| 亚洲黄色一区| 免费久久精品视频| 在线成人亚洲| 毛片一区二区三区| 久久久久久亚洲精品中文字幕| 国产噜噜噜噜噜久久久久久久久| 亚洲三级免费电影| 亚洲黄色三级| 欧美日韩国产系列| 一区二区三区视频在线播放| 亚洲区第一页| 欧美日韩亚洲三区| 亚洲欧美日韩在线观看a三区| 99亚洲伊人久久精品影院红桃| 欧美精品激情blacked18| 99亚洲精品| 一本一本大道香蕉久在线精品| 欧美日韩中文字幕精品| 亚洲欧美日韩另类| 欧美一区二区三区在线免费观看| 国产午夜精品理论片a级大结局| 久久久噜噜噜久噜久久| 久久久久88色偷偷免费| 亚洲国产一区视频| 亚洲日产国产精品| 国产精品扒开腿爽爽爽视频| 先锋影音一区二区三区| 欧美综合二区| 亚洲久久一区| 亚洲一区免费| 在线观看中文字幕亚洲| 亚洲精美视频| 国产精品私拍pans大尺度在线 | 久久在线免费观看| 欧美精品国产| 久久久欧美一区二区| 亚洲黄色有码视频| 国产精品久久久久影院亚瑟| 久久成人免费电影| 欧美成熟视频| 欧美在线网址| 欧美极品在线视频| 久久精品五月婷婷| 欧美伦理一区二区| 久久精品亚洲一区二区| 久久国产婷婷国产香蕉| 亚洲欧洲精品一区二区三区| 国产精品国产三级国产普通话99 | 亚洲国产精品国自产拍av秋霞 | 亚洲午夜精品一区二区三区他趣| 国产在线精品一区二区中文| 亚洲欧洲在线播放| 国外视频精品毛片| 在线亚洲伦理| 亚洲欧洲一区二区三区久久| 在线视频欧美日韩精品| 影音先锋中文字幕一区| 99综合在线| 亚洲黄色成人| 久久国产福利国产秒拍| 亚洲一区欧美一区| 欧美国产日韩一区二区三区| 久久女同精品一区二区| 国产精品a级| 亚洲精品一区中文| 亚洲精品乱码久久久久久蜜桃91| 欧美在线观看网址综合| 亚洲欧美激情四射在线日| 男女精品视频| 欧美sm视频| 1024日韩| 久久一区二区三区四区五区| 久久精品噜噜噜成人av农村| 欧美色网在线| 日韩一级二级三级| 亚洲一区二区三区乱码aⅴ| 亚洲黄色在线| 亚洲美女在线观看| 女同性一区二区三区人了人一| 久久久99精品免费观看不卡| 国产日韩高清一区二区三区在线| 99国内精品久久| 亚洲一区二区三区四区五区午夜| 欧美精品一区二区三区视频| 欧美国产第二页| 91久久精品www人人做人人爽| 久久综合国产精品| 欧美.日韩.国产.一区.二区| 亚洲国产导航| 欧美激情亚洲自拍| 亚洲另类春色国产| 亚洲在线观看| 国产日韩欧美视频在线| 新狼窝色av性久久久久久| 久久精品水蜜桃av综合天堂| 影音先锋亚洲视频| 欧美激情日韩| 一区二区三区|亚洲午夜| 亚洲欧美在线另类| 国产日韩欧美在线观看| 久久国产精品网站| 欧美高清在线精品一区| 日韩一区二区高清| 国产精品久久777777毛茸茸| 午夜精品电影| 欧美激情一区二区三区全黄| 久久久久久网址| 国产精品乱码久久久久久| 亚洲在线观看免费视频| 久久精品国产亚洲aⅴ| 伊甸园精品99久久久久久| 免费日韩av电影| 在线亚洲精品福利网址导航| 久久中文精品| 一区二区三区www| 国产日韩亚洲欧美| 欧美成人国产一区二区| 在线中文字幕日韩| 久久久久久久综合狠狠综合| 亚洲欧洲日产国产网站| 欧美亚韩一区| 女同性一区二区三区人了人一| 一区二区三区国产在线观看| 免费日韩av| 日韩午夜高潮| 欧美国产一区二区在线观看| 亚洲深夜激情| 亚洲第一精品在线| 亚洲欧美激情在线视频| 在线观看视频一区二区欧美日韩| 欧美日韩国产a| 久久综合图片| 欧美一区在线直播| 中国av一区| 亚洲日本va午夜在线影院| 久久久99爱| 午夜国产精品视频| 一本综合久久| 亚洲国产色一区| 在线成人www免费观看视频| 国产精品自拍小视频|