湖北工業(yè)大學(xué) 劉宏
基于OpenGL的粒子系統(tǒng)的研究與實(shí)現(xiàn)
湖北工業(yè)大學(xué) 劉宏
本文設(shè)計(jì)了基于OpenGL粒子系統(tǒng)的噴泉模型,詳細(xì)討論了模型中粒子的屬性及其變化,實(shí)現(xiàn)了具有較強(qiáng)真實(shí)感的動(dòng)態(tài)變化和拋物變化等噴泉特征,采用了紋理映射和視線跟蹤技術(shù)進(jìn)行三維噴泉渲染;同時(shí),采用Line方式取代傳統(tǒng)的 Point方式渲染粒子實(shí)現(xiàn)噴泉模擬。該方式模擬噴泉比較真實(shí),速度快,在普通的微機(jī)上可以得到令人滿意的效果。
粒子系統(tǒng);噴泉
隨著計(jì)算機(jī)仿真技術(shù)的不斷提高,人們對(duì)真實(shí)事物的模擬要求越來(lái)越高,模擬技術(shù)的重要性越來(lái)越突出,尤其在3D游戲、軍事演習(xí)和仿真實(shí)驗(yàn)等方面。而尋求能準(zhǔn)確地描述客觀世界中各種現(xiàn)象與景觀的數(shù)學(xué)模型,并逼真地再現(xiàn)這些現(xiàn)象與景觀,是計(jì)算機(jī)圖形學(xué)的一個(gè)重要研究課題。
粒子系統(tǒng)[1]到底是什么?所謂的粒子系統(tǒng),就是將人們看到的物體運(yùn)動(dòng)和自然現(xiàn)象,用一系列運(yùn)動(dòng)的粒子來(lái)描述,再將這些粒子運(yùn)動(dòng)的軌跡映射到顯示屏上,在顯示屏上看到的就是物體運(yùn)動(dòng)和自然現(xiàn)象的模擬效果了。
利用粒子系統(tǒng),可以在屏幕中表現(xiàn)諸多的特殊效果,如:焰火、火苗、落葉、雪花飛舞等。不怕做不到,就怕想不到。只要你的想象力足夠豐富,就可以創(chuàng)造出意想不到的奇跡來(lái)。
在現(xiàn)實(shí)世界中,所有的物體都具有三維特征,但計(jì)算機(jī)本身只能處理數(shù)字,顯示二維的圖形,將三維物體及二維數(shù)據(jù)聯(lián)系在一起的唯一紐帶就是坐標(biāo)。
為了使被顯示的三維物體數(shù)字化,要在被顯示的物體所在的空間中定義一個(gè)坐標(biāo)系。這個(gè)坐標(biāo)系的長(zhǎng)度單位和坐標(biāo)軸的方向要適合對(duì)被顯示物體的描述,這個(gè)坐標(biāo)系稱(chēng)為世界坐標(biāo)系。世界坐標(biāo)系是始終固定不變的。OpenGL還定義了局部坐標(biāo)系的概念,所謂局部坐標(biāo)系,也就是坐標(biāo)系以物體的中心為坐標(biāo)原點(diǎn),物體的旋轉(zhuǎn)或平移等操作都是圍繞局部坐標(biāo)系進(jìn)行的,這時(shí),當(dāng)物體模型進(jìn)行旋轉(zhuǎn)或平移等操作時(shí),局部坐標(biāo)系也執(zhí)行相應(yīng)的旋轉(zhuǎn)或平移操作。需要注意的是,如果對(duì)物體模型進(jìn)行縮放操作,則局部坐標(biāo)系也要進(jìn)行相應(yīng)的縮放,如果縮放比例在各坐標(biāo)軸上不同,那么再經(jīng)過(guò)旋轉(zhuǎn)操作后,局部坐標(biāo)軸之間可能不再相互垂直。無(wú)論是在世界坐標(biāo)系中進(jìn)行轉(zhuǎn)換還是在局部坐標(biāo)系中進(jìn)行轉(zhuǎn)換,程序代碼是相同的,只是不同的坐標(biāo)系考慮的轉(zhuǎn)換方式不同罷了。計(jì)算機(jī)對(duì)數(shù)字化的顯示物體作了加工處理后,要在圖形顯示器上顯示,這就要在圖形顯示器屏幕上定義一個(gè)二維直角坐標(biāo)系,這個(gè)坐標(biāo)系稱(chēng)為屏幕坐標(biāo)系。這個(gè)坐標(biāo)系坐標(biāo)軸的方向通常取成平行于屏幕的邊緣,坐標(biāo)原點(diǎn)取在左下角,長(zhǎng)度單位常取成一個(gè)像素。
為了方便粒子系統(tǒng)的運(yùn)用,McAllister以O(shè)penGL為基礎(chǔ),利用C++開(kāi)發(fā)了一套ParticleSystemAPI。這套API具有以下優(yōu)點(diǎn):運(yùn)行高效、運(yùn)用靈活、參數(shù)獨(dú)立、升級(jí)方便、硬件無(wú)關(guān)、學(xué)習(xí)簡(jiǎn)單等。
該系統(tǒng)共分為5個(gè)部分:粒子組、活動(dòng)、活動(dòng)列表、屬性和域。
所有的粒子都存在粒子組中,粒子組是一組具有相同作用力的粒子集合。用戶(hù)可以定義多個(gè)具有不同行為的粒子組分別進(jìn)行調(diào)用,但在某一時(shí)刻,只能有一個(gè)粒子組是活動(dòng)的。
下面我們將介紹基于OpenGL的粒子系統(tǒng)的開(kāi)發(fā)環(huán)境:本系統(tǒng)是在visualC++6.0下實(shí)現(xiàn)的,采用OpenGL技術(shù),并且是基于MFC框架下實(shí)現(xiàn)的。
本文闡述了基于OpenGl的粒子系統(tǒng)的模擬實(shí)現(xiàn),首先介紹了圖形學(xué)的發(fā)展以及OpenGL概述,通過(guò)對(duì)OpenGL場(chǎng)景坐標(biāo)系和投影基礎(chǔ)知識(shí)的介紹,讓我們對(duì)圖形學(xué)和OpenGL有了一個(gè)宏觀全面的認(rèn)識(shí)和理解,在理解的基礎(chǔ)上,我們?cè)O(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于OpenGL的噴泉粒子系統(tǒng)模型,在設(shè)計(jì)過(guò)程中,詳細(xì)地給出了粒子系統(tǒng)的算法設(shè)計(jì)、粒子的初始化、粒子的運(yùn)動(dòng)軌跡、粒子的消亡以及粒子的生成,并分析了紋理映射技術(shù)在粒子系統(tǒng)中的最重要作用。
[1]Reeves,William T..Particle Systems--Technique for Modeling a Class of Fuzzy Objects[A].SIGGRAPH Proceeding[C],1983.
[2]Karl Sims.Particle Animation and Rendering Using Data Parallel Computation[J].Computer Graphics,24(4):405-413,1990.
[3]IanBuck.Data Parallel Computing on Graphics Hardware.Stanford University,2003.
[4]Lutz Latta.Building a Million Particle System[A].Game Developers Conference[C],2004.
2017-10-10)