一種2d水體模擬方法
【專利說明】
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)虛擬實現(xiàn)技術(shù)領(lǐng)域,特別是涉及一種2D水體模擬方法。
【【背景技術(shù)】】
[0002]2D游戲中當(dāng)需要表現(xiàn)流動的水體時,一般都使用幀動畫來表現(xiàn),幀動畫需要預(yù)先由美工繪制,然后將圖片一張張保存下來,最后在游戲中像播放影片一樣逐幀播放出來。這種方式有如下缺點:
[0003]1.表現(xiàn)力單一,只能循環(huán)地展現(xiàn)同一個動畫效果
[0004]2.無法通過交互改變水體的形態(tài)
【
【發(fā)明內(nèi)容】
】
[0005]本發(fā)明要解決的技術(shù)問題是如何提供一種表現(xiàn)力更強(qiáng),并能和用戶產(chǎn)生互動的水體模擬方法。
[0006]本發(fā)明采用如下技術(shù)方案:創(chuàng)建2D粒子,為所述2D粒子賦予屬性值,所述屬性值包括:形狀、大小、密度和摩擦因子,所述2D粒子為水體的組成元素,所述方法包括:復(fù)制所述2D粒子,并以復(fù)制出的2D粒子填充虛擬環(huán)境中的目標(biāo)容器;獲取用戶輸入,將所述用戶輸入轉(zhuǎn)化為2D粒子所處虛擬環(huán)境的施力方向;處理器根據(jù)所述施力方向、目標(biāo)容器和2D粒子的屬性計算每一幀圖片中2D粒子的位置;對每一幀中的2D粒子作高斯模糊處理,使得各個粒子能產(chǎn)生相互交融的效果。
[0007]優(yōu)選的,所述方法還包括:判斷像素的α值大小,當(dāng)α值大于閾值時,進(jìn)行統(tǒng)一的著色處理。
[0008]優(yōu)選的,所述方法還包括:獲取虛擬環(huán)境時間參數(shù),處理器根據(jù)所述虛擬環(huán)境時間參數(shù)確定2D粒子的加速或因子者減速因子。
[0009]優(yōu)選的,所述處理器根據(jù)所述施力方向、目標(biāo)容器和2D粒子的屬性計算每一幀圖片中2D粒子的位置的過程包括計算各2D粒子所受的合力,具體包括:根據(jù)2D粒子的形狀、大小和密度計算所述2D粒子所模擬的水的表面張力;處理器根據(jù)所述2D粒子的形狀、大小、密度、默認(rèn)重力加速度和摩擦因子計算摩擦力;處理器根據(jù)所述施力方向、表面張力和摩擦力計算2D粒子所受的合力。
[0010]優(yōu)選的,對于和目標(biāo)容器接觸的2D粒子,在計算所述合力時,還需要參考所述目標(biāo)容器的容器壁所產(chǎn)生的力。
[0011]優(yōu)選的,將2D粒子分為表面類粒子和內(nèi)部類粒子,具體包括:對于表面類粒子按照所述計算合力的方式完成,對于內(nèi)部類粒子則按照填充原則變化。
[0012]優(yōu)選的,所述填充原則具體為:在因為表面類粒子因為合力作為發(fā)生位置變化時,其空缺的地方由內(nèi)部類粒子按照合力方向填補(bǔ)。
[0013]優(yōu)選的,當(dāng)處理器計算2D粒子A其所受的施力大小、默認(rèn)重力大小和摩擦力大小之和大于其所受的表面張力,則該2D粒子A的顯示效果將是脫離2D粒子群。
[0014]優(yōu)選的,所述脫離2D粒子群的2D粒子A將只受默認(rèn)重力加速度影響,并能配合目標(biāo)容易的運(yùn)動重新落到所述2D粒子群中。
[0015]優(yōu)選的,所述方法可以是基于Box2D編程實現(xiàn)。
[0016]另一方面,本發(fā)明實施例還提供了一種2D水體模擬系統(tǒng),其中,用戶創(chuàng)建2D粒子,為所述2D粒子賦予屬性值,所述屬性值包括:形狀、大小、密度和摩擦因子,所述2D粒子為水體的組成元素,所述系統(tǒng)還包括:
[0017]感應(yīng)器,用于獲取用戶輸入,將所述用戶輸入傳遞給處理器;處理器,用于復(fù)制所述2D粒子,并以復(fù)制出的2D粒子填充虛擬環(huán)境中的目標(biāo)容器;將接收自感應(yīng)器的用戶輸入轉(zhuǎn)化為2D粒子所處虛擬環(huán)境的施力方向;根據(jù)所述施力方向、目標(biāo)容器和2D粒子的屬性計算每一幀圖片中2D粒子的位置;對每一幀中的2D粒子作高斯模糊處理,使得各個粒子能產(chǎn)生相互交融的效果;顯示器,用于顯示處理器傳遞過來的,完成效果處理后的2D粒子。
[0018]優(yōu)選的,所述系統(tǒng)還包括計時器,具體的:所述處理器獲取虛擬環(huán)境時間參數(shù),處理器根據(jù)所述虛擬環(huán)境時間參數(shù)確定2D粒子的加速因子或者減速因子;
[0019]所述處理器根據(jù)所述加速因子或者減速因子,結(jié)合計時器確定各2D粒子的移動速度。
[0020]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:本發(fā)明實施例將2D環(huán)境下水體的構(gòu)成劃分成具有特定屬性的2D粒子,并基于2D粒子自身的物理特性模擬水體的流動,提高了水體的表現(xiàn)力。并且,能夠結(jié)合用戶的輸入,基于互動形式更生動的模擬水流體的運(yùn)動過程。
【【附圖說明】】
[0021]圖1是本發(fā)明實施例提供的一種2D水體模擬方法的流程示意圖;
[0022]圖2是本發(fā)明實施例提供的一種2D水體模擬方法中求合力的流程圖;
[0023]圖3是本發(fā)明實施例提供的一種2D水體模擬方法的流程示意圖;
[0024]圖4是本發(fā)明實施例提供的一種2D水體模擬效果圖;
[0025]圖5是本發(fā)明實施例提供的一種2D水體模擬效果圖;
[0026]圖6是本發(fā)明實施例提供的一種2D水體模擬系統(tǒng)結(jié)構(gòu)示意圖。
【【具體實施方式】】
[0027]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0028]此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0029]實施例1:
[0030]本發(fā)明實施例1提供了一種2D水體模擬方法,包括:創(chuàng)建2D粒子,為所述2D粒子賦予屬性值,所述屬性值包括:形狀、大小、密度和摩擦因子,所述2D粒子為水體的組成元素,具體的:
[0031 ] 在步驟201中,復(fù)制所述2D粒子,并以復(fù)制出的2D粒子填充虛擬環(huán)境中的目標(biāo)容器。
[0032]在步驟202中,獲取用戶輸入,將所述用戶輸入轉(zhuǎn)化為2D粒子所處虛擬環(huán)境的施力方向。
[0033]所述用戶輸入可以是用戶通過鍵盤操作或者觸摸屏觸發(fā)的信號,也可以是用戶通過陀螺儀實現(xiàn)的,還可以是基于體感游戲手柄實現(xiàn)等等。
[0034]在步驟203中,處理器根據(jù)所述施力方向、目標(biāo)容器和2D粒子的屬性計算每一幀圖片中2D粒子的位置。
[0035]其中,目標(biāo)容器并不局限于通常理解上的杯子,例如虛擬環(huán)境中的河道、水庫等等也可以屬于本發(fā)明所述的目標(biāo)容器的范疇。
[0036]在步驟204中,對每一幀中的2D粒子作高斯模糊處理,使得各個粒子能產(chǎn)生相互交融的效果。
[0037]所述相互交融的效果,是讓用戶看起來更像是水體,而并非一個一個的2D粒子。
[0038]本發(fā)明實施例將2D環(huán)境下水體的構(gòu)成劃分成具有特定屬性的2D粒子,并基于2D粒子自身的物理特性模擬水體的流動,提高了水體的表現(xiàn)力。并且,能夠結(jié)合用戶輸入的力,基于互動形式更生動的模擬水流體的運(yùn)動過程。本實施例可以應(yīng)用于游戲領(lǐng)域,也可以應(yīng)用于廣告領(lǐng)域,還可以應(yīng)用于虛擬環(huán)境領(lǐng)域等等。
[0039]在本實施例中,通過步驟204已經(jīng)將2D粒子做了高斯模糊處理,然而為了能夠讓用戶看到水體的效果,就需要進(jìn)一步完成著色工作。因此,本實施例所提出的方法,優(yōu)選的還包括:
[0040]判斷像素的α值大小,當(dāng)α值大于閾值時,進(jìn)行統(tǒng)一的著色處理。
[0041]本發(fā)明實施例中給出了如何來實現(xiàn)2D粒子的劃分,以及如何根據(jù)其屬性計算出其模擬位置,但是,實際呈現(xiàn)效果中還涉及水體的流動速度,因此,所述方法還包括:
[0042]獲取虛擬環(huán)境時間參數(shù),處理器根據(jù)所述虛擬環(huán)境時間參數(shù)確定2D粒子的加速因子或者減速因子。具體的,所述時間參數(shù)值可以直接是對應(yīng)的加速因子或者減速因子,也可以是根據(jù)一分鐘對應(yīng)顯示的虛擬時間值,而由處理器自身來轉(zhuǎn)化為加速因子或者減速因子。
[0043]結(jié)合本實施例,其步驟203中實現(xiàn)的內(nèi)容包括計算各2D粒子所受的合力,在優(yōu)選的實現(xiàn)方案中,具體包括如下步驟:
[0044]在步驟301中,根據(jù)2D粒子的形狀、大小和密度計算所述2D粒子所模擬的水的表面張力。
[0045]在步驟302中,處理器根據(jù)所述2D粒子的形狀、大小、密度、默認(rèn)重力加速度和摩擦因子計算摩擦力。
[0046]在步驟303中,處理器根據(jù)所述施力方向、表面張力和摩擦力計算2D粒子所受的合力。
[0047]所述合力配合上2D粒子的質(zhì)量,就能實現(xiàn)依據(jù)不同的用戶輸入(例如:用戶使勁甩目標(biāo)容器或者輕輕搖晃目標(biāo)容器)產(chǎn)生不同移動速度的效果。
[0048]在步驟301-303中,給出了如何計算特定2D粒子所受合力的方法,然而,在具體的實現(xiàn)過程中,部分2D粒子所受合力還會受到目標(biāo)容器的容器壁的影響,因此,上述步驟303在上述情況下對于和目標(biāo)容器接觸的2D粒子,在計算所述合力時,還需要參考所述目標(biāo)容器的容器壁所產(chǎn)生的力。
[0049]結(jié)合本實施例,存在一種優(yōu)選的方案,即將2D粒子分為表面類粒子和內(nèi)部類粒子,具體包括:
[0050]對于表面類粒子按照所述計算合力的方式完成,對于內(nèi)部類粒子則按照填充原則變化。這樣可有效的提高水體模擬時候的計算量。
[0051]上述填充原則具體為:在因為表面類粒子因為合力作為發(fā)生位置變化時,其空缺的地方由內(nèi)部類粒子按照合力方向填補(bǔ)。
[0052]為了更好的模擬出水體在目標(biāo)容器中的流動狀態(tài),尤其是在用戶輸入的施力大小較大時,此時,在現(xiàn)實中就可能產(chǎn)生飛濺的效果。因此,本實施例的擴(kuò)展方案中還給出了上述飛濺效果的具體實現(xiàn)方法,具體的:
[0053]當(dāng)處理器計算2D粒子A其所受的施力大小、默認(rèn)重力大小和摩擦力大小之和大于其所受的表面張力,則該2D粒子A的顯示效果將是脫離2D粒子群。
[0054]進(jìn)一步的,所述脫離2D