v805-第五章opengl的3d圖形渲染課程16碰撞檢測_第1頁
v805-第五章opengl的3d圖形渲染課程16碰撞檢測_第2頁
v805-第五章opengl的3d圖形渲染課程16碰撞檢測_第3頁
v805-第五章opengl的3d圖形渲染課程16碰撞檢測_第4頁
v805-第五章opengl的3d圖形渲染課程16碰撞檢測_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、紋理環(huán)境幾乎所有的3D游戲都離不開碰撞檢測無論是各物體之間的碰撞檢測,還是物體與場景之間的碰撞檢測。游戲中的穿墻、掐在某個(gè)物體里面、因重力無限下落等等bug,是絕不允許出現(xiàn)的。幾乎所有的3D程序的場景或者物體都是由許多三角形組成的。碰撞檢測就是判斷物體和所有三角形間的碰撞,三角形越多碰撞計(jì)算復(fù)雜度越大。好的碰撞檢測要求人物在場景中可以平滑移動(dòng),遇到一定高度內(nèi)的臺(tái)階可以自動(dòng)上去,而過高的臺(tái)階則把人擋住,遇到斜率較小的斜坡可以上去,斜率過大則把人擋住,在各種前進(jìn)方向被擋住的情況下都要盡可能地讓人物沿合理的方向滑動(dòng)而不是被迫停下。在滿足這些要求的同時(shí)還要做到足夠精確和穩(wěn)定,防止人物在特殊情況下穿墻而

2、掉出場景。包圍球碰撞包圍盒碰撞AABB、OBB碰撞射線與平面碰撞碰撞反應(yīng)碰撞檢測的方法球是簡單的幾何形狀,用圓心和半徑就能表示一個(gè)球,因此,測試空間中兩個(gè)物體是否碰撞最簡便的方法就是包圍球。包圍球之所以簡單,還因?yàn)槲矬w不管怎么旋轉(zhuǎn),都不會(huì)出包圍球。包圍球在判斷兩個(gè)球體是否相交時(shí),只要兩個(gè)球的球心之間的距離小于半徑之和,就說明兩個(gè)球體相交。兩個(gè)球心的距離為:如果兩個(gè)球體相交:在實(shí)際的應(yīng)用中,由于開方運(yùn)算資源消耗大,因此,可以用d與r的平方進(jìn)行比較:AABB包圍盒是一個(gè)包圍物體的六面盒子,其6個(gè)面與x、y、z三個(gè)坐標(biāo)軸平行,無論物體是什么形狀,AABB包圍盒始終與坐標(biāo)軸平行,因此不存在方向(ori

3、entation)的問題。由于AABB包圍盒始終與坐標(biāo)軸平行,因此,在物體進(jìn)行轉(zhuǎn)動(dòng)時(shí),需要重新計(jì)算包圍盒。包圍盒 AABBAABB包圍盒可以由兩個(gè)對(duì)角線上的兩個(gè)頂點(diǎn)定義:amin和amax沿著坐標(biāo)軸的方向,取給定多邊形中的最大和最小頂點(diǎn),就可以形成AABB。在計(jì)算時(shí),直接比較兩個(gè)AABB的最大點(diǎn)和最小點(diǎn)的關(guān)系,在3個(gè)坐標(biāo)軸上比較最大點(diǎn)與最小點(diǎn)的分量,如果滿足條件,說明兩個(gè)AABB發(fā)生碰撞。/當(dāng)一個(gè)包圍盒的一個(gè)頂點(diǎn)在另外一個(gè)包圍盒內(nèi)部的時(shí)候即發(fā)生碰撞 if(vMax0.x vMin1.x | vMax0.y vMin1.y | vMax0.z vMax1.x | vMin0.y vMax1.y

4、| vMin0.z vMax1.z) g_vAPos.x+=0.02f; g_vBPos.x-=0.02f; 射線上的點(diǎn) = 射線的原點(diǎn)+ t * 射線的方向(t 用來描述它距離原點(diǎn)的位置,它的范圍是0, 無限遠(yuǎn)).)平面被描述為:Xn dot X = d Xn 是平面的法線,X 是平面上的一個(gè)點(diǎn),d 是平面到原點(diǎn)的距離.得到射線和平面的兩個(gè)方程:PointOnRay = Raystart + t * RaydirectionXn dot X = d如果相交,則上訴方程組有解,如下所示:Xn dot PointOnRay = d(Xn dot Raystart) + t * (Xn dot Raydirection) = d解得 t:t = (d - Xn dot Raystart) / (Xn dot Raydirection)把t帶回原方程會(huì)得到與平面的碰撞點(diǎn),如果Xn*Raydirection=0。則說明它與平面平行,則將不產(chǎn)生碰撞。如果t為負(fù)值,則說明交點(diǎn)在射線的相反方向,也不會(huì)產(chǎn)生碰撞。射線與平面碰撞為了計(jì)算對(duì)于一個(gè)靜止物體的碰撞,需要知道以下信息:

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論