亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

碰撞檢測(cè)的方法和裝置的制作方法

文檔序號(hào):6579559閱讀:253來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):碰撞檢測(cè)的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)游戲領(lǐng)域,特別涉及一種碰撞檢測(cè)的方法和裝置。
背景技術(shù)
在游戲中物體的碰撞是經(jīng)常發(fā)生的,怎樣檢測(cè)物體的碰撞是一個(gè)很關(guān)鍵的技術(shù)問(wèn)題。尤 其是在飛行射擊游戲中,如果不能很好地解決這一問(wèn)題,會(huì)極大地影響玩游戲者的興趣。碰 揸檢測(cè)可以探測(cè)游戲中各物體的物理邊緣,檢測(cè)出游戲中的各物體是否發(fā)生碰撞。當(dāng)兩個(gè)3D 物體撞在一起的時(shí)候,這種碰撞檢測(cè)技術(shù)可以防止它們相互穿過(guò)。例如,當(dāng)游戲中的人物撞 在墻上的時(shí)候,碰撞檢測(cè)技術(shù)會(huì)根據(jù)人物和墻之間的特性確定兩者的位置和相互的作用關(guān)系, 從而保證該人物既不會(huì)穿墻而過(guò),也不會(huì)把墻撞倒。
目前成功商業(yè)3D游戲普遍采用的碰撞檢測(cè)是BSP (Binary Space Partitioning, 二叉空間 分割)樹(shù)方式及包裝盒方式。BSP樹(shù)是用來(lái)控制檢測(cè)順序和方向的數(shù)據(jù)描述,通過(guò)找出兩個(gè) 物體間的分隔面的方法來(lái)判斷兩個(gè)物體是否相交,如果分隔面存在,則沒(méi)有發(fā)生碰撞。包裝 盒方式就是采用一個(gè)描述用的正方體或者球型體包裹住3D物體對(duì)象整體,或者是主要部分, 然后根據(jù)描述用包裝盒的距離、位置等信息來(lái)計(jì)算是否發(fā)生碰撞。該正方體和球型體也可以 由其他形狀來(lái)代替。
現(xiàn)有的碰撞檢測(cè)技術(shù)是在3D環(huán)境中通過(guò)計(jì)算實(shí)現(xiàn)的,這種計(jì)算通常都比較復(fù)雜,計(jì)算 所需的時(shí)間也比較長(zhǎng),因此,碰撞檢測(cè)的效率較低。

發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)存在的問(wèn)題,本發(fā)明實(shí)施例提供了一種碰撞檢測(cè)的方法和裝置。所述
技術(shù)方案如下
一種碰撞檢測(cè)的方法,所述方法包括
為游戲中待檢測(cè)的第一模型和第二模型分別生成碰撞面片;
獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間 信息;將獲取的3D空間信息轉(zhuǎn)換為2D平面上的圖形,分別得到所述第一模型的第一圖形和所
述第二模型的第二圖形;
檢測(cè)所述第一圖形與第二圖形是否相交,如果是,則所述第一模型與第二模型發(fā)生碰撞,
否則,所述第一模型與第二模型不發(fā)生碰撞。
所述為游戲中待檢測(cè)的第一模型和第二模型分別生成碰撞面片,具體包括 按照預(yù)設(shè)的規(guī)則,為游戲中待檢測(cè)的第一模型和第二模型分別生成碰撞面片,所述預(yù)設(shè)
的規(guī)則為碰撞面片的重心與待檢測(cè)模型的重心的距離不得超過(guò)預(yù)設(shè)的值。
所述預(yù)設(shè)的規(guī)則具體為碰撞面片與待檢測(cè)模型的面積最大的截面在同一個(gè)平面。 所述為游戲中待檢測(cè)的第一模型和第二模型分別生成碰撞面片之后,還包括 將所述第一模型的碰撞面片和所述第二模型的碰撞面片命名為相同的名字; 獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間
信息,具體包括
根據(jù)所述名字查找所述第一模型和第二模型的碰撞面片,獲取所述第一模型的碰撞面片 中的3D空間信息和所述第二模型的碰撞面片中的3D空間信息。 所述第一模型與第二模型發(fā)生碰撞之后,還包括
對(duì)于所述第一模型和第二模型中的任一個(gè)模型,如果該模型所屬的物體還包括其它模型, 則不顯示該模型,顯示所述其它模型。
將獲取的3D空間信息轉(zhuǎn)換為2D平面上的圖形,具體包括
當(dāng)所述3D空間信息為3D空間三角形信息時(shí),將獲取的3D空間三角形信息轉(zhuǎn)換為2D 平面上的三角形;
當(dāng)所述3D空間信息為3D空間非三角形信息時(shí),先將所述3D空間非三角形信息轉(zhuǎn)換為 3D空間三角形信息,再將獲取該3D空間三角形信息轉(zhuǎn)換為2D平面上的三角形。 一種碰撞檢測(cè)的裝置,所述裝置包括
創(chuàng)建模塊,為游戲中待檢測(cè)的第一模型和第二模型分別生成碰撞面片;
獲取模塊,用于獲取所述第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞 面片中的3D空間信息;
轉(zhuǎn)換模塊,用于將所述獲取模塊獲取的3D空間信息轉(zhuǎn)換為2D平面上的圖形,分別得到 所述第一模型的第一圖形和所述第二模型的第二圖形;
檢測(cè)模塊,用于檢測(cè)所述第一圖形與所述第二圖形是否相交,如果是,則所述第一模型 與第二模型發(fā)生碰撞,否則,所述第一模型與第二模型不發(fā)生碰撞。所述創(chuàng)建模塊具體包括
創(chuàng)建單元,用于按照預(yù)設(shè)的規(guī)則,為游戲中待檢測(cè)的第一模型和第二模型分別生成碰撞 面片,所述預(yù)設(shè)的規(guī)則為碰撞面片的重心與待檢測(cè)模型的重心的距離不得超過(guò)預(yù)設(shè)的值。 所述預(yù)設(shè)的規(guī)則具體為碰撞面片與待檢測(cè)模型的面積最大的截面在同一個(gè)平面。 所述創(chuàng)建模塊還包括-
命名單元,用于將所述第一模型的碰撞面片和所述第二模型的碰撞面片命名為相同的名
字;
所述獲取模塊具體包括
查找單元,用于根據(jù)所述名字查找所述第一模型和第二模型的碰撞面片;
獲取單元,用于在所述査找單元找到所述第一模型和第二模型的碰撞面片后,獲取所述
第一模型的碰撞面片中的3D空間信息和所述第二模型的碰撞面片中的3D空間信息。
所述裝置還包括
顯示處理模塊,用于在所述檢測(cè)模塊判斷出所述第一模型與第二模型發(fā)生碰撞之后,對(duì) 于所述第一模型和第二模型中的任一個(gè)模型,如果該任一模型所屬的物體還包括其它模型, 則不顯示該任一模型,顯示所述其它模型。
所述轉(zhuǎn)換模塊具體包括-
三角形轉(zhuǎn)換單元,用于當(dāng)所述獲取模塊獲取的3D空間信息為3D空間三角形信息時(shí),將 該3D空間三角形信息轉(zhuǎn)換為2D平面上的三角形,分別得到所述第一模型的三角形和所述第 二模型的三角形;
非三角形轉(zhuǎn)換單元,當(dāng)所述獲取模塊獲取的3D空間信息為3D空間非三角形信息時(shí),先 將所述3D空間非三角形信息轉(zhuǎn)換為3D空間三角形信息,再將該3D空間三角形信息轉(zhuǎn)換為 2D平面上的三角形,分別得到所述第一模型的三角形和所述第二模型的三角形。
本發(fā)明實(shí)施例提供的上述方法和裝置,通過(guò)將3D模型的碰撞檢測(cè)轉(zhuǎn)化為2D平面內(nèi)的圖 形的檢測(cè),極大地減少了碰撞檢測(cè)的計(jì)算量,縮短了碰撞檢測(cè)的時(shí)間,提高了碰撞檢測(cè)的效 率。而且,由于碰撞面片是在3D模型中創(chuàng)建的,很容易進(jìn)行修改,可以通過(guò)修改碰撞面片 來(lái)實(shí)現(xiàn)不同區(qū)域的碰撞檢測(cè),操作簡(jiǎn)單、方便。另外,對(duì)碰撞面片和模型的相似度的要求不 是很高,可以使用具有一定差異的碰撞面片來(lái)進(jìn)行碰撞檢測(cè)。當(dāng)游戲中的物體包括多個(gè)模型 時(shí),如果其中一個(gè)模型發(fā)生碰撞,則其它模型還仍然顯示,從而增強(qiáng)了游戲的真實(shí)性,提升 了游戲玩家的體驗(yàn)。


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