游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10091|回复: 26

请教:多个物体在运动速度比较快的情况下的碰撞检测与

[复制链接]

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
发表于 2006-9-6 16:58:00 | 显示全部楼层 |阅读模式
最近试着做了个台球游戏,头一次接触碰撞检测,结果发现母球高速撞向一撮靠得很紧的其他球时会出现穿入现象(一盘游戏最开始那猛力的一杆最容易出现这样的问题)。经过检查,我发现碰撞的检测并没有问题,即不管多快速度,每次的第一个交点还是可以正确判断出来的。但是一旦反弹过一次之后有些球就会发生穿入。而且穿入时的速度不一定很快,就好像根本没有进行碰撞检测一样。
起初我怀疑是不是因为我按照球号顺序每次对所有球两两之间进行检测的顺序不合理所致,所以后来我采取先对全盘所有球两两碰撞检测,计算出所有的可能的碰撞所对应的时间,然后比较出最短的时间作为实际更新所有球的时间间隔。结果最后运行发现还是会出现穿入,只是发生穿入的球可能不是原来的球,而变成其他某个或某几个球。
在网上查阅的文章大多都是针对两个物体的碰撞情况,对于台球这样的物体位置密集,运动速快且情况多样,不可预测的问题实在令我感到困惑。各位做过的碰撞的高人给支个招吧,谢了先。

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2006-9-6 17:29:00 | 显示全部楼层

Re:请教:多个物体在运动速度比较快的情况下的碰撞检测

估计你的监测算法不严密

讲一下你的检测算法看看

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-9-6 18:07:00 | 显示全部楼层

Re:请教:多个物体在运动速度比较快的情况下的碰撞检测

物理帧按固定时间跑。
比如说上一帧到这一帧的间隔是1秒,你的物理运算要求固定是0.1秒,那么这一帧你就需要执行10次物理运算。

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2006-9-6 18:23:00 | 显示全部楼层

Re:请教:多个物体在运动速度比较快的情况下的碰撞检测

我的时间间隔只是一个常数 0.001f。不管现实时间过了多少,反正每桢都用着个数参与物理运算更新。感觉应该跟着个数的大小没关系吧。
我的检测算法是:
通过先计算出两球在各自移动的线段上距离小于各自半径和的时刻,然后取较小的时刻来更新球的方法。不过这只是针对两个球的,球一多我就不好说它还对不对了。

用一两个球在超快速的情况下实验过都没问题。


大家在作碰撞检测和反应的顺序上是不是有什么特定的讲究?我现在发现生生地把所有球按距离当前待测球远近顺序排成队后检测还是有问题,郁闷ing。。。

5

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2006-9-6 18:57:00 | 显示全部楼层

Re: 请教:多个物体在运动速度比较快的情况下的碰撞检测

------
sf_200696185728.jpg

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2006-9-6 19:27:00 | 显示全部楼层

Re:请教:多个物体在运动速度比较快的情况下的碰撞检测

上图是什么意思?

我猜楼上是想说发生碰撞的桢不一定结果位置就与被碰撞物体表面相切。
我考虑如果速度快时如果不把球停在相切的位置就会使碰撞有浮空感,所以我宁可减小时间间隔使所有球都进入慢动作状态也要把实际碰撞的那一桢绘出看来。

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2006-9-6 23:15:00 | 显示全部楼层

Re:请教:多个物体在运动速度比较快的情况下的碰撞检测

不是不是,你是反弹过一次后就会出现穿过现象吧?说明你没有把碰撞检测和事件触发分开,程序结构上设计的也许有问题。

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2006-9-7 09:29:00 | 显示全部楼层

Re:请教:多个物体在运动速度比较快的情况下的碰撞检测

我的碰撞检测与反应是这样安排的:
先把当前状态下所有球按照当前速度更新一桢(但不真正确定,只是将更新结果存于一个临时的地方)。然后找出所有可能的碰撞(当然这里面有很多是不会真正发生的,比如一个快速的球在其路径线段上可能和多个球有相交,但实际中只能和第一个相撞),每个可能的碰撞都对应一个小于等于标准时间间隔(就是前面按照当前速度对所有球更新一桢时所用的一个时间长)的时间长度。然后找出最短的时间长,并用它来重新从本桢开头更新所有球,然后再对刚才查出的最短时间所对应的两球进行碰撞反应。

我想这样应该没错吧?

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2006-9-7 10:02:00 | 显示全部楼层

Re:请教:多个物体在运动速度比较快的情况下的碰撞检测

多个圆球碰撞这种东西,它们随时在变。有点不好办。

他是按时间来计算速度还有碰撞。在一个时间段多次检测可能不管用。

我帮你想想,我最近两天也在做碰撞

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2006-9-7 10:05:00 | 显示全部楼层

Re:请教:多个物体在运动速度比较快的情况下的碰撞检测

preprocess 运动轨迹行不行?不过这种算法很复杂。

很类似阿帕奇系列的自动瞄准系统。先内部模拟轨迹,然后再刷时间事件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 21:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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