作者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)
1F:推 F23ko:1.比较简单 2.的效率可能比较高.... 我猜 03/22 20:01
2F:推 etrexetrex:有没有可能先计算两路径的交点 03/22 23:50
3F:→ etrexetrex:再计算A物件在交点时,是否发生碰撞 03/22 23:51
4F:→ etrexetrex:再计算B物件在交点时,是否发生碰撞 03/22 23:51
5F:→ ttshaw:有时候路径没有交叉也是有碰撞的, 因为不是particle 03/23 11:18