作者ttshaw (InLivingEveryday)
看板GameDesign
標題Re: [程式] 關於射擊遊戲子彈與怪物碰撞的運算量
時間Mon Mar 22 11:43:55 2010
碰撞的演算法有分兩種:
1. discrete
2. continuous
你說的問題很容易發生在discrete collision detection(DCD)上
通常叫做tunnel effect, 很常發生在高速物體對soup(triangle mesh)
之間的碰狀, 因為soup是沒有厚度的
為了解決這個問題有兩個辦法
1. 在單一frame作多次碰撞, 讓delta time(dt)變小, dt變小
同樣的速度下位移量也變小. 缺點是計算量也變大
2. 用continuous collision detection(CCD)
CCD的原理是把物體的collision沿著移動方向擴張
但是目前常用(realtime)的CCD只能處理線性移動
轉動沒有辦法處理
剩下的就是運用的技巧了.
※ 引述《F23ko (純潔)》之銘言:
: 借標題問個問題
: 假設有高速移動的炮彈 (30像素/frame 以上 差不多0.3秒穿越螢幕)
: 對著另一高速物件射擊
: 要怎麼樣才能有效率又保有正確性的計算碰撞呢?
: 因為,在兩個frame間,物體的位置變化很大
: 用傳統的畫方格計算,會很容易漏掉
: 漏掉的狀況:
: 理論上應該要撞到,但每個frame的判斷都是沒撞到
: ◎ frame2
: ↑
: │
: ●──┼─→●frame2
: frame1│
: │
: ◎frame1
: 我自己想兩個方法
: 1.把每秒的計算次數調高,但繪圖維持每秒60frame不變
: 2.數學法,把移動路徑算出來,再計算有沒有重疊
: 但都覺得可能會出問題....
: 請問一般狀況下,處理高速碰撞的話,都怎麼解決?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.139.157
※ 編輯: ttshaw 來自: 220.128.139.157 (03/22 12:02)
推 F23ko:1.比較簡單 2.的效率可能比較高.... 我猜 03/22 20:01
推 etrexetrex:有沒有可能先計算兩路徑的交點 03/22 23:50
→ etrexetrex:再計算A物件在交點時,是否發生碰撞 03/22 23:51
→ etrexetrex:再計算B物件在交點時,是否發生碰撞 03/22 23:51
→ ttshaw:有時候路徑沒有交叉也是有碰撞的, 因為不是particle 03/23 11:18