球體彈性碰撞模擬_第1頁
球體彈性碰撞模擬_第2頁
球體彈性碰撞模擬_第3頁
球體彈性碰撞模擬_第4頁
球體彈性碰撞模擬_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、球體彈性碰撞模擬by:zh1110碰撞檢測技術(shù)是很多游戲重要的組成部分首先我們?yōu)榍蚝团鲎驳钠矫娑x兩個類型,計算時使用DX輔助庫中向量的相關(guān)函數(shù),以達(dá)到較佳性能            '球的定義Type ballpos As D3DVECTOR '位置v As D3DVECTOR '速度acc As D3DVECTOR '加速度bo As Boolean '是否掉落場外End Type'自定義平面格式(三角面)Type shdo

2、wv0 As D3DVECTOR '面法向v1 As D3DVECTOR '頂點1v2 As D3DVECTOR '頂點2v3 As D3DVECTOR '頂點3d As Single '距圓點距離End TypePublic ba(20) As ball球在未與平面發(fā)生碰撞時作平拋運(yùn)動或自由落體運(yùn)動,位置和速度的物理公式為:s=vt      v=at如果我們將系數(shù)設(shè)置為1,周期為1秒,那么每次計算速度時,只需將速度與加速度簡單的向量相加便得到結(jié)果,位置的計算也可類似處理For k = 0 To 20D

3、3DXVec3Add ba(k).v, ba(k).v, ba(k).accD3DXVec3Add ba(k).pos, ba(k).v, ba(k).posNext球與墻壁的彈性碰撞為了產(chǎn)生碰撞,首先必須必須知道球是否撞到了平面,彈性碰撞無能量損失,速度不會減慢但方向改變了,須計算反彈的方向。1根據(jù)物體的運(yùn)動規(guī)律計算物體在將渲染的一幀2判斷物體在前一幀和當(dāng)前幀時的位置與平面S的關(guān)系:如果上一幀在平面前,而當(dāng)前幀在平面后因為前后兩幀物體在平面的異側(cè),說明物體穿過了平面S。 d = D3DXVec3Dot(showed(i).v0, ba(j).pos) - showed(i).d '計

4、算當(dāng)前幀球體中心到平面的距離D3DXVec3Scale vettore3, ba(j).v, -1  '速度反向D3DXVec3Add vettore3, vettore3, ba(j).pos '計算前一幀球體中心位置d2 = D3DXVec3Dot(showed(i).v0, vettore3) - showed(i).d '計算前一幀球體中心到平面的距離If d < 4 And d2 > 4 Then    '在平面的異側(cè),4是球體半徑 判斷是否在三角形內(nèi): 物體在平面的異側(cè),但這時還不能說物體與三角形發(fā)

5、生了碰撞,因為三角形是有邊界的,還需進(jìn)一步判斷撞擊點是否在三角形三條邊范圍之內(nèi)穿過平面: 如圖,從交點到三角形的三個頂點作向量,計算相領(lǐng)向量的夾角余弦a1,a2,a3,如果夾角余弦和小于-1則點在三角形內(nèi)部,如果夾角余弦和大于-1則點在三角形外,夾角余弦的計算可通過兩個單位向量作點積。D3DXVec3Scale vettore, showed(i).v0, -dD3DXVec3Add vettore1, ba(j).pos, vettore  '計算交點D3DXVec3Subtract v0, vettore1, showed(i).v1  '交點到三個頂點

6、的向量D3DXVec3Subtract v1, vettore1, showed(i).v2D3DXVec3Subtract v2, vettore1, showed(i).v3D3DXVec3Normalize v0, v0  '計算夾角余弦需先單位化向量D3DXVec3Normalize v1, v1D3DXVec3Normalize v2, v2c0 = D3DXVec3Dot(v0, v1)  '計算相領(lǐng)向量的夾角余弦值a1,a2,a3c1 = D3DXVec3Dot(v1, v2)c2 = D3DXVec3Dot(v2, v0)If (c0 + c

7、1 + c2) < -1 Then反彈的計算: 如圖,我們將速度分解為平行于平面的分量Vx和投影到平面法向的Vy.  Vy因為受碰撞力反向變成Vy',但速度的大小不變,然后將Vy'與Vx相加就得到碰撞后的速度V'. D3DXVec3Scale vettore3, showed(i).v0, -d + 4D3DXVec3Add ba(j).pos, ba(j).pos, vettore3  '重新定義位置 D3DXVec3Cross vettore1, showed(i).v0, ba(j).v  '垂直D3DXVec3

8、Normalize vettore1, vettore1D3DXVec3Cross vettore2, showed(i).v0, vettore1  '平行于平面的單位向量 c1 = D3DXVec3Dot(vettore2, ba(j).v)  '計算Vx,Vy的長度 c2 = D3DXVec3Dot(showed(i).v0, ba(j).v)D3DXVec3Scale vettore2, vettore2, c1    '計算平行于平面的分量VxD3DXVec3Scale vettore, showed(i).v0, -c2    '計算投影到法向的Vy',負(fù)數(shù)即反向D3DXVec3Add ba(j).v, vettore, vettore2     '將Vy'與Vx相加就得到碰撞后的速度V'D3DXVec

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論