CRD為英文縮寫,具有多重含義。
CRD
CRD(CollisionResolutionDevice)碰撞檢測(cè)設(shè)備.碰撞檢測(cè)在3D游戲中至關(guān)重要,好的碰撞檢測(cè)要求人物在場(chǎng)景中可以平滑移動(dòng),遇到一定高度內(nèi)的臺(tái)階可以自動(dòng)上去,而過高的臺(tái)階則把人擋住,遇到斜率較小的斜坡可以上去,斜率過大則把人擋住,在各種前進(jìn)方向被擋住的情況下都要盡可能地讓人物沿合理的方向滑動(dòng)而不是被迫停下。在滿足這些要求的同時(shí)還要做到足夠精確和穩(wěn)定,防止人物在特殊情況下穿墻而掉出場(chǎng)景。
碰撞檢測(cè)做得好了是應(yīng)該的,不易被人注意到,因?yàn)檫@符合我們?nèi)粘I钪械某WR(shí)。做得差了卻很容易讓人發(fā)現(xiàn),人物經(jīng)常被卡住不能前進(jìn)或者人物穿越了障礙。所以大部分人都覺得寫碰撞檢測(cè)代碼是件吃力不討好的事情,算法復(fù)雜、容易出bug、不容易出彩。下面還是回到正題,看看我們?cè)撊绾谓鉀Q這個(gè)難題。
早期3D游戲的碰撞檢測(cè)多數(shù)基于格子或者BSP樹,基于格子的系統(tǒng)實(shí)現(xiàn)簡(jiǎn)單但精度不夠,不屬于嚴(yán)格意義的3D碰撞檢測(cè)?;贐SP樹的碰撞檢測(cè)一度十分流行,算法基本已經(jīng)成熟定型,但它的固有缺點(diǎn)卻使它不太適合現(xiàn)在的游戲。BSP樹需要很長(zhǎng)的預(yù)處理時(shí)間不適合加載時(shí)計(jì)算,BSP劃分經(jīng)常會(huì)產(chǎn)生原多邊形數(shù)三到四倍的多邊形,考慮到不用保存法線、顏色、uv等信息也要增加將近一倍的資源容量,在一個(gè)大的游戲中將模型資源的容量從200M增加到400M相信是大部分人都不愿接受的。目前對(duì)于任意復(fù)雜三角形集合(mesh)的碰撞檢測(cè)多數(shù)基于BVTree(boundingvolumetree),具體可以是aabbtree,obbtree或者K-doptree,這也是當(dāng)今各種物理引擎和碰撞檢測(cè)引擎流行的做法。
上面是碰撞檢測(cè)按數(shù)據(jù)結(jié)構(gòu)不同的分類,按檢測(cè)方式又可以分為離散點(diǎn)的碰撞檢測(cè)和連續(xù)碰撞檢測(cè)(CCDcontinuouscollisiondetection)。離散點(diǎn)的碰撞檢測(cè)是指定某一時(shí)刻T的兩個(gè)靜態(tài)碰撞體,看它們之間是否交迭,如果沒有交迭則返回它們最近點(diǎn)的距離,如果交迭則返回交迭深度,交迭方向等。連續(xù)碰撞檢測(cè)則是分別指定在T1、T2兩個(gè)時(shí)刻兩個(gè)碰撞體的位置,看它們?cè)谟蒚1運(yùn)動(dòng)到T2時(shí)刻的過程中是否發(fā)生碰撞,如果碰撞則返回第一碰撞點(diǎn)的位置和法線。連續(xù)碰撞檢測(cè)是最為自然的碰撞檢測(cè),可以大大方便碰撞響應(yīng)邏輯的編寫,可以很容易避免物體發(fā)生交迭或者穿越。離散點(diǎn)的碰撞檢測(cè)則沒有那么友好,當(dāng)檢測(cè)到碰撞時(shí)兩個(gè)物體已經(jīng)發(fā)生了交迭,如果其中有三角形網(wǎng)格對(duì)象那么已經(jīng)有許多三角形發(fā)生了交迭,如何將兩個(gè)交迭的對(duì)象分開并按合理的方式運(yùn)動(dòng)是一個(gè)挑戰(zhàn)。雖然連續(xù)碰撞檢測(cè)是最自然的方式,但它的實(shí)現(xiàn)非常復(fù)雜,運(yùn)算開銷也很大,所以目前大部分成熟的物理引擎和碰撞檢測(cè)引擎還是采用了基于離散點(diǎn)的碰撞檢測(cè),為了避免物體交迭過深或者彼此穿越,它們都要采用比較小的模擬步長(zhǎng)。

由于碰撞檢測(cè)引擎的復(fù)雜性和對(duì)效率的高要求,我們應(yīng)該盡量使用目前成熟的完整引擎,而不是自己去開發(fā)。經(jīng)過評(píng)估,我決定采用Opcode碰撞檢測(cè)引擎來做游戲中人物和場(chǎng)景的碰撞檢測(cè)。Opcode的主要功能是用aabbtree管理復(fù)雜三角形集合來和射線、球體,立方體,另一個(gè)三角形集合等進(jìn)行離散點(diǎn)上的碰撞檢測(cè),如果檢測(cè)到交迭則返回所有發(fā)生交迭的三角形。Opcode的特點(diǎn)是高度的內(nèi)存使用優(yōu)化和極好的效率,ODE物理引擎底層就采用它來做復(fù)雜三角形mesh的碰撞檢測(cè),Opcode的作者也是NovodeX(PhysX前身)物理引擎的核心開發(fā)人員,據(jù)說NovodeX采用了Opcode的一個(gè)更優(yōu)化版本。由此可見Opcode的成熟與效率。
確定了要使用的引擎,下面要討論的算法就和具體引擎無關(guān)了,適合于任何離散點(diǎn)的碰撞檢測(cè)引擎。我們用AABB包圍盒來代表場(chǎng)景中的人物,看看如何實(shí)現(xiàn)文章開頭所提出的效果。
另外,CRD是CapitalRecreationDistrict(首都休閑娛樂中心)的英文縮寫,是繼朝陽區(qū)CBD之后的又一C*D力作。
為解決因首鋼涉鋼產(chǎn)業(yè)搬遷后石景山經(jīng)濟(jì)支柱產(chǎn)業(yè)“空心化”問題,未來的石景山區(qū)將大力培育休閑娛樂服務(wù)業(yè)、商務(wù)會(huì)展服務(wù)業(yè)和創(chuàng)意科技服務(wù)業(yè)“三大產(chǎn)業(yè)集群”。日前,石景山區(qū)正式推出“打造北京CRD”的發(fā)展戰(zhàn)略,在未來5年內(nèi)帶動(dòng)300億元的投資項(xiàng)目。
CRD(CapitalRecreationDistrict)是石景山區(qū)打造“首都休閑娛樂中心區(qū)”的英文縮寫。這個(gè)發(fā)展定位主要是要把石景山區(qū)建設(shè)成一個(gè)以休閑、娛樂為發(fā)展主旋律,以營(yíng)造京西花園式的生態(tài)環(huán)境和時(shí)尚高雅的文化氛圍為基礎(chǔ),打造集休閑、娛樂、數(shù)字動(dòng)漫、會(huì)展、購物和商務(wù)辦公等功能為一體的首都休閑娛樂中心區(qū)。該區(qū)常務(wù)副區(qū)長(zhǎng)張力兵說,這一戰(zhàn)略定位的背景是,北京城市總體規(guī)劃和首鋼涉鋼產(chǎn)業(yè)搬遷兩件大事。在CRD發(fā)布會(huì)現(xiàn)場(chǎng)5個(gè)規(guī)劃沙盤中可以看到,石景山區(qū)將推出以一山(山林景觀)、一水(永定河)、一軸(長(zhǎng)安街西延長(zhǎng)線商務(wù)軸)、一園(石景山科技園區(qū))為核心的三大特色功能區(qū),包括東部的主題娛樂區(qū)、西部的休閑度假區(qū)、中部的創(chuàng)意高新區(qū)。未來3年內(nèi),圍繞首都休閑娛樂中心區(qū)(CRD)的定位,將完成石景山游樂園4D影院等49個(gè)重大項(xiàng)目建設(shè)。
愛華網(wǎng)本文地址 » http://www.klfzs.com/a/8103490103/114121.html
愛華網(wǎng)


