999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于粒子系統的三維降雪場景仿真

2017-02-22 07:06:53汪繼文
計算機技術與發展 2017年1期

周 強,汪繼文

(安徽大學 計算機科學與技術學院,安徽 合肥 230039)

基于粒子系統的三維降雪場景仿真

周 強,汪繼文

(安徽大學 計算機科學與技術學院,安徽 合肥 230039)

通過研究粒子系統方法,結合面向對象的C++語言,建立粒子系統的過程模型,分析實際降雪物理運動過程,建立雪粒子系統三維模型,簡化雪花下降過程中的運動模型,省去對速度的實時每幀控制。通過控制雪粒子位移來模擬受風力影響的實際宏觀降雪雪景,同時通過參數控制實現風力強弱的影響效果和大雪小雪的景觀控制,并在笛卡爾三維坐標系的z軸上引入指數函數F=ex作為控制因子,使雪粒子滿足近大遠小的透視投影視點效果,具有三維景觀效果,并結合OpenGL圖形接口對降雪場景進行渲染。實驗結果表明,該方法具有逼真的三維仿真效果且代碼具有良好的可擴展性。

粒子系統;雪景模擬;OpenGL;紋理映射

1 概 述

隨著現代社會的發展,人們對虛擬現實的需求越來越大,在計算機游戲、動畫以及影視廣告中都有著廣泛的應用需求。而自然景物諸如海浪、云、煙、火焰、雨、雪的虛擬模擬,因其運動的不規則性和動態性,成為計算機圖形模擬中的難點問題。

粒子系統(particle system)作為模擬不規則物體最成功的算法之一,被研究應用至今。自Reeves W T[1-2]于1983年首次提出粒子系統,并成功模擬了火焰、爆炸等效果以來,國內外專家已經用粒子系統方法的思想成功模擬出了許多自然景物,并不斷對模擬進行改進,以追求更高的真實性和實時性。Coutinho等[3]在他們的研究中用粒子系統方法生成雨滴。Latta L等[4]采用GPU進行粒子系統模擬,能實時處理超過100萬個粒子,使得大規模粒子模擬變成了可能,也使越來越多的人開始關注并研究基于GPU的粒子系統動畫模擬。國內的袁霞和張玉啄[5]對粒子系統的方法及應用作了較為詳盡、系統的闡述。金小進等[6]利用粒子系統模擬了火焰,并在渲染過程中分別從實時性和真實感兩方面對粒子系統進行了優化。汪繼文等[7]利用粒子系統進行了煙花仿真,并實現了對煙花形狀的控制。潘秋羽等[8]提出了基于粒子系統的快速的云三維仿真算法,能快速地產生形狀各異的真實感較強的三維云。何亮等[9]基于粒子系統模擬了動態雪景,但是所建物理模型較簡單并沒有考慮環境因素。徐利明等[10]提出了一種在大型場景漫游系統中實時模擬雨、雪的方法。單在雪粒子的模擬中,對粒子系統的方法就有不同的研究方向。劉金瑄等[11]基于粒子系統和XNA平臺工作原理,利用C#語言在XNA平臺下對飄雪進行了仿真。許金生和宋萬忠[12]基于OpenGL的OSG圖形庫對雪景進行模擬,真實地分析了雪粒子的受力情況。劉小玲等[13]則利用GPU的高速運算性能模擬了大規模的雨雪場景。除此之外,也有學者基于Vega(MultiGen-Paradigm公司工業軟件)對雪粒子系統進行模擬,楊述華等[14]基于粒子系統和Vega對雨雪進行了模擬。

綜上,基于粒子系統的模擬要建立合適的物理模型且盡可能滿足模擬的真實性,同時也需要對粒子更新的過程盡可能優化使得程序滿足實時性要求。文中在分析研究粒子系統的方法的基礎上,利用VS開發工具在Windows平臺下進行降雪雪景模擬,建立出粒子系統和雪花系統模型,對雪花的運動進行簡化,優化模擬過程,模擬出受風力影響的實際降雪雪景,并能實現對風力大小和大小雪的景觀控制,引入初等函數F=ex作為控制因子控制粒子大小使得雪粒子具有近大遠小的透視投影的三維效果,最后利用OpenGL渲染[15]模擬出降雪雪景。

2 粒子系統的基本原理

ReevesWT于1983年首次提出粒子系統,并成功模擬了火焰、爆炸等效果。其基本思想是用許多基本形狀的微小圖元粒子來描述不規則的模糊物體,這些微小粒子具有形狀、大小、顏色、位置、速度矢量、生命周期等屬性,對這些屬性進行初始化并施加控制函數進行動態改變,體現出被模擬物體的運動的動態性。同時,為了體現出不規則模糊物體運動的隨機性,對相關的粒子屬性設置隨機控制。所有的粒子都經過產生—活動—消亡這樣的過程。鑒于粒子系統這樣的特性,它能很好地模擬海浪、云、煙、火焰、雨、雪等這樣隨機運動的模糊自然景物。

粒子系統實現的基本步驟大致如下:

(1)產生新粒子;

(2)對新粒子屬性進行初始化;

(3)更新粒子屬性;

(4)刪除已經超過其生命周期的粒子;

(5)渲染繪制粒子。

根據粒子系統的算法思想,可以模擬降雪的雪景。每一片雪花作為單個粒子,賦予其相關屬性,定義好其數據結構,并根據粒子系統原理的實現步驟架構出粒子系統的過程函數。

利用C++語言編寫過程函數,結合OpenGL圖形接口對雪花進行渲染。

3 雪粒子系統模型

基于粒子系統算法的基本理論及其過程性,用C++語言可以編寫出粒子系統的類,并編寫出粒子系統類的過程方法,如InitializeSystem()初始化函數、Update()粒子運動更新函數、Render()粒子渲染函數、Emit()粒子發射函數,再添加一些粒子數、時間等這樣的成員變量。用面向對象的思想去處理的好處有很多,在具體模擬不同物體的時候,只要繼承粒子系統抽象類,根據模擬物體的具體情況去覆蓋父類的虛函數即可,具有良好的擴展性。粒子一般都具有形狀、大小、顏色、位置、速度矢量、生命周期這樣的屬性,用這樣一些基本類型的數據去描述定義粒子的數據結構,根據所要模擬的物體不同,需要不同的屬性描述。

3.1 雪粒子屬性

首先分析雪粒子的運動過程,確定雪粒子的屬性。雪花在下落過程中,受重力、空氣浮力以及風力的影響,從視覺上呈現出左右飄動徐徐下落的狀態。雪花在下落過程中,受外力影響,加速度和速度都發生了變化,導致位移也發生變化。在進行三維模擬時,將三維坐標投影到二維表面(電腦屏幕),在二維平面建立三維笛卡爾坐標系,二維平面具有x,y,z三分量。在x軸上雪花受到風力影響位置左右飄動,在y軸上雪花受到重力和空氣浮力影響做下降運動,在z軸上雪花有深淺之分,表示離視點的遠近,在這種透視投影中,遠處的物體看上去比近處的物體更小一些,所以在z軸上的粒子深淺程度影響雪粒子的大小屬性。當飄落到地面后,雪粒子融化消失,粒子死亡被刪除。

綜上,雪粒子的大體結構為:

structparticle_t

{

vector3_tp_pos; //粒子當前位置

vector3_tp_prevPos;//粒子的上一幀位置

vector3_tp_velocity;//粒子的速度矢量

vector3_tp_acceleration;//粒子的加速度

floatp_life;//粒子的生命周期

floatp_size;//粒子大小

floatp_sizeDelta;//隨時間的粒子大小改變量

};

其中定義三維矢量的數據類型vector3_t,包含x,y,z三坐標軸分量參數。

3.2 雪粒子系統模型初始化

雪粒子系統模型構建好后,就可以編寫雪景系統類了。雪景類繼承粒子系統抽象父類,并對粒子系統類的虛函數如Update()和Render()進行覆蓋,根據具體降雪過程來實現粒子系統各個過程函數。

雪花從空中飄向地面,粒子源定義在整個輸出窗口上部,其y值高度是固定的,為窗口高度m_height,在x軸和表示離視點遠近的z軸上初始粒子位置則是隨機的,用隨機函數控制。第i個粒子的初始位置公式描述如下:

ParticleList[i].pos.y=m_height

ParticleList[i].pos.x=m_origin.x+FRAND*m_width

ParticleList[i].pos.z=m_origin.z+FRAND*m_depth

其中,FRAND定義為(((float)rand()-(float)rand())/RAND_MAX),是一個(-1,1)之間的隨機數。m_origin.x和m_origin.y是坐標軸原點分量,m_width表示窗口寬度,m_depth則是z軸上的深淺值。

初始粒子的大小是固定的,可以設為固定值。同時對雪粒子的初始運動速度狀態進行設置。在這里,為了簡化之后的雪粒子更新步驟,提高系統的實時性,對每個雪粒子的初始加速度添加一個隨機控制函數,使得每個粒子的初始速度狀態不一致,而這個速度狀態在之后的每一幀更新中不再改變。雖然是勻速狀態,但是通過大量速度狀態不一致的雪粒子,同樣可以營造出雪花左右飄動徐徐下落的視覺效果。這樣,在傳統的雪粒子模擬中,需要在每一幀中更新的速度和位移信息,只需要更新位移屬性即可,而且這樣的簡化并不影響模擬的真實性,并且提高了系統的實時性,提升了程序效率。在x軸上的初始加速度表示雪粒子受風力影響速度的改變,通過隨機函數控制,不同的雪粒子在該軸上的加速度不同,通過粒子相互間速度的不同表明所受風力場的變化,同理,在y軸上加速度的不同表明所受重力和浮力的變化,z軸上加速度的不同表明不同雪花飄離視點的遠近。雖然在每一幀更新中速度將不再變化,但是通過整體大量的粒子與粒子之間的速度差異模擬表現出所受外力場的隨機變化。第i個粒子的初始速度描述公式如下:

ParticleList[i].m_velocity.x=SNOW_VELOCITY.x+FRAND*V_VARIATION.x

ParticleList[i].m_velocity.y=SNOW_VELOCITY.y+FRAND*V_VARIATION.y

ParticleList[i].m_velocity.z=SNOW_VELOCITY.z+FRAND*V_VARIATION.z

其中,SNOW_VELOCITY是雪粒子的初速度,是一個定義好的三維常矢量,初始速度簡化為自由落體,即z軸和x軸初始速度為0,只有豎直下落的y軸初速度。V_VARIATION也是定義好的初始加速度三維常矢量。在x軸上加速度受風力影響隨機改變,通過對它參數絕對值的大小進行設置可以表示風力強弱,通過對正負的方向設置可以表示所受風力方向。通過對z軸上的加速度隨機變化表示隨時間的推移離視點的遠近,從而影響粒子的大小,達到近大遠小的透視投影三維效果。

粒子的初始屬性設置完畢,雪粒子從窗口上部產生。由Emit()粒子發射函數產生,只要粒子數小于程序定義的最大粒子數,就不斷循環粒子初始化函數產生粒子。這里對最大粒子數也進行可控設置,從而根據需要可以模擬大雪還是小雪的降雪場景。

3.3 雪粒子運動更新

粒子初始化后,就是粒子的運動更新了。對每個雪粒子個體來說其下降過程中速度將不再改變,但每個雪粒子速度狀態不盡相同,通過雪粒子個體間的隨機狀態差異模擬出實際降雪的隨機運動狀態效果。通過對運動模型的簡化,從而在Update()中省去了對速度的實時每幀控制,提高了系統的實時性,提升了程序效率,優化了模擬。位置的每幀數學模型公式為:

S=S0+∫vdt

第i個粒子的位置描述公式如下:

ParticleList[i].pos=ParticleList[i].pos+ParticleList[i].velocity*Time

在z軸上引入指數函數F=ex作為控制因子,F=ex在(-∞,+∞)上單調遞增且在原點的函數值為1,其值域恒大于0。指數函數的數學模型特征可用來粗略控制隨時間推移雪粒子離視點的近大遠小變化,從而模擬出降雪的三維效果。第i個雪粒子的大小描述公式為:

f=Particle[i].pos.z

Particle[i].size=ef*Particle[i].size

當z值改變到超過一個定值范圍時,即表明該粒子離視點過遠或者過近,將不在顯示它。而當y軸的值下降到一個定值(即程序中設定的地面y值)時,表明雪花降落到地面,刪除釋放雪粒子,并產生新雪粒子發射。

這樣雪粒子系統對粒子系統函數Update()進行了覆蓋。

3.4 雪粒子的渲染

如果要使所模擬的物體更加逼真,一般采用紋理貼圖的方式。OpenGL的紋理映射(Texture Mapping)功能支持將一些像素數據經過變換(不規則變化也支持)將其附著到多邊形表面,使得模擬更加逼真。比如將真實的地板圖像紋理映射到矩形上,就可以逼真地模擬出地面效果,而且在變換多邊形時,多邊形上的紋理圖案也隨之變化,也匹配透視投影的近大遠小效果。OpenGL作為目前主流的圖形API之一,與C語言結合緊密,并且有強大的可移植性和渲染效果,提供了強大的庫函數進行調用,支持一維紋理、二維紋理和三維紋理。文中啟用二維紋理將雪花紋理映射到雪粒子上對雪粒子進行渲染。

紋理映射的基本操作步驟如下:

(1)圖像準備:既可以在程序中生成圖像,也可以讀取圖像文件。

(2)生成紋理號:適用于多個紋理反復切換時,一個紋理時不需要。

(3)設置當前紋理:切換紋理,也稱為紋理綁定。

(4)定義紋理:指定當前紋理的圖像。

(5)設置紋理參數:指定紋理的重疊方式和插值方式。

(6)設置紋理環境參數:決定怎樣使用紋理顏色,例如是否與光照色合成。

(7)啟動紋理功能,繪制場景,給出頂點的紋理坐標和幾何坐標(紋理坐標可以直接參數指定,也可啟用自動計算紋理坐標功能)。

(8)退出前刪除紋理。

文中采用32×32的bmp格式雪粒子紋理圖片,如圖1所示。

圖1 雪粒子紋理

通過調用Bitmap類中LoadBitmapFileWithAlpha()函數讀取圖像,并將其初始化渲染到雪粒子上。

4 實驗結果

實驗硬件環境為主頻為3.20 GHz的i5CPU,內存4 GB,顯卡為ATI Radeon HD 5450的PC機,選擇VS開發工具在Windows平臺下,利用OpenGL圖形庫進行模擬。參數如表1所示。

表1 參數設置

通過表1的參數設置進行模擬,分別得到圖2、圖3兩種視覺模擬效果。圖2為受東風影響的大雪降雪雪景,圖3為無風的小雪降雪雪景,均滿足視覺效果,可按照參數設置自行選擇所需模擬的降雪場景。

5 結束語

根據粒子系統的算法思想,結合面向對象的C++語言,建立出粒子系統的過程模型,分析了降雪過程,建立了雪粒子系統的三維模型,在簡化雪花下降過程中的運動模型的情況下,通過控制雪粒子位移來模擬實際降雪雪景,簡化了粒子更新控制步驟,并在z軸上引入控制因子控制雪粒子大小滿足近大遠小的透視投影效果,結合OpenGL圖形接口成功渲染出了3D降雪場景。同時,對大小雪以及風力強弱實行了參數可控,可以根據需要模擬不同的降雪場景,實驗結果也表明其具有逼真的三維仿真效果。

圖2 大雪有風實驗效果圖

圖3 小雪無風實驗效果圖

文中代碼具有良好的可擴展性,在此基礎上,可以將其應用于各種其他不規則物體(如煙花、雨水等)的模擬。模擬場景也可更加豐富多元化,同時考慮更加復雜的天氣情況。

[1]ReevesWT.Particlesystems-atechniqueformodelingaclassoffuzzyobjects[J].ACMSIGGRAPHComputerGraphics,1983,17(3):359-375.

[2]ReevesWT,BlauR.Approximateandprobabilisticalgorithmsforshadingandrenderingstructuredparticlesystems[J].ACMSIGGRAPHComputerGraphics,1985,19(3):313-322.

[3]CoutinhoBB,OliveiraAAF,AtencioYP,etal.RainsceneanimationthroughparticlesystemsandsurfaceflowsimulationbySPH[C]//SIBGRAPIconferenceongraphics,patternsandimages.[s.l.]:IEEEComputerSociety,2010:255-262.

[4]KolbA,LattaL,Rezk-SalamaC.Hardware-basedsimulation

andcollisiondetectionforlargeparticlesystems[C]//ProceedingsoftheACMSIGGRAPH/EUROGRAPHICSconferenceongraphicshardware.[s.l.]:ACM,2004:123-131.

[5] 袁 霞,張玉啄.粒子系統方法及其應用[J].云南師范大學學報:自然科學版,2003,23(3):14-16.

[6] 金小進,馬堯海.基于粒子系統的火焰模擬與優化[J].計算機工程與設計,2010,31(5):1118-1120.

[7] 汪繼文,胡文平,金余峰.基于粒子系統的8字動態煙花仿真[J].計算機仿真,2010,27(10):211-214.

[8] 潘秋羽,畢碩本,陸良虎,等.基于粒子系統三維動態云的快速仿真算法[J].系統仿真學報,2014,26(1):85-89.

[9] 何 亮,巴力登.基于粒子系統的動態雪景模擬[J].西北大學學報:自然科學版,2010,40(4):603-606.

[10] 徐利明,姜昱明.基于粒子系統與OpenGL的實時雨雪模擬[J].計算機仿真,2005,22(7):242-245.

[11] 劉金瑄,吳頻頻.XNA環境下粒子系統的飄雪仿真[J].西安科技大學學報,2013,33(4):436-443.

[12] 許金生,宋萬忠.基于OSG粒子系統的雪景模擬[J].計算機工程與設計,2012,33(4):1509-1513.

[13] 劉小玲,楊紅雨,郭虎奇.基于GPU粒子系統的大規模雨雪場景實時模擬[J].計算機工程與設計,2012,33(6):2398-2401.

[14] 楊述華,廖守億,王仕成,等.基于粒子系統和Vega的實時雨雪模擬[J].計算機應用,2008,28:238-240.

[15]WrightRS,HaemelN,SellersG,etal.OpenGL超級寶典[M].第5版.北京:人民郵電出版社,2012:208-229.

Three-dimensional Simulation of Snowing Based on Particle System

ZHOU Qiang,WANG Ji-wen

(College of Computer Science and Technology,Anhui University,Hefei 230039,China)

A falling snow algorithmic structure is proposed based on particle system,incorporating the object-oriented C++ language.A 3D model of particle system is built by analyzing the falling process of snow,simplified the motion model of the snowflakes falling process and saved each frame of real-time control for speed.The realistic snowing is simulated which affected by wind through controlling the particles displacement.And on thezaxisofthree-dimensionalCartesiancoordinatesystem,theindexfunctionF=exisintroducedasthecontrollingfactorsothatthesimulationmatchestheperspectiveeffectofperspectiveprojection.ThesimulationiscombinedwithOpenGLgraphicinterface.Theexperimentalresultsshowthatthismethodhasarealistic3Dsimulationeffectandthecodesenableagoodscalability.

particle system;snowscape simulation;OpenGL;texture mapping

2016-03-07

2016-06-15

時間:2017-01-04

安徽省省級重點自然科學研究項目(KJ2013A009)

周 強(1991-),男,碩士研究生,研究方向為計算機仿真、圖形圖像處理;汪繼文,博士,教授,博士研究生導師,研究方向為計算流體力學、計算機仿真、圖像處理、智能算法等。

http://www.cnki.net/kcms/detail/61.1450.TP.20170104.1028.046.html

TP

A

1673-629X(2017)01-0130-04

10.3969/j.issn.1673-629X.2017.01.029

主站蜘蛛池模板: 国产日产欧美精品| 午夜高清国产拍精品| 欧美日韩国产高清一区二区三区| 亚洲精品在线观看91| 依依成人精品无v国产| 思思热在线视频精品| 538精品在线观看| 一级全黄毛片| 91毛片网| 色悠久久综合| 欧美综合一区二区三区| 国产成人AV男人的天堂| 毛片视频网址| 国产玖玖视频| 久久亚洲国产一区二区| 九九精品在线观看| 亚洲无码高清免费视频亚洲| av一区二区三区高清久久| 欧美劲爆第一页| 国产精品一区在线观看你懂的| 国产偷倩视频| 一级毛片免费不卡在线| 亚洲伦理一区二区| 亚洲男人的天堂视频| 在线亚洲精品福利网址导航| a天堂视频| 亚洲Av激情网五月天| 国产精女同一区二区三区久| 国产伦片中文免费观看| 亚洲综合专区| 国产无码制服丝袜| 亚洲AV电影不卡在线观看| 国产精品夜夜嗨视频免费视频| 国产裸舞福利在线视频合集| 亚洲精品视频免费看| 最新亚洲av女人的天堂| 国内精自视频品线一二区| 国产va在线观看免费| 亚洲视频欧美不卡| 欧美成人手机在线视频| 日韩欧美国产三级| 无码免费试看| 在线观看欧美国产| 色一情一乱一伦一区二区三区小说| 久操线在视频在线观看| 有专无码视频| 看国产毛片| 欧美一级高清片欧美国产欧美| 国产精品毛片一区视频播| 久久永久精品免费视频| 国产成人a毛片在线| 日本高清有码人妻| 色综合国产| 99在线视频免费| 在线国产欧美| 亚洲无码高清一区二区| 国产精品粉嫩| 亚洲中文字幕国产av| 国产精品视屏| av免费在线观看美女叉开腿| 色色中文字幕| 免费人成网站在线观看欧美| 国产欧美日韩资源在线观看| 又黄又爽视频好爽视频| 久久窝窝国产精品午夜看片| 香港一级毛片免费看| 国产精品尤物铁牛tv| 久久午夜夜伦鲁鲁片不卡| 精品少妇人妻av无码久久| 中文字幕在线永久在线视频2020| 1024你懂的国产精品| 中文字幕乱码二三区免费| 精品欧美日韩国产日漫一区不卡| 91视频区| 高清久久精品亚洲日韩Av| 免费不卡视频| 国产毛片高清一级国语| 日韩成人在线网站| 午夜丁香婷婷| 免费女人18毛片a级毛片视频| 亚洲另类色| 欧美第二区|