游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3576|回复: 10

关于大量物体的拾取问题

[复制链接]

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-5-7 16:14:00 | 显示全部楼层 |阅读模式
我的3d场景里面有几百甚至上千个物体。一个一个去做测试速度太慢了,而且还没做具体的面测试,想通过什么方法能够一次大批量的剔除大部分物体就好办了。类似的像绘图的时候,每次都要去draw这么多物体,其实有时候有些物体在视口外面,我想可能就不需要提交的,这样应该会节省不少时间把。

22

主题

309

帖子

353

积分

中级会员

Rank: 3Rank: 3

积分
353
QQ
发表于 2008-5-7 16:33:00 | 显示全部楼层

Re:关于大量物体的拾取问题

可以将物体分组,先对每个组的包围盒做测试
也可以用四叉八叉啥的..

13

主题

113

帖子

113

积分

注册会员

Rank: 2

积分
113
发表于 2008-5-7 16:41:00 | 显示全部楼层

Re:关于大量物体的拾取问题

看你的场景数据是怎么样组织的啊

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-5-7 16:59:00 | 显示全部楼层

Re:关于大量物体的拾取问题

我听说过这些,但是具体怎么做的也没见过例子。再说如果都是运动的物体,那么是不是每次都要重新分组了?

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-5-7 17:01:00 | 显示全部楼层

Re: Re:关于大量物体的拾取问题

小学生: Re:关于大量物体的拾取问题

看你的场景数据是怎么样组织的啊


目前没别的,场景数据只有物体的坐标点,用包围球做测试。

21

主题

136

帖子

165

积分

注册会员

Rank: 2

积分
165
发表于 2008-5-7 18:11:00 | 显示全部楼层

Re:关于大量物体的拾取问题

1000一下可以这样做:
先做视锥剔除.能看到的也就几十到几百个吧?....
然后对能看到底的做射线和包围球(或者包围盒)相交测试...恩.
如果多了..就需要做空间划分了..8叉树效果不错..

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-5-7 20:11:00 | 显示全部楼层

Re:关于大量物体的拾取问题

做视锥剔除可以剔一些,但是主要问题还是一屏中存在大量物体(比如几千个)怎么办的问题,看来是非要做空间划分不可了。
我想过如果物体完全不动或者只有少数运动好做点,但是如果所有的物体都会做大幅运动的情况下怎么处理呢?每帧都生成树的话,我感觉开销不比检查每个物体小。

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2008-5-8 12:34:00 | 显示全部楼层

Re:关于大量物体的拾取问题

把物体归附到地形上.把地形裁减了物体自然也就裁减的差不多了

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2008-5-8 17:38:00 | 显示全部楼层

Re:关于大量物体的拾取问题

有种松散八叉树(loose octree)可以管理大量动态的物体。
其实最简单的就是做个三维指针数组,对场景做静态的划分。

7

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2008-5-9 19:26:00 | 显示全部楼层

Re:关于大量物体的拾取问题

松散八叉树貌似不是用来管理大量动态的物体吧
当时看那部分的时候,好象主要是为了更加精确的来处理物体,使得所有的物体都是在一个节点内,不会出现任意一个物体被分在两个节点内。
本身八叉树的组织,就已经是很耗性能的。对于很大的场景,如果一次性将场景进行划分,前期需要一定时间等待,如果是对大场景先进一个简单的细分(递归次数不要太多),然后再对前面细分好的节点进行动态的八叉树划分,可以获得一个稳定的性能。

对于大量动态物体,建议不要和八叉树挂在一起,连累到八叉树在运行过程中不断的重组,不是什么好事情。


比如几千个动态物体,什么啊,你目前见过那个游戏可以提供你几千个活动的物体都在可是范围内的。

即使真的是几千个,那么所能做的也只是一个一个的判断了,你无法确定下一次每个物体的位置在哪里

不过还是会有一些方法来加快拾取的

比如首先针对这几千个物体求一次屏幕中心到物体坐标的一条射线,首先针对这些射线进行一次判断,和拾取射线夹角小的(一定范围内),进行拾取检测,夹角较大的,不进行判断。

只是这些方法,必须有较深的数学功底才好稿出来

但是还是那句话,几千个动态物体同时可见,能避免,就避免了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 13:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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