游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3794|回复: 12

【求助】游戏引擎中是如何处理物体运动的?

[复制链接]

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2009-9-3 10:26:00 | 显示全部楼层 |阅读模式
我目前使用的方式是通过计算得到变换矩阵,然后在渲染的时候将其传入显卡来实现物体的运动表现。但是这样有个问题,就是当再次进行诸如视锥提出、碰撞检测和鼠标拾取的时候,就会发生错误。 因为物体其实已经不在原来的位置了,但是物体的Mesh数据并没有变,所以还是会当做没有发生运动前处理。

后来我想干脆每次移动后直接把变换矩阵塌陷到Mesh数据中,也就是说每次运动时,对该物体的所有顶点进行变换。但不用试也可以想象的到这种方法在运动物体很多,且Mesh中顶点数量较大时会很慢。但这种方法的优点是——实现起来简单。

当然还有一个办法就是每次运动后只把物体的包围体的顶点进行变换,比如包围盒、包围球和包围Mesh。这样每次需要变换的顶点数量就会变少,但是会影响检测精度(如会影响鼠标拾取的精度)。如果使用物体的最小包围Mesh作为包围体的话,倒是可以在检测精度和处理速度上取个平衡点,不过实现起来就较为麻烦了。

我想请问一下诸位,有没有了解目前主流的游戏引擎是如何解决这个问题的?当物体运动的时候是如何处理的?
谢谢先。

4

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2009-9-3 11:13:00 | 显示全部楼层

Re: 【求助】游戏引擎中是如何处理物体运动的?

cO_olWinD: 【求助】游戏引擎中是如何处理物体运动的?

我目前使用的方式是通过计算得到变换矩阵,然后在渲染的时候将其传入显卡来实现物体的运动表现。但是这样有...


我的做法是对物体建立一个包围球,对包围球(体)进行变换,没有研究过商业引擎。

4

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2009-9-3 11:15:00 | 显示全部楼层

Re: 【求助】游戏引擎中是如何处理物体运动的?

不过我记得逐三角形的碰撞检测有另外一套方法,类似于八叉树实现。lz可以去找找相关的文章

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2009-9-3 12:06:00 | 显示全部楼层

Re:【求助】游戏引擎中是如何处理物体运动的?

好像在哪看过说doom3的引擎是用gpu来实现的像素级子弹碰撞....

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2009-9-3 14:23:00 | 显示全部楼层

Re: Re: 【求助】游戏引擎中是如何处理物体运动的?

leftnoteasy: Re: 【求助】游戏引擎中是如何处理物体运动的?

不过我记得逐三角形的碰撞检测有另外一套方法,类似于八叉树实现。lz可以去找找相关的文章


这个我倒是查过,一般都是给物体的网格建立AABB树、OBB树或者KD树等层次包围树,然后用另一个运动物体的包围体来遍历上述的层次包围树,找出发生碰撞的三角面。不过使用CPU进行计算的各种物理引擎一般都是进行的“简单几何体-三角面”级别碰撞检测,而只有使用GPU或PPU进行计算的引擎才会进行“三角面-三角面”级别的碰撞检测。

而运动物体的话,每次运动后都要更新层次包围树。但问题就是有时候更新层次包围所需要的时间还不如把所有三角面都更新了。

13

主题

312

帖子

312

积分

中级会员

Rank: 3Rank: 3

积分
312
发表于 2009-9-3 18:12:00 | 显示全部楼层

Re: Re:【求助】游戏引擎中是如何处理物体运动的?

jk20012001: Re:【求助】游戏引擎中是如何处理物体运动的?

好像在哪看过说doom3的引擎是用gpu来实现的像素级子弹碰撞....


请教一下大牛,这个原理大致是什么?


.


------------------------------------------------------------------------------------------------
欢迎访问 http://www.opengpu.org/bbs/

OpenGPU图形开源社区,聚焦各种GPU Architecture(图形处理器体系结构)以及各种Graphics Algorithm(图形算法),Open Source Rendering Engine(开源渲染器)、Open Source GPU Simulator/RTL Implement(开源GPU模拟器)的项目,欢迎访问

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2009-9-3 23:43:00 | 显示全部楼层

Re:【求助】游戏引擎中是如何处理物体运动的?

可以参考松散八叉树(loose octree)

另外推荐一个开源的物理引擎Bullet:
http://www.bulletphysics.com/wordpress/

另外推荐一本讲碰撞检测的书《Realtime Collision Detection》:
http://download.csdn.net/source/1151012

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-9-4 05:22:00 | 显示全部楼层

Re: Re: Re: 【求助】游戏引擎中是如何处理物体运动的?

cO_olWinD: Re: Re: 【求助】游戏引擎中是如何处理物体运动的?

但问题就是有时候更新层次包围所需要的时间还不如把所有三角面都更新了。


差别大了
你只看到了更新部分,而没有考虑检测部分
检测几个包围盒之间是否相交与检测成千上万个三角形之间是否相交,效率上有n个数量级的差别
http://www.cnblogs.com/clayman/archive/2009/05/17/1458971.html

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-9-4 05:27:00 | 显示全部楼层

Re: Re:【求助】游戏引擎中是如何处理物体运动的?

jk20012001: Re:【求助】游戏引擎中是如何处理物体运动的?

好像在哪看过说doom3的引擎是用gpu来实现的像素级子弹碰撞....


dx9/10 上的gpu碰撞检查大部分都是基于遮挡查询的,使用起来并不是很方便,而且不一定高效

13

主题

312

帖子

312

积分

中级会员

Rank: 3Rank: 3

积分
312
发表于 2009-9-4 09:30:00 | 显示全部楼层

Re:【求助】游戏引擎中是如何处理物体运动的?

…… 遮挡查询,那不慢到家了?延迟多大啊~ 这仅仅是活动物体很少才能这么做吧?

CUDA应该可以干这个活吧,上海/北京NV都有基于CUDA的物理引擎组。层次化的包围盒的确有必要~
.


------------------------------------------------------------------------------------------------
欢迎访问 http://www.opengpu.org/bbs/

OpenGPU图形开源社区,聚焦各种GPU Architecture(图形处理器体系结构)以及各种Graphics Algorithm(图形算法),Open Source Rendering Engine(开源渲染器)、Open Source GPU Simulator/RTL Implement(开源GPU模拟器)的项目,欢迎访问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 01:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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