專利名稱:碰撞檢測的方法和裝置的制作方法
技術(shù)領域:
本發(fā)明涉及網(wǎng)絡游戲領域,特別涉及一種碰撞檢測的方法和裝置。
背景技術(shù):
在游戲中物體的碰撞是經(jīng)常發(fā)生的,怎樣檢測物體的碰撞是一個很關鍵的技術(shù)問題。尤 其是在飛行射擊游戲中,如果不能很好地解決這一問題,會極大地影響玩游戲者的興趣。碰 揸檢測可以探測游戲中各物體的物理邊緣,檢測出游戲中的各物體是否發(fā)生碰撞。當兩個3D 物體撞在一起的時候,這種碰撞檢測技術(shù)可以防止它們相互穿過。例如,當游戲中的人物撞 在墻上的時候,碰撞檢測技術(shù)會根據(jù)人物和墻之間的特性確定兩者的位置和相互的作用關系, 從而保證該人物既不會穿墻而過,也不會把墻撞倒。
目前成功商業(yè)3D游戲普遍采用的碰撞檢測是BSP (Binary Space Partitioning, 二叉空間 分割)樹方式及包裝盒方式。BSP樹是用來控制檢測順序和方向的數(shù)據(jù)描述,通過找出兩個 物體間的分隔面的方法來判斷兩個物體是否相交,如果分隔面存在,則沒有發(fā)生碰撞。包裝 盒方式就是采用一個描述用的正方體或者球型體包裹住3D物體對象整體,或者是主要部分, 然后根據(jù)描述用包裝盒的距離、位置等信息來計算是否發(fā)生碰撞。該正方體和球型體也可以 由其他形狀來代替。
現(xiàn)有的碰撞檢測技術(shù)是在3D環(huán)境中通過計算實現(xiàn)的,這種計算通常都比較復雜,計算 所需的時間也比較長,因此,碰撞檢測的效率較低。
發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)存在的問題,本發(fā)明實施例提供了一種碰撞檢測的方法和裝置。所述
技術(shù)方案如下
一種碰撞檢測的方法,所述方法包括
為游戲中待檢測的第一模型和第二模型分別生成碰撞面片;
獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間 信息;將獲取的3D空間信息轉(zhuǎn)換為2D平面上的圖形,分別得到所述第一模型的第一圖形和所
述第二模型的第二圖形;
檢測所述第一圖形與第二圖形是否相交,如果是,則所述第一模型與第二模型發(fā)生碰撞,
否則,所述第一模型與第二模型不發(fā)生碰撞。
所述為游戲中待檢測的第一模型和第二模型分別生成碰撞面片,具體包括 按照預設的規(guī)則,為游戲中待檢測的第一模型和第二模型分別生成碰撞面片,所述預設
的規(guī)則為碰撞面片的重心與待檢測模型的重心的距離不得超過預設的值。
所述預設的規(guī)則具體為碰撞面片與待檢測模型的面積最大的截面在同一個平面。 所述為游戲中待檢測的第一模型和第二模型分別生成碰撞面片之后,還包括 將所述第一模型的碰撞面片和所述第二模型的碰撞面片命名為相同的名字; 獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間
信息,具體包括
根據(jù)所述名字查找所述第一模型和第二模型的碰撞面片,獲取所述第一模型的碰撞面片 中的3D空間信息和所述第二模型的碰撞面片中的3D空間信息。 所述第一模型與第二模型發(fā)生碰撞之后,還包括
對于所述第一模型和第二模型中的任一個模型,如果該模型所屬的物體還包括其它模型, 則不顯示該模型,顯示所述其它模型。
將獲取的3D空間信息轉(zhuǎn)換為2D平面上的圖形,具體包括
當所述3D空間信息為3D空間三角形信息時,將獲取的3D空間三角形信息轉(zhuǎn)換為2D 平面上的三角形;
當所述3D空間信息為3D空間非三角形信息時,先將所述3D空間非三角形信息轉(zhuǎn)換為 3D空間三角形信息,再將獲取該3D空間三角形信息轉(zhuǎn)換為2D平面上的三角形。 一種碰撞檢測的裝置,所述裝置包括
創(chuàng)建模塊,為游戲中待檢測的第一模型和第二模型分別生成碰撞面片;
獲取模塊,用于獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞 面片中的3D空間信息;
轉(zhuǎn)換模塊,用于將所述獲取模塊獲取的3D空間信息轉(zhuǎn)換為2D平面上的圖形,分別得到 所述第一模型的第一圖形和所述第二模型的第二圖形;
檢測模塊,用于檢測所述第一圖形與所述第二圖形是否相交,如果是,則所述第一模型 與第二模型發(fā)生碰撞,否則,所述第一模型與第二模型不發(fā)生碰撞。所述創(chuàng)建模塊具體包括
創(chuàng)建單元,用于按照預設的規(guī)則,為游戲中待檢測的第一模型和第二模型分別生成碰撞 面片,所述預設的規(guī)則為碰撞面片的重心與待檢測模型的重心的距離不得超過預設的值。 所述預設的規(guī)則具體為碰撞面片與待檢測模型的面積最大的截面在同一個平面。 所述創(chuàng)建模塊還包括-
命名單元,用于將所述第一模型的碰撞面片和所述第二模型的碰撞面片命名為相同的名
字;
所述獲取模塊具體包括
查找單元,用于根據(jù)所述名字查找所述第一模型和第二模型的碰撞面片;
獲取單元,用于在所述査找單元找到所述第一模型和第二模型的碰撞面片后,獲取所述
第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間信息。
所述裝置還包括
顯示處理模塊,用于在所述檢測模塊判斷出所述第一模型與第二模型發(fā)生碰撞之后,對 于所述第一模型和第二模型中的任一個模型,如果該任一模型所屬的物體還包括其它模型, 則不顯示該任一模型,顯示所述其它模型。
所述轉(zhuǎn)換模塊具體包括-
三角形轉(zhuǎn)換單元,用于當所述獲取模塊獲取的3D空間信息為3D空間三角形信息時,將 該3D空間三角形信息轉(zhuǎn)換為2D平面上的三角形,分別得到所述第一模型的三角形和所述第 二模型的三角形;
非三角形轉(zhuǎn)換單元,當所述獲取模塊獲取的3D空間信息為3D空間非三角形信息時,先 將所述3D空間非三角形信息轉(zhuǎn)換為3D空間三角形信息,再將該3D空間三角形信息轉(zhuǎn)換為 2D平面上的三角形,分別得到所述第一模型的三角形和所述第二模型的三角形。
本發(fā)明實施例提供的上述方法和裝置,通過將3D模型的碰撞檢測轉(zhuǎn)化為2D平面內(nèi)的圖 形的檢測,極大地減少了碰撞檢測的計算量,縮短了碰撞檢測的時間,提高了碰撞檢測的效 率。而且,由于碰撞面片是在3D模型中創(chuàng)建的,很容易進行修改,可以通過修改碰撞面片 來實現(xiàn)不同區(qū)域的碰撞檢測,操作簡單、方便。另外,對碰撞面片和模型的相似度的要求不 是很高,可以使用具有一定差異的碰撞面片來進行碰撞檢測。當游戲中的物體包括多個模型 時,如果其中一個模型發(fā)生碰撞,則其它模型還仍然顯示,從而增強了游戲的真實性,提升 了游戲玩家的體驗。
圖1是本發(fā)明實施例提供的對游戲中的多個模型進行檢測的示意圖2是本發(fā)明實施例提供的碰撞檢測的方法流程圖3是本發(fā)明實施例提供的生成碰撞面片的示意圖4是本發(fā)明實施例提供的判斷三角形是否相交的示意圖5是本發(fā)明實施例提供的碰撞檢測的裝置一種結(jié)構(gòu)圖6是本發(fā)明實施例提供的碰撞檢測的裝置另一種結(jié)構(gòu)圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進 一步地詳細描述。
本發(fā)明實施例提供了一種碰撞檢測的方法,包括
為游戲中待檢測的第一模型和第二模型分別生成碰撞面片;獲取第一模型的碰撞面片中 的3D空間信息和第二模型的碰撞面片中的3D空間信息;將獲取的3D空間信息轉(zhuǎn)換為2D 平面上的圖形,分別得到第一模型的第一圖形和第二模型的第二圖形;檢測第一圖形與第二 圖形是否相交,如果是,則第一模型與第二模型發(fā)生碰撞,否則,第一模型與第二模型不發(fā) 生碰撞。
本發(fā)明實施例中涉及的模型是指3D模型,通常為網(wǎng)絡游戲中的3D模型。該模型可以使 用多種建模工具生成,如使用3DMAX生成。網(wǎng)絡游戲中的物體可以由一個模型組成,也可 以由多個模型組成。例如, 一種大型飛機由機身模型和機翼模型組成等。當一個物體由多個 模型組成時,每個模型都有自己的碰撞面片。
所述碰撞面片是在模型中生成的,該碰撞面片的顏色可以根據(jù)需要進行設置,如設置為 與待檢測模型不同的顏色。并且,還可以設置碰撞面片的透明度為不同的值,如透明、半透 明、70%透明等等。優(yōu)選地,為了增強游戲的逼真效果,提升游戲的體驗,使用戶覺察不到 碰撞檢測過程,可以將碰撞面片設置為透明的,對于游戲玩家來說是不可見的,即游戲玩家 在玩游戲的過程中看不到該碰撞面片的存在,該碰撞面片僅是為了碰撞檢測而用的,從而避 免了由于用戶看到碰撞面片而給游戲體驗帶來不良的影響。
本發(fā)明實施例中為待檢測模型生成碰撞面片的步驟可以在初始化時做,即只生成一次石並 撞面片即可,然后在每次運行游戲時,都根據(jù)已生成的碰撞面片進行碰撞檢測。另外,還可 以在每次運行游戲時,都臨時生成碰撞面片,然后再根據(jù)本次生成的碰撞面片進行碰撞檢測,即生成碰撞面片的動作為多次,每次都重新生成碰撞面片。優(yōu)選地,為了提高效率,節(jié)省資 源,避免不必要的重復,通常采用在初始化時生成碰撞面片的方式。
本發(fā)明實施例中的碰撞檢測方法可以應用于多個模型的碰撞檢測,例如,參見圖1,游 戲中有玩家飛機和敵方飛機兩類飛機,玩家飛機和敵方飛機均會發(fā)射子彈,在游戲過程中, 需要對玩家飛機和子彈與敵方飛機和子彈之間進行碰撞檢測。其中,任意兩個模型的碰撞檢 測的過程均相同,下面以對兩個模型進行碰撞檢測為例進行具體說明,當對多個模型進行碰 撞檢測時,可以重復執(zhí)行該碰撞檢測過程。
參見圖2,本發(fā)明實施例提供的碰撞檢測的方法,具體包括
步驟201:預先為游戲中待檢測的第一模型和第二模型分別生成透明的碰撞面片; 其中,第一模型和第二模型的碰撞面片可以按照預設的規(guī)則來生成,該預設的規(guī)則可以 為碰撞面片的重心與待檢測模型的重心的距離不得超過預設的值。當碰撞面片的形狀不同 時,該預設的值可以相同,也可以不同,且可以根據(jù)需要隨時進行修改。優(yōu)選地,所述預設 的值會根據(jù)碰撞面片形狀的不同而不同,通常將該值設置得較小,從而保證碰撞面片不會離 模型重心太遠,以提高碰撞檢測的準確性。例如,待檢測模型為三角形,當碰撞面片為三角 形時,該預設的值可以設置為3個像素點,當碰撞面片為正方形時,該預設的值可以設置為 5個像素點等等。
優(yōu)選地,可以將上述規(guī)則設置為碰撞面片與待檢測模型的面積最大的截面在同一個平 面。由于待檢測模型為3D立體模型,會有多個截面,生成碰撞面片時,按照面積最大的平 面來生成碰撞面片,即碰撞面片與面積最大的平面在同一個平面上,此時碰撞面片的重心與 待檢測模型的重心最接近,則保證碰撞面片與待檢測模型更接近,包括形狀接近和面積接近 等,從而提高碰撞檢測的準確性。參見圖3,為飛機模型生成的碰撞面片為一個三角形,該 三角形與該飛機模型的機翼部分在同一個平面上。
通常,碰撞面片以三角形來表示, 一個碰撞面片可以包含一個或多個三角形,具體個數(shù) 可以根據(jù)需要來調(diào)整,當碰撞面片包含的三角形個數(shù)越多時,其與模型的相似度越高,碰撞 檢測的精度也越高,因此,當對碰撞檢測的精度要求較高時,可以適當?shù)卦黾优鲎裁嫫腥?角形的數(shù)量。優(yōu)選地,為了減少碰撞檢測時的計算量,在精度能夠滿足要求的情況下,盡量 使得碰撞面片中包含較少的三角形,即碰撞面片越簡單越好。例如,對于圖1所示的以俯視
角度觀察的游戲,按照圖3所示生成的碰撞面片中僅包含一個三角形,極大地減少了碰撞檢
測的計算量,而且檢測的精度對于該游戲來說也完全能夠滿足要求。
另外,為了便于確定碰撞檢測的范圍,搜索碰撞檢測的對象,進一步地,還可以將第一模型的碰撞面片和第二模型的碰撞面片命名為相同的名字,使得碰撞檢測時,根據(jù)該相同的 名字可以搜索到該第一模型的碰撞面片和第二模型的碰撞面片,從而發(fā)起對該兩個模型的碰 撞檢測。在實際應用中,如果對多個模型同時進行碰撞檢測,則可以將該多個模型的碰撞面 片均命名為一個相同的名字,在搜索時可以根據(jù)該名字搜索到所有符合該名字的待檢測的模 型的碰撞面片,從而發(fā)起對該多個模型的碰撞檢測。
步驟202:當運行游戲時,查找第一模型和第二模型的碰撞面片;
具體地,可以根據(jù)碰撞面片的名字查找到第一模型和第二模型的碰撞面片。例如,步驟 201中為碰撞面片命名的名字為"CollisionArea",運行游戲時,搜索符合該名字的碰撞面片, 則會搜索到第一模型的碰撞面片和第二模型的碰撞面片。
通常的3D引擎都有根據(jù)名字進行搜索的功能,因此搜索碰撞面片的具體過程,此處就 不再詳細敘述。
步驟203:分別獲取第一模型的碰撞面片中的3D空間三角形信息和第二模型的碰撞面片 中的3D空間三角形信息;
所述3D空間三角形信息包含了 3D空間中的三維坐標信息。本實施例是以獲取3D空間 三角形信息為例進行說明的,在實際應用中,也可以獲取其它形狀的3D空間信息,如3D空 間正方形信息、3D空間長方形信息、3D空間平行四邊形信息等。由于3D空間多邊形均可 以看作是由一個或多個3D空間三角形組成的,如3D空間正方形可以看作是由兩個3D空間 三角形組成的,而在2D平面圖形中,判斷兩個三角形是否相交的算法是最簡單的,因此, 為了計算方便,提高計算效率,節(jié)省計算時間,優(yōu)選地,采用本實施例中獲取3D空間三角 形信息的方式。在實際應用中,如果獲取的是3D空間非三角形信息,則先將其轉(zhuǎn)換為3D空 間三角形信息,然后再執(zhí)行后續(xù)的步驟。
步驟204:將獲取的3D空間三角形信息轉(zhuǎn)換為2D平面上的三角形,分別得到第一模型 的三角形和第二模型的三角形;
所述2D平面上的三角形僅包含二維坐標信息,即橫坐標x和縱坐標y的信息。將3D空 間三角形信息轉(zhuǎn)換為2D平面上的三角形,是指將3D空間的三角形的每個頂點的坐標轉(zhuǎn)換為 2D平面上的坐標。
步驟205:檢測第一模型的三角形與第二模型的三角形是否相交,如果是,則執(zhí)行步驟 206;否則,執(zhí)行步驟207;
其中,第一模型的三角形可以為一個或多個,第二模型的三角形也可以為一個或多個,
檢測過程具體如下1) 第一模型包含一個三角形A,第二模型包含一個三角形B,則檢測三角形A和B是 否相交,如果相交,則第一模型和第二模型發(fā)生碰撞,否則,未發(fā)生碰撞;
2) 第一模型包含一個三角形A,第二模型包含多個三角形Bl Bn,其中,n為大于1 的自然數(shù),則檢測三角形A是否和三角形Bl Bn中的任一個相交,只要三角形A和Bl Bn其中的一個相交,則第一模型和第二模型就發(fā)生碰撞,當然,和其中的多個相交也必然發(fā) 生碰撞,只有三角形A和三角形Bl Bn中的哪個也不相交時,表明第一模型和第二模型未 相撞;
3) 第一模型包含多個三角形Al An,第二模型包含一個三角形B,其中,n為大于1 的自然數(shù),則檢測三角形B是否和三角形Al An中的任一個相交,如果是,則第一模型和 第二模型發(fā)生碰撞,否則,未發(fā)生碰撞,與2)中描述的過程類似,區(qū)別僅在于是第一模型 包含多個三角形還是第二模型包含多個三角形;
4) 第一模型和第二模型均包含多個三角形,檢測第一模型的多個三角形中的任一個三角 形是否與第二模型的多個三角形中的至少一個三角形相交,如果是,則第一模型與第二模型 發(fā)生碰撞,否則,未發(fā)生碰撞。也可以檢測第二模型的多個三角形中的任一個三角形是否與 第一模型的多個三角形中的至少一個三角形相交,如果是,則第一模型與第二模型發(fā)生碰撞, 否則,未發(fā)生碰撞。
例如,參見圖4,玩家飛機的第一模型包含2D平面上的Al和A2兩個三角形,敵方飛 機的第二模型包含2D平面上的B1、 B2和B3共三個三角形。當檢測到以下情況中的至少一 種時,可以判斷出第一模型和第二模型發(fā)生碰撞Al禾t]Bl相交,Al禾nB2相交,A1和B3 相交,A2和B1相交,A2和B2相交,A2和B3相交;如果上述情況均未出現(xiàn),則第一模型 和第二模型未發(fā)生碰撞。具體地,檢測兩個2D空間內(nèi)的三角形是否相交,現(xiàn)有技術(shù)中有很 多種方法,此處就不再贅述。
另外,本發(fā)明實施例中,如果獲取的是3D空間非三角形信息時,也可以不先將其轉(zhuǎn)換 為3D空間三角形信息,而是直接將其轉(zhuǎn)換為2D空間的圖形,該轉(zhuǎn)換后的2D空間圖形可能 是三角形,也可能不是三角形。如果該2D空間圖形是三角形,則判斷第一模型的三角形與 第二模型的三角形是否相交,從而進行碰撞檢測。如果該2D空間圖形仍不是三角形,如為 長方形、菱形、梯形、六邊形等,則有兩種方式進行判斷1)可以直接對該2D空間的圖形 進行判斷,根據(jù)該形狀采用相應的算法判斷兩個模型的2D空間圖形是否相交,如判斷長方 形和菱形是否相交,從而進行碰撞檢測;2)還可以先將該2D空間圖形轉(zhuǎn)換為一個或多個三 角形,如將六邊形轉(zhuǎn)換為4個三角形,然后再判斷轉(zhuǎn)換后第一模型的三角形與第二模型的三角形是否相交,從而進行碰撞檢測。由于判斷三角形是否相交的算法比較簡單,優(yōu)選地,采
用上述第二種方式進行判斷。
步驟206:判斷出第一模型與第二模型發(fā)生碰撞,流程結(jié)束。
步驟207:判斷出第一模型與第二模型不發(fā)生碰撞,流程結(jié)束。
進一步地,在判斷出第一模型與第二模型發(fā)生碰撞之后,上述方法還包括
對于第一模型和第二模型中的任一個模型,如果該模型所屬的物體還包括其它模型,則
不顯示該模型,將其替換為預先準備好的該模型被炸毀或撞毀的動畫或Flash,形成碰撞部分
的動畫顯示,給用戶呈現(xiàn)該模型被炸毀或撞毀的效果,而此時除該模型以外的其它模型則正
常顯示,并且在該動畫或Flash播放完成后,該其它模型仍然正常顯示,給用戶呈現(xiàn)的是該 物體的某個部件被炸毀或撞毀之后剩余其它部件的效果。例如,當大型飛機由機身模型和機 翼模型組成時,如果檢測出機翼模型與敵機發(fā)生碰撞,則爆炸掉的僅僅是機翼模型,而機身 模型沒有發(fā)生碰撞,仍然保留,因此,該碰撞發(fā)生后會顯示機翼模型被炸毀的動畫,以及沒 有被炸毀的機身部分,而機翼部分則不顯示,即飛機沒有被炸毀,只是機體殘缺了。
參見圖5,本發(fā)明實施例還提供了一種碰撞檢測的裝置,包括 創(chuàng)建模塊501,為游戲中待檢測的第一模型和第二模型分別生成碰撞面片; 獲取模塊502,用于獲取第一模型的碰撞面片中的3D空間信息和第二模型的碰撞面片中 的3D空間信息;
轉(zhuǎn)換模塊503,將獲取模塊502獲取的3D空間信息轉(zhuǎn)換為2D平面上的三角形,分別得 到第一模型的第一圖形和第二模型的第二圖形;
檢測模塊504,用于檢測轉(zhuǎn)換模塊503得到的第一圖形與第二圖形是否相交,如果是, 則第一模型與第二模型發(fā)生碰撞,否則,第一模型與第二模型不發(fā)生碰撞。
參見圖6,其中,創(chuàng)建模塊501可以具體包括
創(chuàng)建單元501a,用于按照預設的規(guī)則,為游戲中待檢測的第一模型和第二模型分別生成 碰撞面片,預設的規(guī)則為碰撞面片的重心與待檢測模型的重心的距離不得超過預設的值。
優(yōu)選地,可以將該預設的規(guī)則具體設置為碰撞面片與待檢測模型的面積最大的截面在同一
個平面。
進一步地,創(chuàng)建模塊501還可以包括
命名單元501b,用于將第一模型的碰撞面片和第二模型的碰撞面片命名為相同的名字; 相應地,獲取模塊502具體包括
査找單元502a,用于根據(jù)上述名字查找第一模型和第二模型的碰撞面片;獲取單元502b,用于在査找單元502a找到第一模型和第二模型的碰撞面片后,獲取第 一模型的碰撞面片中的3D空間信息和第二模型的碰撞面片中的3D空間信息。 本實施例中,檢測模塊504具體包括
檢測單元,用于當?shù)谝荒P偷牡谝粓D形和第二模型的第二圖形均為多個三角形時,檢測 第一模型的多個三角形中的任一個三角形是否與第二模型的多個三角形中的至少一個三角形 相交,如果是,則第一模型與第二模型發(fā)生碰撞,否則,第一模型與第二模型不發(fā)生碰撞。
本實施例中,進一步地,上述裝置還可以包括
顯示處理模塊505,用于在檢測模塊504判斷出第一模型與第二模型發(fā)生碰撞之后,對 于第一模型和第二模型中的任一個模型,如果該任一模型所屬的物體還包括其它模型,則不 顯示該任一模型,顯示其它模型。
本實施例中,轉(zhuǎn)換模塊503具體包括
三角形轉(zhuǎn)換單元503a,用于當獲取模塊502獲取的3D空間信息為3D空間三角形信息時, 將該3D空間三角形信息轉(zhuǎn)換為2D平面上的三角形,分別得到第一模型的三角形和第二模型 的三角形;
非三角形轉(zhuǎn)換單元503b,當獲取模塊502獲取的3D空間信息為3D空間非三角形信息 時,先將該3D空間非三角形信息轉(zhuǎn)換為3D空間三角形信息,再將該3D空間三角形信息轉(zhuǎn) 換為2D平面上的三角形,分別得到第一模型的三角形和第二模型的三角形。
本發(fā)明實施例提供的上述方法和裝置,可以應用于游戲中多個物體或多個模型之間的碰 撞檢測,尤其適合于具有一定觀察視角的應用場景,這種情況下對碰撞檢測的精度要求都不 會太高,該方法和裝置均能夠滿足精度要求。例如,可以應用于圖1所示的具有俯視觀察視 角的游戲的碰撞檢測。本發(fā)明實施例中的碰撞檢測不是在3D空間中進行,而是在2D空間中 進行的,當玩家看到游戲界面中玩家飛機和敵方飛機有相交點時,則上述技術(shù)方案就會判定 該兩飛機相撞,而不論該飛機在3D空間中是否相撞。即使玩家飛機和敵方飛機在高度上可 能有比較大的差距,完全沒有碰撞,但是在游戲屏幕上看到的結(jié)果還是這兩個飛機相撞了。
本發(fā)明實施例提供的上述方法和裝置,通過將3D模型的碰撞檢測轉(zhuǎn)化為2D平面內(nèi)的圖 形的檢測,極大地減少了碰撞檢測的計算量,縮短了碰撞檢測的時間,提高了碰撞檢測的效 率。而且,由于碰撞面片是在3D模型中創(chuàng)建的,很容易進行修改,可以通過修改碰撞面片 來實現(xiàn)不同區(qū)域的碰撞檢測,操作簡單、方便。另外,對碰撞面片和模型的相似度的要求不 是很高,可以使用具有一定差異的碰撞面片來進行碰撞檢測。當游戲中的物體包括多個模型 時,如果其中一個模型發(fā)生碰撞,則其它模型還仍然顯示,并顯示該發(fā)生碰撞的模型被撞毀戲的真實性,提升了游戲玩家的體驗。
本發(fā)明實施例提供的上述技術(shù)方案的全部或部分可以通過程序指令相關的硬件來完成, 所述程序可以存儲在可讀取的存儲介質(zhì)中,該存儲介質(zhì)包括ROM、 RAM、磁碟或者光盤等 各種可以存儲程序代碼的介質(zhì)。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之 內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1、一種碰撞檢測的方法,其特征在于,所述方法包括為游戲中待檢測的第一模型和第二模型分別生成碰撞面片;獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間信息;將獲取的3D空間信息轉(zhuǎn)換為2D平面上的圖形,分別得到所述第一模型的第一圖形和所述第二模型的第二圖形;檢測所述第一圖形與第二圖形是否相交,如果是,則所述第一模型與第二模型發(fā)生碰撞,否則,所述第一模型與第二模型不發(fā)生碰撞。
2、 根據(jù)權(quán)利要求1所述的碰撞檢測的方法,其特征在于,所述為游戲中待檢測的第一模 型和第二模型分別生成碰撞面片,具體包括按照預設的規(guī)則,為游戲中待檢測的第一模型和第二模型分別生成碰撞面片,所述預設的規(guī)則為碰撞面片的重心與待檢測模型的重心的距離不得超過預設的值。
3、 根據(jù)權(quán)利要求2所述的碰撞檢測的方法,其特征在于,所述預設的規(guī)則具體為碰撞 面片與待檢測模型的面積最大的截面在同一個平面。
4、 根據(jù)權(quán)利要求1所述的碰撞檢測的方法,其特征在于,所述為游戲中待檢測的第一模 型和第二模型分別生成碰撞面片之后,還包括將所述第一模型的碰撞面片和所述第二模型的碰撞面片命名為相同的名字; 獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間信息,具體包括根據(jù)所述名字查找所述第一模型和第二模型的碰撞面片,獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間信息。
5、 根據(jù)權(quán)利要求1所述的碰撞檢測的方法,其特征在于,所述第一模型與第二模型發(fā)生碰撞之后,還包括對于所述第一模型和第二模型中的任一個模型,如果該模型所屬的物體還包括其它模型,則不顯示該模型,顯示所述其它模型。
6、 根據(jù)權(quán)利要求1至5中任一權(quán)利要求所述的碰撞檢測的方法,其特征在于,將獲取的 3D空間信息轉(zhuǎn)換為2D平面上的圖形,具體包括當所述3D空間信息為3D空間三角形信息時,將獲取的3D空間三角形信息轉(zhuǎn)換為2D 平面上的三角形;當所述3D空間信息為3D空間非三角形信息時,先將所述3D空間非三角形信息轉(zhuǎn)換為 3D空間三角形信息,再將獲取該3D空間三角形信息轉(zhuǎn)換為2D平面上的三角形。
7、 一種碰撞檢測的裝置,其特征在于,所述裝置包括創(chuàng)建模塊,為游戲中待檢測的第一模型和第二模型分別生成碰撞面片;獲取模塊,用于獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞 面片中的3D空間信息;轉(zhuǎn)換模塊,用于將所述獲取模塊獲取的3D空間信息轉(zhuǎn)換為2D平面上的圖形,分別得到 所述第一模型的第一圖形和所述第二模型的第二圖形;檢測模塊,用于檢測所述第一圖形與所述第二圖形是否相交,如果是,則所述第一模型 與第二模型發(fā)生碰撞,否則,所述第一模型與第二模型不發(fā)生碰撞。
8、 根據(jù)權(quán)利要求7所述的碰撞檢測的裝置,其特征在于,所述創(chuàng)建模塊具體包括 創(chuàng)建單元,用于按照預設的規(guī)則,為游戲中待檢測的第一模型和第二模型分別生成碰撞面片,所述預設的規(guī)則為碰撞面片的重心與待檢測模型的重心的距離不得超過預設的值。
9、 根據(jù)權(quán)利要求8所述的碰撞檢測的裝置,其特征在于,所述預設的規(guī)則具體為碰撞面片與待檢測模型的面積最大的截面在同一個平面。
10、 根據(jù)權(quán)利要求7所述的碰撞檢測的裝置,其特征在于,所述創(chuàng)建模塊還包括命名單元,用于將所述第一模型的碰撞面片和所述第二模型的碰撞面片命名為相同的名字;所述獲取模塊具體包括查找單元,用于根據(jù)所述名字査找所述第一模型和第二模型的碰撞面片;獲取單元,用于在所述査找單元找到所述第一模型和第二模型的碰撞面片后,獲取所述 第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間信息。
11、 根據(jù)權(quán)利要求7所述的碰撞檢測的裝置,其特征在于,所述裝置還包括 顯示處理模塊,用于在所述檢測模塊判斷出所述第一模型與第二模型發(fā)生碰撞之后,對于所述第一模型和第二模型中的任一個模型,如果該任一模型所屬的物體還包括其它模型, 則不顯示該任一模型,顯示所述其它模型。
12、 根據(jù)權(quán)利要求7至11所述的碰撞檢測的裝置,其特征在于,所述轉(zhuǎn)換模塊具體包括: 三角形轉(zhuǎn)換單元,用于當所述獲取模塊獲取的3D空間信息為3D空間三角形信息時,將該3D空間三角形信息轉(zhuǎn)換為2D平面上的三角形,分別得到所述第一模型的三角形和所述第 二模型的三角形;非三角形轉(zhuǎn)換單元,當所述獲取模塊獲取的3D空間信息為3D空間非三角形信息時,先 將所述3D空間非三角形信息轉(zhuǎn)換為3D空間三角形信息,再將該3D空間三角形信息轉(zhuǎn)換為 2D平面上的三角形,分別得到所述第一模型的三角形和所述第二模型的三角形。
全文摘要
本發(fā)明公開了一種碰撞檢測的方法和裝置,屬于網(wǎng)絡游戲領域。所述方法包括為游戲中待檢測的第一模型和第二模型分別生成碰撞面片;獲取第一模型、第二模型的碰撞面片中的3D空間信息;并轉(zhuǎn)換為2D平面上的圖形,得到第一模型的第一圖形和第二模型的第二圖形;檢測第一圖形與第二圖形是否相交,如果是,則第一模型與第二模型發(fā)生碰撞,否則,不發(fā)生碰撞。所述裝置包括創(chuàng)建模塊、獲取模塊、轉(zhuǎn)換模塊和檢測模塊。本發(fā)明通過將3D模型的碰撞檢測轉(zhuǎn)化為2D平面內(nèi)圖形的檢測,極大地減少了碰撞檢測的計算量,縮短了碰撞檢測的時間,提高了碰撞檢測的效率。
文檔編號G06T17/00GK101615305SQ20091016150
公開日2009年12月30日 申請日期2009年7月24日 優(yōu)先權(quán)日2009年7月24日
發(fā)明者姚建輝, 聞 湯, 王彭城 申請人:騰訊科技(深圳)有限公司