• <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>

            蕙麓

            Email:oxionghui@gmail.com

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::

            文章來自:http://www.c-cnc.com/dz/news/news.asp?id=18622
            在進行3D場景渲染時,天空是必不可少的因素。對于3D天空的模擬在視景仿真系統(tǒng)、計算機游戲、三維動畫中有著廣泛的應用。但是,目前對于天空的仿真還存在很多不足,一些模擬方法中存在實現(xiàn)復雜、計算耗時、圖像分辨力不高,真實感不強且只能生成靜態(tài)圖像等問題。本文在研究了前人仿真天空算法的基礎上,利用目前3D圖形行業(yè)中流行的OpenGL技術和有被譽為"大自然的幾何學"美稱的分形理論,提出了一種更加簡單實用的仿真3D天空的方法,可以仿真出具有動態(tài)效果和不同天氣的3D天空,繪制速度快,真實感強。

            l構造天空模型

            1.1 OpenGL技術[1.2]

            OpenGL作為一套圖形標準,由數(shù)百個功能函數(shù)組成,提供了訪問圖形硬件的所有特性,其嚴格按照計算機圖形學原理設計而成,符合光學和視覺的原理,非常適合可視化仿真系。其優(yōu)勢在于:首先,在OpenGL中,允許視景對象用圖形方式表達;其次,OpenGL通過光照處理能表達出物體的三維特性,其光照模型是整體光照模型。可視化仿真圖像的顏色體現(xiàn)著物體與視點以及光源之間的空間位置關系,具有很強的三維效果。此外,為彌補圖形方法難于生成復雜自然背景的不足,OpenGL提供了對圖像數(shù)據(jù)的使用方法,即直接對圖像數(shù)據(jù)讀、寫和拷貝,或者把圖像數(shù)據(jù)定義為紋理與圖形方法結合在一起生成視景圖像以增強效果。本文研究了基于OpenGL技術的3D天空仿真,使得算法易于實現(xiàn),并且有很好的可視化效果。

            1.2 傳統(tǒng)模型

            在傳統(tǒng)的3D游戲中,對于天空的仿真,程序員往往從實時簡單的角度出發(fā),采用非常簡化的天空模型,通常包括以下3種方法[3-5]:用一種接近天空的淡藍色來清除背景;采用天空盒(skyBox)的方法:即首先繪制一個多邊形,然后進行立方體紋理貼圖;八棱錐天空模型:定義一個天頂,以這個頂點為中心繪制一圈三角形扇,然后進行紋理映射。

            這3種方法都具備了實時性,方法簡單的優(yōu)點,但同時也存在明顯的不足,第一種方法繪制的天空效果看起來太平面化,簡單粗糙,逼近度不高。第二種方法對紋理的要求非常高,如果紋理使用得不好,在一個比較大的多邊形上的紋理就容易產(chǎn)生拉伸變形的副作用。此外,霧化設置也會產(chǎn)生問題,如果霧的設置靠近觀察點,則天空的顏色會變淡甚至沒有。第三種方法有明顯的天頂。

            顯然,在如今這種對3D場景仿真要求越來越高的時代,這些方法已經(jīng)不適應時代的要求,需要尋求一種渲染速度快,真實感強,有一定交互能力的3D天空模型。

            1.3 半球型天空模型

            地球是球型的,所以天空像半個球一樣籠罩在大地之上。在用計算機仿真3D天空時,半球型天空模型顯然符合真實世界的天空模型。利用數(shù)學中的球面方程,可以建立如下模型:

            P是球面上一點,R為球的半徑。在球面坐標系下方程改寫為:

            對于一個半球.φ為緯度,其變化范圍是O≤φ≤90°;θ為經(jīng)度,其變化范圍是O≤θ≤360°。采用球型(DOme)的方法,比起采用盒子(BOx)的方法,有很多優(yōu)點。首先由于球形方法繪制的天空具有更多的頂點,霧化效果可以繪制得更加均勻[5]。同時也可以實時改變單個頂點的顏色,這樣可以獲得一些非常好的效果,如一天不同時刻的太陽光。

            半球型天空模型也存在不足:

            (1)頂點數(shù)目過多,影響渲染速度。

            N為所需要繪制的頂點總數(shù);△φ,△θ為繪制球型天頂?shù)捻旤c經(jīng)緯度間隔,值越小、網(wǎng)格越密,繪制越精細。由于采用OpenG技術中的三角形帶繪制(GL-TRIANGLE一STRIP),每次繪制4個頂點,每個頂點被繪制4次,故需要乘以4。

            (2)三角函數(shù)的運算過多。

            在單一場景的渲染中不會影響渲染速度,但在復雜的3D場景中,渲染速度的劣勢會體現(xiàn)出來。因為在計算機中三角函數(shù)的運算較之加、減、乘、除等運算要慢的多。

            1.4 曲面天空模型

            為保持球型天空模型的優(yōu)勢并彌補該算法的不足,本文研究了一種渲染速度更快的曲面天空模型,該模型如圖1所示。

            該模型類似于將一個經(jīng)過細分的平面的4個角點向下拉,形狀看上去像一個撐開的降落傘,將他罩在場景之上,可以模擬3D天空。曲面的長度為S為:

            頂點坐標(x,y,z)的計算公式為:

             

            其中△s為曲面細分間隔;j,i為循環(huán)參數(shù)。

            曲面天空模型仍然可以用OpenGL技術中的三角形帶((GLTRIANGLE_STRIP)繪制,但他避免了三角函數(shù)的運算,且頂點數(shù)目比相同精度的球型天空模型少,故增加了渲染速度。

            2 天空云圖

            2.1 分形云圖

            分形[4]方法建造的物體模型結構精細、算法控制相對簡單,適合于描繪云、樹等結構精細的物體。本文利用分形理論中的插值算法產(chǎn)生靜態(tài)天空云圖紋理,算法如下:

            (1)在平面上劃分正方形網(wǎng)格n×n,隨機給A1,A2,A3,A4這4個角點的顏色。如圖2所示。

            (2)計算中點值,B1=(A1+A2+A3+A4)×0.25+ξ×scale,其中ξ是一個隨機量;Scale一(1/2)H(標度)H即Hurst指數(shù),他也是分形維數(shù)D的度量:D一2一H,如圖3所示。

             

            (3)根據(jù)A1,A4,B1點和網(wǎng)格外一虛擬點,重復第(2)節(jié),得到邊中點c1的顏色值。同理,可計算出C2,C3,C4邊中點的顏色值。

            (4)遞歸步驟(2),(3),使其正方形網(wǎng)格不斷細化,直到達到預期的遞歸深度。

            以上步驟中,正方形初始點的顏色是隨機賦予的,但正方形網(wǎng)格內的所有點不是隨機分布的。通過采用分形插值算法,使得網(wǎng)格內相鄰點之間建立了某種聯(lián)系,從而使生成體內部過渡得更加自然。這樣,通過分形插值算法,得到一個2維數(shù)組,將數(shù)組中的每一個元素值看成是云的不透明度數(shù)據(jù)。最小數(shù)組值代表最藍色,天空中云最少的部分,最大的值代表最白色,天空中云最重的部分。分析數(shù)組并生成藍天白云紋理圖如圖4所示。

            2.2 紋理映射

            紋理映射技術[1.2]也叫紋理貼圖技術(Texture Map-ping),與建造模型的方法相比,在摸擬物體表面細節(jié)方面,紋理映射是一個較有效的方法。景物表面紋理細節(jié)的模擬在真實感圖形合成技術中起著非常重要的作用,這種將景物表面紋理細節(jié)的模擬稱為紋理映射技術。現(xiàn)在,紋理映射已經(jīng)成為三維圖形世界中最為常用的技術之一,其數(shù)學過程十分復雜,但OpenGL已對其進行處理,于是編程者可以利用幾個函數(shù)就可以完成紋理貼圖。

            執(zhí)行紋理貼圖的步驟可以概括為:定義紋理貼圖;控制紋理;說明紋理貼圖方式;激活紋理映射;定義紋理坐標等。在一個球面上進行紋理映射是比較復雜的,采用不同的映射方式將產(chǎn)生不同的問題。如果采用平面映射的方式將在連續(xù)處產(chǎn)生紋理拉伸現(xiàn)象,如果采用球面映射,最大的問題是在球面的極點產(chǎn)生紋理的聚集現(xiàn)象,對于好的紋理,這種現(xiàn)象可以縮減到最小。根據(jù)球面幾何知識,可以得到紋理坐標的具體計算公式:

            加上1/2的原因是為了使U,V坐標的值處于(0.0,1.0)范圍內。

            3 動態(tài)仿真

            本文采用定時器技術和改變紋理矩陣坐標的方法實現(xiàn)云的流動效果。首先定義一個100 ms的定時器,每隔100ms紋理坐標改變一次。其次,使用多重紋理來添加一個單獨的云彩貼圖,通過變換紋理矩陣坐標實現(xiàn)流動。變換紋理坐標的方法是先將當前矩陣類型設置為紋理矩陣(GL-TEXTURE),然后調用glTranslate(),glRotate()和glScale()函數(shù)實現(xiàn)坐標的平移、旋轉和縮放。這樣,云就可以緩慢地在天空中移動。此外,通過添加按鍵響應函數(shù),在函數(shù)體中利用()penGL的模型變換函數(shù),如glRotate(),可以以任意角度旋轉3D天空,達到用戶與3D場景的交互的效果。

            4仿真結果

            本仿真實驗在CPU為P4,主頻為1.7 GHz,內存為256 M,集成顯卡上完成。仿真結果如圖5~圖8所示。天空中的云彩可以沿球形天空緩慢移動,客戶可以通過上下左右鍵旋轉3D天空。該模型在實時3D場景仿真中可以籠罩在場景之上,有很好的3D效果,并且真實感強。采用半球型天空模型的幀速率為250~285 f/s;采用曲面型天空模型的幀速率為324~340 f/s,在保證真實感和交互性的前提下,從渲染速度上看曲面天空模型優(yōu)于半球型天空模型。

             

             

             

            5 結 語

            本仿真系統(tǒng)的軟件平臺為VC++6.O,通過OpenGL圖形庫函數(shù)實現(xiàn)可視化仿真。利用球形方程、平面方程、三角函數(shù)等幾何原理建立各種3D天空模型,運用分形理論中的插值算法編寫天空紋理,并通過OpenGL函數(shù)進行三角形帶繪制天空框架,紋理映射技術,映射出具有真實效果的3D天空。從仿真結果來看,真實感強,實時性好,此外,通過按鍵響應函數(shù),可以以任意角度旋轉,任意高度升降3D天空,交互性強,非常適合3D游戲的戶外場景仿真。

            posted on 2012-06-09 16:27 蕙麓 閱讀(1159) 評論(0)  編輯 收藏 引用 所屬分類: 計算機圖像學(OpenGL)
            色综合久久综精品| 久久强奷乱码老熟女网站| 久久精品中文无码资源站| 久久中文字幕精品| 亚洲精品tv久久久久久久久 | 国产69精品久久久久9999APGF | 久久久久亚洲AV成人网人人网站 | 精品久久久久久无码人妻热| 美女久久久久久| 九九精品99久久久香蕉| 亚洲国产成人久久精品动漫| 久久频这里精品99香蕉久| 国产精品久久国产精品99盘| 日韩十八禁一区二区久久| 国产精品99久久99久久久| 久久精品女人天堂AV麻| 久久99热精品| 色天使久久综合网天天| 91久久国产视频| 97久久超碰国产精品2021| 久久人妻AV中文字幕| 久久九九久精品国产免费直播| 亚洲精品午夜国产VA久久成人| 久久中文字幕无码专区| 99国内精品久久久久久久| 久久99精品久久久久久hb无码| 九九精品久久久久久噜噜| 久久精品亚洲精品国产欧美| 久久午夜电影网| 久久er国产精品免费观看2| 1000部精品久久久久久久久| 色欲av伊人久久大香线蕉影院| 色偷偷91久久综合噜噜噜噜| 精品无码久久久久久国产| 亚洲伊人久久大香线蕉苏妲己| 日本精品久久久中文字幕| 精品国产91久久久久久久| 久久久久国产一级毛片高清版| 久久婷婷久久一区二区三区| 久久se精品一区二区影院| 久久综合精品国产一区二区三区|