游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3524|回复: 8

大家是怎么解决因物体运动速度较快引起的 碰撞检测 失

[复制链接]

5

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2007-10-12 00:02:00 | 显示全部楼层 |阅读模式
我是在每一帧都进行碰撞检测的,但是如果物体运行速度较快或两帧的间隔时间较长,用来进行碰撞检测的包围盒可能穿墙而过。就是第一帧的时候包围盒的位置还没碰到墙,第二帧的时候包围盒的位置已经到墙外了,由于没有刚好碰到墙时的帧所以也就没有进行碰撞检测。造成了穿墙而过的错误。

不知道大家遇到类似的问题是怎么解决的?

另:有什么好用得碰撞检测引擎推荐一下,谢了!!!!!

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2007-10-12 00:17:00 | 显示全部楼层

Re:大家是怎么解决因物体运动速度较快引起的 碰撞检测

一般会插值计算两祯的碰撞检测。

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-10-12 08:22:00 | 显示全部楼层

Re:大家是怎么解决因物体运动速度较快引起的 碰撞检测

Sweep

15

主题

32

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2007-10-12 10:23:00 | 显示全部楼层

Re:大家是怎么解决因物体运动速度较快引起的 碰撞检测

有很多计算动态碰撞的算法和文章, 你可以去参考一下
http://realtimerendering.com/int

如果不是很精确, 可以在两帧之间插值几次

5

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2007-10-13 01:07:00 | 显示全部楼层

Re:大家是怎么解决因物体运动速度较快引起的 碰撞检测

插值只能减少发生错误的几率,并不十分可靠。还有没有其它更可靠的方法?

6

主题

471

帖子

1047

积分

金牌会员

Rank: 6Rank: 6

积分
1047
发表于 2007-10-13 11:46:00 | 显示全部楼层

Re: 大家是怎么解决因物体运动速度较快引起的 碰撞检测

以物体坐标为基点,移动速度为方向,生成射线计算相交面和距离.
PhysX里有CCD可以解决这种高速移动情况下的碰撞



22

主题

144

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2007-10-13 17:45:00 | 显示全部楼层

Re:大家是怎么解决因物体运动速度较快引起的 碰撞检测

乍一看好像用什么插值什么其他的算法才可以解决。

其实这不是问题……

为了简化可以这样:
//...

objectTemp=object;

objectTemp.goto(velocity); //goto to get the next position

Rect rect=objectTemp.get_intersect_rect(); //get the collision rect

rect.left=object.get_intersect_rect().left; //extend the collision rect
objectTemp.set_intersect_rect(rect);

if(objectTemp.intersect(object1)){
   velocity=-velocity;  //bounce back hehe....
}else{
   object.goto(velocity);//go...
}
//...
在每一帧需要计算碰撞时都是先加速(到下一帧的地方),然后看是否相交,而不是先判断相交,再运动。

相当于判断两帧之间有没有东西而已,当然我上面的代码相对比较复杂效率不高,但是特好懂,所以列出,一般都看得懂吧。

我知道我有没有理解正确楼主的意思。没有的话,就当我扯淡了。


59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2007-10-14 02:24:00 | 显示全部楼层

Re:大家是怎么解决因物体运动速度较快引起的 碰撞检测

在做高精度物理模拟的时候应该用不同的计时器控制update和draw
比如1/60s调用一次draw和普通的游戏逻辑更新
对关键的物理模拟可能1/180s update一次

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2007-10-19 21:53:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-14 17:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表