陳姝慧
(長春工業(yè)大學(xué)電氣與電子工程學(xué)院,吉林長春 130012)
由于地下煤礦的環(huán)境和地質(zhì)條件復(fù)雜多變,各種災(zāi)情時(shí)有發(fā)生,直接影響著煤礦工人的人身安全,而傳統(tǒng)的二維地理信息系統(tǒng)(GIS)已經(jīng)無法對(duì)地下煤礦的地質(zhì)環(huán)境和災(zāi)情現(xiàn)象進(jìn)行詳細(xì)的表達(dá)和描述,為了使煤礦業(yè)的專業(yè)人員和煤礦工人都可以很容易地獲得地下煤礦的實(shí)際數(shù)據(jù),因此,需要采用虛擬現(xiàn)實(shí)技術(shù)進(jìn)行模擬實(shí)現(xiàn)[1]。透水現(xiàn)象是煤礦的災(zāi)情之一,由于水流在隨著時(shí)間不斷地變化,是一個(gè)模糊物體,所以需要采用跨平臺(tái)、可兼容的OpenGL作為主要的開發(fā)工具,而水流則采用粒子系統(tǒng)來實(shí)現(xiàn)。
OpenGL(Open Graphics Library)是用于三維圖像(二維的亦可)的一個(gè)跨編程語言、跨平臺(tái)的專業(yè)圖形程序接口。它具有建模、變換、顏色模式設(shè)置、光照和材質(zhì)設(shè)置、紋理映射、位圖顯示和圖像增強(qiáng)、雙緩存動(dòng)畫等功能,OpenGL具有使用簡便、功能強(qiáng)大、調(diào)用方便等特點(diǎn)。
粒子系統(tǒng)是計(jì)算機(jī)圖形學(xué)中模擬模糊物體和現(xiàn)象的最成功的圖形生成技術(shù)。粒子系統(tǒng)在繪制不規(guī)則的對(duì)象,如火焰、水流、云彩、爆炸等方面具有獨(dú)特的優(yōu)點(diǎn),因此,若要使模擬物體的效果更加豐富和真實(shí),就必須使用粒子系統(tǒng)。粒子系統(tǒng)的優(yōu)點(diǎn)是[2]:
1)單體素和復(fù)雜物體行為的有機(jī)結(jié)合。例如,可以利用粒子系統(tǒng)生成火焰、噴泉等。
2)易于實(shí)現(xiàn)。只要提供用于粒子屬性的隨機(jī)過程的一些參數(shù)即可定義一個(gè)粒子系統(tǒng)。
3)粒子簡單,易于實(shí)現(xiàn),而且顯示效率較高。
由于OpenGL符合光學(xué)和計(jì)算機(jī)圖形學(xué)原理,非常適合可視化的模糊物體仿真系統(tǒng),并且能實(shí)現(xiàn)高性能的三維圖形功能,所以,此系統(tǒng)采用性能優(yōu)越的底層3D圖形函數(shù)庫OpenGL作為煤礦透水子系統(tǒng)的主要開發(fā)工具。
1.1.1 建模
OpenGL除了能繪制基本的點(diǎn)、線、多邊形外,還可以繪制復(fù)雜的三維物體(如球、錐、多面體等)。OpenGL通常用多邊形的頂點(diǎn)來描述三維模型。
1.1.2 變換
OpenGL的模型觀察是通過一系列的變換實(shí)現(xiàn)的。OpenGL包括基本變換、投影變換、視口變換和取景變換等變換方法。這些變換方法可以減少系統(tǒng)的運(yùn)行時(shí)間,提高圖形的顯示速度。
1.1.3 顏色模式的設(shè)定
顏色模式包括RGBA模式和顏色索引模式。在RGBA模式中,顏色由RGB(紅、綠、藍(lán))值來設(shè)定;在顏色索引模式中,顏色值則由顏色表中的一個(gè)顏色索引值來設(shè)定。
1.1.4 光照和材質(zhì)的應(yīng)用
繪制有真實(shí)感的三維物體必須做光照處理,OpenGL提供了管理4種光(輻射光、環(huán)境光、鏡面光和漫反射光)的方法。另外,還可以指定模型表面的反射特性,而光的RGB分量和材質(zhì)RGB分量的反射率的乘積所形成的顏色才是最后反映到人眼中的顏色。
1.1.5 圖像效果增強(qiáng)
OpenGL除了基本的拷貝和像素讀寫外,還提供了一系列增強(qiáng)三維景觀的圖像效果的函數(shù),這些函數(shù)通過反走樣、混合和霧化來增強(qiáng)圖像的效果。
1.1.6 位圖顯示
OpenGL提供了專門對(duì)位圖和圖像進(jìn)行操作的函數(shù)。
1.1.7 紋理映射
紋理是在計(jì)算機(jī)圖形學(xué)中,包含顏色、alpha值、亮度等數(shù)據(jù)的矩形數(shù)據(jù)組。OpenGL提供的一系列的函數(shù)可以逼真地描述物體的表面細(xì)節(jié),可以把真實(shí)圖像貼到景物的多邊形上,從而十分逼真地繪制三維景物。
1.1.8 動(dòng)畫
OpenGL的動(dòng)畫功能就是雙緩存(double bu ffer)技術(shù),雙緩存包括前臺(tái)緩存和后臺(tái)緩存兩種方式。雙緩存技術(shù)就是先在內(nèi)存中生成下一幅圖像,然后把已經(jīng)生成的圖像拷貝到屏幕上。
1.1.9 交互技術(shù)
在OpenGL中,用戶可以自由選擇和修改三維景觀中的物體[3]。
OpenGL基本工作流程[4]如圖1所示。
圖1 OpenGL基本工作流程
頂點(diǎn)數(shù)據(jù)包括幾何頂點(diǎn)數(shù)據(jù)和幾何像素裝配數(shù)據(jù),在對(duì)頂點(diǎn)數(shù)據(jù)進(jìn)行操作時(shí),根據(jù)景物模型的要求來進(jìn)行。景物模型的要求不同決定采取的操作也就不同。
流程操作到最后,在幀緩沖區(qū)內(nèi)的像素值被送入到幀緩沖器中來實(shí)現(xiàn)模擬圖形的顯示。
OpenGL的圖形操作大致可以分為以下4個(gè)步驟:
1)建模:建立景物模型,并且對(duì)其進(jìn)行數(shù)學(xué)描述。建模包括幾何建模和行為建模兩種模式;
2)設(shè)置視點(diǎn):把模型放到三維空間中去,設(shè)置視點(diǎn)來描述觀察者的空間位置以及所感興趣的景觀;
3)計(jì)算特征:根據(jù)景物應(yīng)用條件的不同來計(jì)算模型物體的環(huán)境特征;
4)光柵化:把模型的數(shù)學(xué)描述以及與模型相關(guān)的所有信息轉(zhuǎn)換為屏幕上的像素的過程。
通過OpenGL繪制出的巷道模擬效果圖如圖2和圖3所示。
圖2 煤礦巷道礦車圖
圖3 煤礦透水事故圖
粒子系統(tǒng)的基本思想是采用大量形狀簡單、相似而且具有“生命”的微小粒子來定義和描述一些不規(guī)則的模糊物體。這些粒子都要在系統(tǒng)中經(jīng)歷“誕生”、“運(yùn)動(dòng)和生長”及“死亡”3個(gè)階段。正是由于粒子系統(tǒng)是個(gè)有“生命”的系統(tǒng),所以才形成了動(dòng)態(tài)畫面,充分模擬出了物體的隨機(jī)性和動(dòng)態(tài)性[5]。
對(duì)于粒子系統(tǒng)的描述,傳統(tǒng)的方法是從粒子的3個(gè)階段進(jìn)行的,現(xiàn)在的方法是將粒子系統(tǒng)的各個(gè)屬性統(tǒng)一放到一個(gè)集合里,而這些集合就構(gòu)成了模糊物體的模型。
2.1.1 傳統(tǒng)的粒子方法表述
2.1.1.1 “誕生”階段粒子屬性的表述
新誕生的粒子數(shù)目
粒子的初始位置s(f0)由粒子的誕生區(qū)域決定。
粒子的初始速度v(f0)=粒子的平均速度mv+rand()*粒子的速度方差vv。
粒子的初始顏色c(f0)=粒子的平均顏色mc +rand()*粒子的顏色方差vc。
粒子的初始透明度t(f0)=粒子的平均透明度m t+rand()*粒子的透明度方差v t。
粒子的生存期l(f0)=粒子的平均生存期m l +rand()*粒子的生存期方差vl。
其中,PM(fi)PM和PV(fi)PV是第fi幀新誕生粒子數(shù)目的平均值和方差,rand()是[-1,1]上均勻分布的隨機(jī)函數(shù),平均值和方差是用戶給定的常數(shù)。
2.1.1.2 “運(yùn)動(dòng)和生長”階段粒子屬性的表述
位置:
速度:
顏色:
透明度:
生存期:
式中:a,Δc,Δt ——分別為粒子的加速度、顏色變化率、透明度變化率,可定義為常數(shù)。
2.1.1.3 “死亡”階段粒子屬性的表述
粒子的生命期隨著每幀的播放而遞減,當(dāng)幀數(shù)減為0時(shí),粒子死亡,應(yīng)從系統(tǒng)中將粒子刪除。
2.1.2 現(xiàn)在的粒子方法表述
粒子系統(tǒng)被定義成了一個(gè)在實(shí)數(shù)域上的n維向量,它囊括了粒子的所有屬性[6]。
式中:Attri1,Attri2,…,Attrii,…,Attrin——粒子的n個(gè)屬性。
一個(gè)粒子系統(tǒng)是由大量的基本粒子元素構(gòu)成,每個(gè)粒子有一組屬性,如位置、速度、顏色和生命期,粒子的初始值由隨機(jī)過程產(chǎn)生。一個(gè)粒子系統(tǒng)是不斷進(jìn)化的,在生命期的每一刻,都要完成以下工作[7]:
1)粒子源產(chǎn)生新粒子。粒子由位于空間的某個(gè)地方的粒子源產(chǎn)生;
2)賦予每一個(gè)新粒子一定的初始屬性。這是粒子系統(tǒng)的初始化過程,它們的初始屬性由隨機(jī)過程控制;
3)刪除“死亡”的粒子。檢查粒子的生命期,若粒子的生命期為0或者粒子的坐標(biāo)超過指定的空間邊界值,則將粒子從系統(tǒng)中刪除;
4)更新粒子屬性。根據(jù)粒子的動(dòng)態(tài)特性,更新所有粒子的屬性,在該步驟中,粒子的生命期遞減一個(gè)時(shí)間步;
5)繪制并顯示粒子。顯示粒子系統(tǒng)中所有處于生命期中的粒子所組成的圖形。
粒子系統(tǒng)運(yùn)行流程如圖4所示。
粒子系統(tǒng)主要是烘托總體的宏觀效果,它只是從宏觀上設(shè)定粒子的參數(shù)特性和運(yùn)動(dòng),所有粒子都具有類似的性質(zhì),按類似的規(guī)律運(yùn)動(dòng)。對(duì)粒子的操作只能通過對(duì)整個(gè)粒子系統(tǒng)來操作,而不能單獨(dú)編輯某一個(gè)粒子。又由于世間的自然景觀是形態(tài)萬千、變幻莫測的,所以需要多個(gè)粒子系統(tǒng)來描述,因此采用面向?qū)ο蟮乃枷耄肓肆W酉到y(tǒng)的概念[8]。算法在每一時(shí)刻首先確定新生的子粒子系統(tǒng)的數(shù)量,子粒子系統(tǒng)繼承父粒子系統(tǒng)的所有屬性。因此,在設(shè)計(jì)過程中,水粒子系統(tǒng)由水粒子系統(tǒng)層和水粒子系統(tǒng)組成,其系統(tǒng)結(jié)構(gòu)如圖5所示。
圖4 粒子運(yùn)行流程
圖5 水粒子系統(tǒng)結(jié)構(gòu)
由于粒子是有“生命”的,所以隨著時(shí)間的推移,粒子的相關(guān)屬性會(huì)相應(yīng)地發(fā)生變化,并且舊的粒子隨之消亡,新的粒子不斷地產(chǎn)生加入。在本系統(tǒng)中,水粒子也有一組屬性,它們分別是顏色、形狀、大小、速度、位置、生命期等。
3.2.1 水粒子的顏色
水粒子的顏色主要包括初始顏色、消隱顏色和透明度3部分。其中初始顏色是新生粒子的顏色,消隱顏色是粒子在消亡時(shí)的顏色。本系統(tǒng)中,水粒子的初始顏色可由下式確定:
水粒子的透明度即亮度是一個(gè)從0到1變化的實(shí)數(shù),0表示最暗,1表示最亮。而水粒子的初始亮度為1。
3.2.2 水粒子的形狀和大小
水粒子的初始形狀和大小在系統(tǒng)中產(chǎn)生時(shí)就已經(jīng)被確定下來,為最簡單的點(diǎn)。
3.2.3 水粒子的速度
水粒子的初始速度有一定的大小和方向,并且隨著時(shí)間相應(yīng)地變化。水粒子的初始速度可由下式確定:
假設(shè)水粒子在產(chǎn)生時(shí)刻是沒有外力作用的,方向?yàn)橄蛏线\(yùn)動(dòng),則有
3.2.4 水粒子的生命期
粒子的生命期是指粒子在系統(tǒng)中的存活時(shí)間,而水粒子的生命期則在粒子生成時(shí)已經(jīng)由系統(tǒng)設(shè)定,其初值為+1.0 f。在描述上述屬性的公式中,MeanCo lor(R,G,B)和M eanSpeed是顏色和速度的平均值,VarColor(R,G,B)和VarSpeed是顏色和速度的隨機(jī)值,Rand()是在(-1.0,+1.0)上均勻分布的隨機(jī)函數(shù),其中平均值和隨機(jī)值是由用戶給定的。
水粒子系統(tǒng)流程如圖6所示。
圖6 水粒子系統(tǒng)流程
程序按照?qǐng)D6所示的系統(tǒng)流程圖執(zhí)行,最后模擬出的透水效果如圖7所示。
圖7 模擬出的透水效果圖
在這個(gè)透水效果圖中,水是先從頂部開始一點(diǎn)一點(diǎn)地滲漏,然后側(cè)部也逐漸開始滲漏,最后形成大面積的透水。
基于粒子系統(tǒng)的、以O(shè)penGL為煤礦虛擬現(xiàn)實(shí)系統(tǒng)的主要開發(fā)工具所做的設(shè)計(jì)和研究,還只是煤礦虛擬現(xiàn)實(shí)系統(tǒng)的起步階段。而自從1983年粒子系統(tǒng)的方法誕生以來,雖然經(jīng)歷了二十幾年的發(fā)展和完善,在模擬模糊物體方面已經(jīng)達(dá)到了一定的水平,但是仍然還有許多問題需要進(jìn)一步解決。
總之,在國內(nèi)的礦山虛擬現(xiàn)實(shí)系統(tǒng)應(yīng)用中應(yīng)盡快擺脫理論探討階段,加快在理論上的研究,盡快地縮短與國外的差距;在基于粒子系統(tǒng)方法的水模擬研究中,真實(shí)感和實(shí)時(shí)性將是今后發(fā)展、研究的重點(diǎn)。
[1] 趙銀花.虛擬現(xiàn)實(shí)與現(xiàn)代室內(nèi)設(shè)計(jì)表現(xiàn)[J].長春工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2010,31(5):593-595.
[2] 張芹,吳慧中,張健.基于粒子系統(tǒng)的建模方法研究[J].計(jì)算機(jī)科學(xué),2003,30(8):144-146.
[3] 和平鴿工作室.OpenGL高級(jí)編程與可視化系統(tǒng)開發(fā):系統(tǒng)開發(fā)篇[M].2版.北京:中國水利水電出版社,2006.
[4] 徐明亮,盧紅星,王琬.OpenGL游戲編程[M].北京:機(jī)械工業(yè)出版社,2008.
[5] 龐新,王相海.基于OpenGL的禮花粒子系統(tǒng)模擬研究[J].計(jì)算機(jī)科學(xué),2008,35(5):216-219.
[6] 李哲,艾婷,高文舉.基于紋理映射的粒子火焰的模擬與繪制[J].長春工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2009,30(2):215-218.
[7] 徐利明,姜昱明.基于粒子系統(tǒng)與OpenGL的實(shí)時(shí)雨雪模擬[J].計(jì)算機(jī)仿真,2005,22(7):243-245.
[8] 楊冰,魯敏.基于景物特征的粒子系統(tǒng)建模技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2000,17(5):20-22.