• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于粒子系統(tǒng)的位置可控有聲煙花模擬

      2013-11-10 07:09:22汪繼文
      關(guān)鍵詞:粒子系統(tǒng)煙花鼠標(biāo)

      李 海,汪繼文

      (安徽大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 合肥 230601)

      1983年,由REEVES W T等人提出的粒子系統(tǒng)繪制算法被認(rèn)為是迄今為止模擬不規(guī)則模糊物體最為成功的算法[1],使得具有不規(guī)則幾何形狀、內(nèi)在不確定性且運(yùn)動(dòng)具有隨機(jī)性的模糊物體的虛擬仿真模擬上了一個(gè)新的臺(tái)階。目前,國(guó)內(nèi)已經(jīng)有很多研究者采用粒子系統(tǒng)對(duì)自然景物進(jìn)行成功模擬,如王曉娟對(duì)禮花進(jìn)行了模擬[2],肖何等人成功地進(jìn)行了噴泉仿真[3]。本文在以上理論的基礎(chǔ)上,通過(guò) VC++和OpenGL開發(fā)工具,利用鼠標(biāo)注冊(cè)回調(diào)等函數(shù)[4]對(duì)煙花燃放的位置加以控制,并加入了音頻技術(shù),從視覺(jué)和聽覺(jué)兩個(gè)方面上進(jìn)一步增強(qiáng)了煙花爆炸模擬的靈活性、逼真性和沉浸感。

      1 粒子系統(tǒng)基本原理

      粒子系統(tǒng)不是一個(gè)簡(jiǎn)單的靜態(tài)模型,而是一種過(guò)程計(jì)算模型。粒子系統(tǒng)是由許多簡(jiǎn)單形狀的微小粒子(如球體、橢球、立方體、點(diǎn)、線等)作為基本元素聚集起來(lái)形成一個(gè)不規(guī)則的模糊物體,并以這些粒子充滿物體,使其呈現(xiàn)各式各樣的形狀,從而構(gòu)成的一個(gè)封閉的系統(tǒng)。

      組成粒子系統(tǒng)的每個(gè)粒子都有一組屬性,包括位置、運(yùn)動(dòng)速度、運(yùn)動(dòng)加速度、形狀、大小、顏色、透明度、運(yùn)動(dòng)方向和生命周期等,這些屬性隨著時(shí)間的推移在不斷地變化。一個(gè)粒子究竟有什么樣的屬性主要取決于其實(shí)現(xiàn)的具體應(yīng)用。

      一般情況下,系統(tǒng)中的每個(gè)粒子都會(huì)隨著虛擬世界時(shí)間的流逝經(jīng)歷一個(gè)產(chǎn)生—活動(dòng)—消亡3個(gè)階段的流程[5],如圖 1所示。

      圖1 粒子系統(tǒng)流程圖

      2 煙花粒子系統(tǒng)建模

      2.1 建立坐標(biāo)系

      本文建立的坐標(biāo)系以屏幕的中心為坐標(biāo)原點(diǎn),從左到右的方向?yàn)閄軸的正方向,從下到上為Y軸的正方向,從屏幕里面指向外面的方向?yàn)閆軸正方向[6]。

      2.2 煙花及粒子的數(shù)據(jù)結(jié)構(gòu)

      煙花粒子的數(shù)據(jù)結(jié)構(gòu)如下:

      2.3 煙花粒子系統(tǒng)的初始化

      煙花粒子系統(tǒng)的初始化就是賦予煙花粒子屬性初始狀態(tài)。在煙花系統(tǒng)中,每個(gè)煙花由一組具有相似性質(zhì)的煙花粒子組成,每一幀煙花的更新就是這組煙花粒子的更新。這里把每組粒子數(shù)定義為一個(gè)常數(shù)MAX_PARTICLES,這個(gè)常數(shù)的選擇很重要[7],如果過(guò)大,會(huì)影響系統(tǒng)的實(shí)時(shí)性;如果過(guò)小,則會(huì)影響煙花模擬的真實(shí)性。

      通過(guò)隨機(jī)函數(shù)rand()和參數(shù)控制煙花的初始位置、初始顏色、速度、加速度、生命周期及衰減速率。其中,顏色的初始化可以在模型中定義各種顏色到一個(gè)顏色數(shù)組中,然后通過(guò)隨機(jī)函數(shù)rand()調(diào)用。粒子的運(yùn)動(dòng)受到各種外力的影響,包括重力和空氣阻力等,在本實(shí)驗(yàn)中,只考慮垂直方向重力所產(chǎn)生的加速度。

      2.4 煙花粒子的運(yùn)動(dòng)更新

      煙花粒子運(yùn)動(dòng)更新是整個(gè)煙花系統(tǒng)中最重要的組成部分,就是確定每一時(shí)刻當(dāng)前粒子的運(yùn)動(dòng)狀態(tài),包括該時(shí)刻粒子的位置、速度和生命值等各種屬性值。而這些屬性又是由上一幀屬性狀態(tài)和運(yùn)動(dòng)的規(guī)律決定的。粒子下一幀的位置為:

      其中,當(dāng)前幀位置為(sx(t),sy(t),sz(t)),當(dāng)前幀速度為(vx(t),vy(t),vz(t)); 下 一 幀 的 位 置 為 (sx(t+dt),sy(t+dt),sz(t+dt)),下 一 幀 的 速 度 為 (vx(t+dt),vy(t+dt),vz(t+dt)),dt為 連 續(xù) 兩幀間的時(shí)間間距。

      2.5 煙花粒子的消亡

      煙花粒子從生成開始到消失所經(jīng)歷的時(shí)間是其在整個(gè)煙花系統(tǒng)中的生命周期。初始化粒子的生命值為1,為每個(gè)煙花粒子定義在一定范圍內(nèi)的隨機(jī)衰減因子,衰減因子越大,粒子生命周期越短;相反,衰減因子越小,粒子生命周期越長(zhǎng)。隨著時(shí)間的推移,單個(gè)煙花粒子的生命值也在逐漸減少,直到為0,則從系統(tǒng)中刪除此粒子。

      2.6 OpenGL中的紋理映射與色彩混合技術(shù)

      2.6.1 色彩融合技術(shù)

      色彩融合技術(shù)是將輸入的像素段與幀緩存中目標(biāo)區(qū)域中的像素相結(jié)合生成新的像素。當(dāng)煙花粒子逐漸消亡時(shí),顏色漸漸消退,最終達(dá)到與背景融為一體的效果。融合公式為:

      (Rs×Sr+Rd×Dr,Gs×Sg+Gd×Dg,Bs×Sb+Bd×Db,As×Sa+Ad×Da)(3)

      源 因 子 為 (Sr,Sg,Sb,Sa),目 的 因 子 為 (Dr,Dg,Db,Da)。 其中,Rs、Rd、Gs、Gd、Bs、Bd、As、Ad 是由紋理函數(shù)設(shè)置的紋理映射方式參數(shù)。

      2.6.2 紋理映射技術(shù)

      紋理映射技術(shù)是將紋理空間中的紋理像素與某個(gè)物體對(duì)應(yīng)的像素顏色相互結(jié)合的技術(shù),從而達(dá)到簡(jiǎn)化建模過(guò)程的作用,并且可以提高系統(tǒng)的實(shí)時(shí)性,模擬物體表面豐富的紋理細(xì)節(jié),提高圖形的逼真性。本文以矩形作為繪制煙花粒子的基本圖元,利用紋理映射和色彩融合技術(shù)將一幅二維的BMP格式的煙花圖片(如圖2所示)映射至該矩形圖元上。

      圖2 煙花紋理圖片

      3 位置可控?zé)熁M

      OpenGL應(yīng)用工具包GLUT中封裝有鼠標(biāo)消息注冊(cè)回調(diào)函數(shù),利用此函數(shù)可以很好地控制煙花的位置,從而進(jìn)一步增強(qiáng)煙花模擬的可控性和靈活性。

      鼠標(biāo)的按下、松開或移動(dòng)等操作都可以產(chǎn)生相應(yīng)的鼠標(biāo)消息,這些消息在應(yīng)用程序開發(fā)中出現(xiàn),常常需要處理。GLUT對(duì)這幾種常用的鼠標(biāo)消息進(jìn)行了封裝,glutMontionFunc(void(*func)(intbutton,intstate,intx,int y))可以實(shí)現(xiàn)對(duì)鼠標(biāo)左鍵、右鍵或中鍵的按下、松開等操作的消息響應(yīng)。其中,button是左鍵、右鍵和中鍵的標(biāo)志,state是按下、松開的標(biāo)志。

      用鼠標(biāo)單擊屏幕,系統(tǒng)把單擊的位置傳送給鼠標(biāo)消息注冊(cè)回調(diào)函數(shù) glutMontionFunc(mouseFunc),通過(guò)一系列的坐標(biāo)轉(zhuǎn)換生成最終需要的OpenGL坐標(biāo),然后煙花在此位置上發(fā)生爆炸。主要實(shí)現(xiàn)的代碼如下:

      4 音頻與煙花爆炸同步

      OpenGL本身不支持音頻,本文使用了Win32的API函 數(shù) 庫(kù) 中 的 PlaySound (LPCSTR pszSound,HMODULE hmod,DWORD fdwSound)函數(shù)實(shí)現(xiàn)音頻與煙花爆炸的同步。 引入 windows.h 頭文件(#include<windows.h>),后面加上如下代碼:

      DWORD fdwSound)只能實(shí)現(xiàn) WAV格式的文件,其他音頻文件可以通過(guò)別的軟件進(jìn)行剪切并轉(zhuǎn)化為WAV格式。參數(shù)pszSound是指定了要播放聲音的字符串,本實(shí)驗(yàn)中設(shè)為WAVE文件的名字;參數(shù)fdwSound是標(biāo)志的組合,為實(shí)現(xiàn)同步和引入音頻文件,將其設(shè)為SND_FILENAME|SND_SYNC。主要實(shí)現(xiàn)的代碼如下:

      5 實(shí)驗(yàn)結(jié)果評(píng)估與分析

      實(shí)驗(yàn)利用粒子系統(tǒng)對(duì)煙花生成的過(guò)程進(jìn)行仿真,應(yīng)用了OpenGL的紋理映射、色彩混合、顯示列表、加入背景圖片、插入音頻和控制位置等技術(shù),結(jié)果如圖3所示。圖3是運(yùn)用可以截取鼠標(biāo)位置的紅蜻蜓截圖工具截取的實(shí)驗(yàn)結(jié)果圖片,從圖中可以清晰地看見(jiàn)在鼠標(biāo)的位置上煙花發(fā)生了爆炸。

      圖3 位置控制的煙花

      運(yùn)用粒子系統(tǒng)對(duì)不規(guī)則模糊物體進(jìn)行模擬是一個(gè)有效的方法。本實(shí)驗(yàn)從系統(tǒng)的實(shí)時(shí)性、簡(jiǎn)單性、靈活性和逼真性角度出發(fā)實(shí)現(xiàn)了煙花模型模擬,采用了紋理映射和顯示列表技術(shù),提高了系統(tǒng)的實(shí)時(shí)性;采用了色彩融合技術(shù),增強(qiáng)了系統(tǒng)的逼真性;加入了背景圖,提高了模擬的真實(shí)感;通過(guò)提取鼠標(biāo)位置,實(shí)現(xiàn)了對(duì)煙花爆炸位置的控制,增強(qiáng)了系統(tǒng)的靈活性;加入了音頻技術(shù),實(shí)現(xiàn)煙花爆炸和聲音的同步,增強(qiáng)了系統(tǒng)的沉浸感。

      [1]REEVES W T.Particle systems-a technique for modeling a class of fuzzy objects[J]. Computer Graphics,1983,17(3):359-376.

      [2]王曉娟.基于粒子系統(tǒng)動(dòng)態(tài)煙花的模擬[J].青海大學(xué)學(xué)報(bào),2009(4):29-32.

      [3]肖何,何明耘,白忠建.OpenGL中基于粒子系統(tǒng)的噴泉模擬實(shí)現(xiàn)[J].計(jì)算機(jī)仿真,2007(12):201-204.

      [4]SHREINER D.OpenGL 編 程 指 南[M].李 軍 , 徐 波 , 譯 .北京:機(jī)械工業(yè)出版社,2010.

      [5]葛芳,張成,韋穗,等.基于粒子系統(tǒng)的煙花動(dòng)畫設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(8):180-183.

      [6]汪繼文,胡文平,金余鋒.基于粒子系統(tǒng)的 8字動(dòng)態(tài)煙花仿真[J].計(jì)算機(jī)仿真,2010,27(10):211-214.

      [7]丁紀(jì)云,陳利平,李思昆.基于OpenGL的煙花動(dòng)態(tài)模擬方法的研究與實(shí)現(xiàn)[J].計(jì)算機(jī) 工 程 ,2002,20(4):233-250.

      猜你喜歡
      粒子系統(tǒng)煙花鼠標(biāo)
      國(guó)慶煙花秀
      利用GPU加速的粒子系統(tǒng)全球流場(chǎng)可視化系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
      放煙花
      Progress in Neural NLP: Modeling, Learning, and Reasoning
      Engineering(2020年3期)2020-09-14 03:42:00
      煙花
      煙花
      UE 4粒子系統(tǒng)與外部數(shù)據(jù)通信研究
      基于粒子系統(tǒng)的建模與仿真綜述
      GPU支持下基于粒子系統(tǒng)編輯器的特效技術(shù)研究
      45歲的鼠標(biāo)
      白河县| 荃湾区| 安溪县| 时尚| 米林县| 台南市| 绥化市| 蒲江县| 黄平县| 陆良县| 渭南市| 宕昌县| 阜康市| 英吉沙县| 元朗区| 黔江区| 洪湖市| 巨野县| 和龙市| 壶关县| 西乌| 金川县| 天门市| 奉化市| 永年县| 太白县| 灵山县| 临邑县| 闻喜县| 乌恰县| 高要市| 伊金霍洛旗| 河间市| 汉源县| 辽宁省| 普定县| 英山县| 甘肃省| 扎鲁特旗| 防城港市| 哈密市|