




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
碰撞檢測(cè)教程(C++)碰撞檢測(cè)教程(C++)碰撞檢測(cè)教程(C++)碰撞檢測(cè)教程(C++)編制僅供參考審核批準(zhǔn)生效日期地址:電話:傳真:郵編:簡介本文是闡述如何在2D動(dòng)作游戲中進(jìn)行精確而高效的碰撞檢測(cè)。這里的碰撞是基于多邊形而不是基于精靈的。這兩者之間在設(shè)計(jì)上會(huì)有不同。基于精靈的碰撞檢測(cè)是通過精靈之間的重疊的像素來完成的。而多邊形使用向量數(shù)學(xué)來精確計(jì)算交點(diǎn),時(shí)間和碰撞方向。雖然多邊形僅僅是精靈的一個(gè)近似,但是它比精靈系統(tǒng)要高級(jí)。可以精確模擬逼真的簡單物理學(xué),例如反彈,摩擦,斜面的滑行碰撞檢測(cè)可以更精確的用于高速精靈系統(tǒng)。在基于精靈的系統(tǒng)中,如果物體移動(dòng)過快就會(huì)在跳過另一個(gè)物體?;谙蛄繑?shù)學(xué)因此可以擴(kuò)展到3D,然而精靈碰撞系統(tǒng)被嚴(yán)格限制在2D的情況下。特性本文使用的算法只適用于凸多邊形,例如三角形,四邊形,六邊形,圓形。對(duì)于非凸多邊形,你可以將其分解為多個(gè)凸多邊形,例如三角形。算法可以用于快速移動(dòng)或慢速移動(dòng)的多邊形。不管物體移動(dòng)多快,碰撞都不會(huì)丟失。它也可以處理重疊的問題,并促使交疊物體分離。演示也支持分割多邊形交叉。這可以用于子彈的建模。同時(shí)提供了簡單的物體系統(tǒng),彈力,一些基本的摩擦和靜摩擦力。用于確保物體不會(huì)從斜面上滑落。有一個(gè)剛體系統(tǒng)的例子,使用了ChrsiHecker的物理教程。限制有序碰撞。就是說并不是有序的進(jìn)行碰撞。這對(duì)于快速移動(dòng)的物體會(huì)出現(xiàn)一定的問題。一旦碰撞被檢測(cè)到,它就被直接處理了。理想狀態(tài)下你可能需要找到一個(gè)碰撞點(diǎn)并處理它,然后尋找更多的碰撞。但是對(duì)于2D動(dòng)作游戲,這通常是不必要的。一、分離坐標(biāo)軸方法這個(gè)方法是碰撞檢測(cè)的核心。它的規(guī)則非常簡單并且非常易于實(shí)現(xiàn)。這個(gè)方法也非常快并且非??煽浚?yàn)橛?jì)算中沒有使用除法操作,下面給出一個(gè)簡單的基于兩個(gè)BOX的碰撞檢測(cè)的例子。算法試圖在兩個(gè)物體之間找到一個(gè)合適平面,如果這個(gè)平面存在,那么物體就沒有相交。為了測(cè)試物體是否是分開的,簡單的方法是投影這個(gè)物體到平面的法線上,并比較兩者之間的間距看二者是否重疊。顯然有無數(shù)的平面可以用來分割兩個(gè)物體。但是已經(jīng)經(jīng)過證明的是:你只需要使用一部分平面來進(jìn)行測(cè)試,對(duì)于BOX從上圖中可以看出平面的法線為BOXB的長軸。對(duì)于BOX來說需要測(cè)試的分割平面是那些法線等于兩個(gè)BOX的軸向的平面。因此對(duì)于兩個(gè)BOX來說,你只需要測(cè)試4個(gè)分割平面即可。在這四個(gè)平面里,一旦發(fā)現(xiàn)一個(gè)分割平面可以分割BOX那么你就可以斷定這兩個(gè)BOX是不相交的。如果四個(gè)平面都不能分割BOX,那么這兩個(gè)BOX一定是相交的,也就是出現(xiàn)了碰撞??梢詳U(kuò)展這個(gè)算法到普通的多邊形,算法是相同的,只用需要測(cè)試的平面的數(shù)量改變了。并且分割平面在每個(gè)多邊形邊的垂直方向上又有一個(gè)法線。在下圖中,你可以看到兩個(gè)分割平面用于測(cè)試。在紅色的平面上你可以看到兩個(gè)間隔是重疊的。然而,在藍(lán)色的平面上間隔是不重疊的,因此,藍(lán)色的平面的是分割平面,因此物體是不相交的。現(xiàn)在,我們有一個(gè)算法來檢測(cè)兩個(gè)多邊形是否是相交的。代碼可以分為三個(gè)部分:a) 生成需要測(cè)試的分離軸b) 計(jì)算每一個(gè)多邊形在分離軸法線上的投影c) 檢測(cè)這些投影是否相交boolIntersect(PolygonA,PolygonB){for(I=0;I<;I++){VectorN=Vector[I].y,[I].x);if(AxisSeparatePolygons(N,A,B))returnfalse;}for(I=0;I<;I++){VectorN=Vector[i].y,[I].x);if(AxisSeparatePolygons(N,A,B))returnfalse;}returntrue;}voidCalculateInterval(VectorAxis,PolygonP,float&min,float&max){floatd=Axisdot[0];num_vertices;J=I,I++){
VectorE=[I]-[J];Axis[iNumAxis++]=Vector,;if(AxisSeparatePolygons(N,A,B))returnfalse;}for(J=B.num_vertices-1,I=0;I<;J=I,I++){
VectorE=[I]-[J];Axis[iNumAxis++]=Vector,;if(AxisSeparatePolygons(N,A,B))returnfalse;}
ormalise();N))*N理想狀態(tài)下,碰撞前后粒子的能量是相同的。但是我們可以給粒子的碰撞加入彈性系數(shù)V’=V-((1+elasticity)*(V.N))*N彈性系數(shù)的范圍為[0,1]如果為零意味著粒子將沿著平面滑動(dòng),如果為1,粒子將沒有能量損耗的彈開。同樣我們可以加入一些摩擦。如果我們沿著碰撞的法線和碰撞平面方向分解速度,我們可以同時(shí)計(jì)算彈性系數(shù)和摩擦力。這里,速度被沿著平面的法向和平面分解。彈性系數(shù)將影響沿著平面法向的響應(yīng)(Vn),摩擦力將影響速度的切向(Vt)。同樣摩擦系數(shù)的范圍為[0,1].0意味著沒有摩擦力,1意味著粒子將突然停止。Vn=(V.N)*N;Vt=V-Vn;V’=Vt*(1-friction)+Vn
*-(elasticity);對(duì)于靜摩擦力,簡單地在速度Vt小于給定的值時(shí)設(shè)置Vt為(0,0),或者設(shè)置摩擦系數(shù)稍微比1大。現(xiàn)在,計(jì)算兩個(gè)物體間的碰撞響應(yīng)。原理是相同的。然而,計(jì)算是基于物體的相對(duì)速度的,物體將象上述一樣受到影響。結(jié)果將添加到每一個(gè)物體上?,F(xiàn)在我們需要修改一下系數(shù),因?yàn)楝F(xiàn)在我們使用了相對(duì)的概念VectorV=Va-Vb;N)*N;Vt=V-Vn;if()<friction=; ||表示求模運(yùn)算。在2D中表示向量的長度??梢允褂孟旅娴墓礁鶕?jù)組成多邊形材質(zhì)的密度來計(jì)算慣量這里:P是密度,N是頂點(diǎn)數(shù),Pn是多邊形的頂點(diǎn),||..||表示求模,從上述方程中,你可以推理出計(jì)算質(zhì)量的等式。該系統(tǒng)的其它模式是處理交疊。這可以避免一個(gè)物體陷入另一個(gè)物體,因?yàn)槭褂猛屏τ?jì)算在低速的時(shí)候是非常不精確的。為了解決交疊問題,即簡單的方法是沿著碰撞法線根據(jù)碰撞深度將物體推開。當(dāng)然只有在檢測(cè)到交疊的時(shí)候才使用它。?為了使它更為精確,物體的移動(dòng)應(yīng)該依賴于它們質(zhì)量的比率,因此較輕的物體應(yīng)該移動(dòng)更多,而較重的物體移動(dòng)較少,當(dāng)然具有無窮大質(zhì)量的物體是不會(huì)移動(dòng)的。?至于摩擦力,基本的是動(dòng)態(tài)摩擦力,它將沿著物體速度的反向添加一個(gè)力,大小為||u*Jn||其中u是動(dòng)摩擦系數(shù)Jn是壓力。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具及配件企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 二零二五年度客運(yùn)車輛定制旅游專線合伙經(jīng)營合同
- 二零二五年度安置房項(xiàng)目物業(yè)管理合同協(xié)議書
- 二零二五年度美容院加盟店轉(zhuǎn)讓及管理輸出合同
- 二零二五年度健康醫(yī)療大數(shù)據(jù)合作經(jīng)營協(xié)議
- 2025年度足療養(yǎng)生館轉(zhuǎn)讓及品牌升級(jí)改造協(xié)議
- 二零二五年度房地產(chǎn)信托股份代持投資管理合同
- 二零二五年度公司股權(quán)轉(zhuǎn)讓與供應(yīng)鏈整合及優(yōu)化合同
- 二零二五年度勞動(dòng)合同法調(diào)整下企業(yè)員工解雇合同
- 二零二五年度建筑工地員工工傷賠償執(zhí)行協(xié)議
- 可下載打印的公司章程
- 《英語教師職業(yè)技能訓(xùn)練簡明教程》全冊(cè)配套優(yōu)質(zhì)教學(xué)課件
- 中藥熏洗法課件
- 本特利探頭應(yīng)用
- 城市雕塑藝術(shù)工程工程量計(jì)價(jià)清單定額2022年版
- QMR-110-00員工手部、接觸面等微生物檢驗(yàn)記錄記錄
- 2022年河北醫(yī)科大學(xué)第一醫(yī)院醫(yī)護(hù)人員招聘考試筆試題庫及答案解析
- 思想道德與法治教案第四章:明確價(jià)值要求踐行價(jià)值準(zhǔn)則
- 外陰及陰道炎癥
- 公安筆錄模板之詢問嫌疑人(書面?zhèn)鲉局伟舶讣?
- A-level項(xiàng)目介紹(課堂PPT)
評(píng)論
0/150
提交評(píng)論