游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2775|回复: 4

关于运动模拟和碰撞检测

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2004-5-6 19:32:00 | 显示全部楼层 |阅读模式
关于运动:
我现有的做法是:
每个对象(物体)都有以下成员变量:
质量
三维坐标
速度,三维矢量
加速度,三维矢量
受力,三维矢量
在一个循环里不停地更新每个对象的状态:
{
……
//变量T是这次更新与上次更新之间的时间差,单位是秒
根据速度和T计算位置坐标;
根据加速度和T计算速度;
根据受力和质量计算加速度;
……
}
那些三维矢量的计算都是分解到xyz三个轴上计算的。
这样问题就来了:
当T不够小、速度或加速度或受力太大的时候,对运动的模拟会太不精确,比如我要设置一个引力源,当物体离引力源太近时受力太大,结果物体掠过引力源位置时就回不来了。(本来想用引力源来做宇宙飞船的泊位的,这样把船慢慢开到引力源附近就能被引力拉住停稳了)
如果用这种方法模拟运动,那么在三维游戏里要进行碰撞检测的时候万一物体速度太快,从八叉树的某个节点的某个角落上穿过,那么就要检测在3个节点里是否发生了碰撞了~计算量就变大了,特别是如果客户端的机器太差,如果T太大,那么可能会一下子穿过n多的节点……

关于碰撞检测:
我现在知道怎么计算一个点是否从一个三角形的内部穿过这个三角形了,但是还不知道怎么计算物体和三角形的碰撞。但是就算知道了,即使是在八叉树里那计算量似乎也太大了啊~
不过我知道恐怕三维的碰撞检测不可能全放在服务器端了,那么该怎么做呢?
我听说过包围盒和包围球,但是觉得因为物体的形状都不会充满立方体或球体,所以有时候显示出来可能会出现没碰到墙却走不动了的情况。
另外,如果要在游戏里用冷兵器,并且要靠碰撞检测来判断是否击中,那么有什么办法减少计算量吗?这种游戏方式可行吗?


我先谢谢大家了~

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-5-6 21:17:00 | 显示全部楼层

Re:关于运动模拟和碰撞检测

我不是很明白,但是我想不需要那么模拟,只要在改变标志变量,可以驱动击中后发生的事件.

0

主题

130

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2004-5-7 10:23:00 | 显示全部楼层

Re:关于运动模拟和碰撞检测

1,第一个问题,在现在的模拟中一般对T都有要求.一般有欧拉法,中点法,龙格库塔几种方法.
SIGGRAPH有专们的教程.你从头到尾看一看,就会明白现在大概使用的方法.
http://www-2.cs.cmu.edu/~baraff/sigcourse/index.html

2,用三角形检测的也是有的,但是实在是太费时费空间,一般使用将一个物体分解成多个碰撞实体(球,BOX,圆柱,圆锥),或者是凸包的多面体.
我也写了个例子,你可以到
https://sourceforge.net/project/showfiles.php?group_id=108175&package_id=116803&release_id=236306
去下载看看,我写的比较简单,
还有
http://ode.org/
里有比较著名的开源动力学模拟引擎,可以好好研究下.

0

主题

130

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2004-5-7 10:28:00 | 显示全部楼层

Re:关于运动模拟和碰撞检测

我的例子的主页是
http://sourceforge.net/projects/greenvalley/
有兴趣的帮我顶顶.
下载在Latest File Releases 下面的连接里.

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-5-7 13:24:00 | 显示全部楼层

Re:关于运动模拟和碰撞检测

hoho~
谢谢 老孩子 ~~

我看看~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-30 18:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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