一種碰撞判定方法
【技術領域】
[0001]本申請涉及計算機虛擬現實技術領域,尤其涉及一種碰撞判定方法。
【背景技術】
[0002]目前,絕大部分游戲為了達到提高對用戶的游戲代入感程度的目的,通過采用各種不同的技術手段提高游戲模擬現實的程度,給用戶帶來更加逼真的游戲體驗。尤其對于動作、格斗類游戲來說,提升游戲代入感的最重要途徑就是可以在角色戰斗過程中盡量提高一方對另一方攻擊或防御動作的判定精確度,獲得更加準確的判定結果。這樣不僅可以帶給用戶更多更為真實的游戲體驗,激發玩家的興趣,并且愈加成為各種不同類型的游戲在技能系統中不可分割的重要組成部分。
[0003]現有技術中傳統的碰撞檢測方法為:游戲系統對于每個角色對象都維護一個自身在游戲場景中的邏輯點位置,其他角色對象在技能中產生判定的時候,只能對判定限定一個大致的范圍,在這個范圍中的角色對象就會被判定成功,產生被擊中的效果。如果不在該區域中,則判定失敗。該方案的主要缺點是只能依據邏輯點的位置進行判定檢查,只能對角色在或者不在某個區域中進行判定,判定內容不夠靈活細致,無法根據角色當前的具體動作進行身體上具體部位的碰撞檢測。
[0004]為了對角色身體具體部位進行碰撞檢測,現有技術中還提出了如下碰撞檢測方法:游戲中的每個角色對象在邏輯層面會被劃分為若干的身體部位,然后在游戲過程中使用程序算法在每一幀實時生成出劃分好的身體的各個部位的軸對齊包圍盒(AABB,AxisAligned Bounding Box)或者有向包圍盒(OBB,Oriented Bounding Box),然后將角色自身的包圍盒與其他角色的包圍盒進行碰撞檢測。該方案雖然傳統方式的基礎上做出了一些改進,但是依然存在如下缺點:
[0005]由于角色對象的動畫每幀都會發生變化,需要每一幀都對身體各個部位的包圍盒進行重新計算生成,效率不高,加重了對CPU的負載和消耗;
[0006]因為AABB包圍盒與OBB包圍盒都是六面體包圍盒,這就導致了用包圍盒描述的身體部位與原本的身體部位差距過大,從而導致最終判定結果的不精確。如果采用AABB,AABB的軸向是鎖定的,即AABB的長寬高必須和場景的XYZ軸的朝向一致,假想場景中有一個人,如果對大刀旋轉45度,那么如果想用AABB包圍盒的完全包圍住該角色,必須會有很大的空間是浪費掉的,不會相對比較準確地包裹住身體。如果采用0BB,可以一定程度上避免判定不精確的問題,但是OBB仍然存在每幀需要根據角色的姿態和動畫動態生成,開銷比較大的問題。
【發明內容】
[0007]本申請提供了一種碰撞判定方法,可以比較準確地描述身體具體部位的碰撞,并且碰撞計算開銷較小。
[0008]本申請實施例提供的一種碰撞判定方法,包括:
[0009]A、確定角色身體上需要進行碰撞判定的部位;
[0010]B、對于所述每一個部位分別設置至少一個球形包圍盒,將所述球形包圍盒綁定在角色骨骼上;
[0011]C、所述球形包圍盒的位置隨著骨骼的運動而運動,在運動過程中判斷所述球形包圍盒是否與其他對象發生碰撞。
[0012]較佳地,所述其他對象包括其他角色的骨骼上綁定的球形包圍盒。
[0013]較佳地,所述球形包圍盒的參數包括半徑、中心點位置和中心點相對于該球形包圍盒所綁定的骨骼的偏移值。
[0014]較佳地,步驟B進一步包括:設置球形包圍盒的屬性,根據球形包圍盒屬性將包圍盒分為兩種:攻擊包圍盒與受擊包圍盒;
[0015]步驟C所述在運動過程中判斷所述球形包圍盒是否與其他對象發生碰撞包括:若所述球形包圍盒為攻擊包圍盒,進行攻擊檢測;所述攻擊檢測的含義為判斷該攻擊包圍盒是否與目標對象的受擊包圍盒發生碰撞;
[0016]若所述球形包圍盒為受擊包圍盒,進行受擊檢測;所述受擊檢測的含義為判斷該受擊包圍盒是否與目標對象的攻擊包圍盒發生碰撞。
[0017]較佳地,步驟C所述在運動過程中判斷所述球形包圍盒是否與其他對象發生碰撞進一步包括:當角色做出攻擊動作時,激活與該攻擊動作對應的身體部位對應的攻擊包圍盒,激活后的攻擊包圍盒進行攻擊檢測;攻擊動作結束后去激活與該攻擊動作對應的身體部位對應的攻擊包圍盒;
[0018]未激活的攻擊包圍盒進行受擊檢測。
[0019]較佳地,所述激活與該攻擊動作對應的身體部位對應的攻擊包圍盒的步驟進一步包括:增加所述攻擊包圍盒的半徑。
[0020]從以上技術方案可以看出,根據三維圖形仿真中建立三維模型的原理,將碰撞球綁定在骨骼上,跟隨骨骼的運動而運動,并且對包圍盒提供了較為靈活的控制方式,從而可以實現更為精準的碰撞判斷。相對于現有技術,采用球形碰撞體相較于六面體碰撞體大大提高了碰撞檢測的準確度,而且避免了每幀都需要對碰撞體的生成運算,在運行效率方面也有顯著改善。
【附圖說明】
[0021]圖1為三維圖形仿真中角色建模示意圖;
[0022]圖2為本申請實施例中球形包圍盒設置示意圖;
[0023]圖3為本申請實施例中攻擊包圍盒在攻擊時激活的示意圖。
[0024]圖4為本申請實施例提供的碰撞判定方法流程圖。
【具體實施方式】
[0025]為使本申請技術方案的技術原理、特點以及技術效果更加清楚,以下結合具體實施例對本申請技術方案進行詳細闡述。
[0026]在三維圖形仿真中,角色建模分為兩個部分,首先是創建角色的骨骼,然后是在該骨骼的基礎上進行蒙皮操作。如圖1所示,多個三角形構成角色骨骼,模型是在該骨骼基礎上的蒙皮。在角色建模完成后,由3D圖形引擎驅動骨骼位置變化,然后帶動蒙皮模型發生變化,最終形成角色做出各種動作的效果。
[0027]根據三維圖形仿真中角色建模的原理,本申請提出了如下碰撞檢測方案:
[0028]采用多個球形包圍盒來描述身體部位。這樣做的好處是可以更準確地將身體部位包圍起來,極大減小采用六面體包圍盒產生的包圍身體不準確的問題。
[0029]球形包圍盒的設置方法與參數:首先選定一塊骨骼,然后將該包圍盒中心附在該骨骼上,根據骨骼的運動而運動。參數主要包括中心點位置和球體半徑。可選地,參數可以進一步包括中心點相對于該球形包圍盒所綁定的骨骼的偏移值。設置偏移值的目的是在認為放在骨骼點上不夠精確的時候