查看: 1786|回复: 8

请教cullvister的工作原理

[复制链接]

该用户从未签到

发表于 2010-4-15 09:52:11 | 显示全部楼层 |阅读模式
请问cullvister在筛选pagedlod节点的时候,遇到包含几个子节点的pagedlod节点,如果其center不符合筛选要求,那么是还会继续遍历其子节点,还是跳过其子节点继续遍历其他节点。提这个问题是因为如果把所有模型添加给pagedlod后,是否还有必要按照一定地理区域划分再设置节点。

该用户从未签到

发表于 2010-4-15 10:18:50 | 显示全部楼层
不会再遍历啊,LOD就是这样的

该用户从未签到

 楼主| 发表于 2010-4-16 15:49:01 | 显示全部楼层
这个到底是LOD是这样,还是cullvister是这样。如果把group作为pagedlod的父节点,cullvister就不会遍历么。个人感觉,即使是全部用node节点,虽然内存使用量大,但是作为渲染筛选的cullvister也不可能把所有node节点都渲染一遍,必定要遍历筛选。pagedlod只是把节点信息添加给databasepager,实现内存管理。

我目前的想法是,把所有子节点都用pagedlod加载并设置中心点,但是按区域划分的一层层的父接点用group,以减轻databasepager的工作量,但又不影响cullvister的工作。

以上这些都是我个人平时感觉到的,有什么不对的地方还请指出一下。

该用户从未签到

发表于 2010-4-16 16:35:29 | 显示全部楼层
CullVisitor的遍历方式是TRAVERSE_ACTIVE_CHILDREN,因此它遍历LOD时会自动选择在视野内的子节点,而不会遍历其它的子节点;对Switch,PagedLOD等节点的判断亦同此理。

如果把group作为pagedlod的父节点,cullvister就不会遍历么
您这句话似乎说得有些奇怪?PagedLOD不会影响其父节点

按区域划分的一层层的父接点用group,以减轻databasepager的工作量
不会减轻DatabasePager的工作量,不过您的设想倒是离通常的做法不远:如果“按区域划分的一层层的父节点”也用PagedLOD,那么就会减轻工作量了,因为同一时刻被载入的PagedLOD总是有限的,即,当前区域节点的所有子PagedLOD,和其它区域节点本身

该用户从未签到

 楼主| 发表于 2010-4-16 16:44:04 | 显示全部楼层
那作为区域接点的pagedlod的center是通过其子接点的center来获得,还是需要提前计算获得。

该用户从未签到

发表于 2010-4-16 16:51:09 | 显示全部楼层
PagedLOD的子节点可见范围是提前设定好的,通过这个来判断子节点是否需要被加载

该用户从未签到

 楼主| 发表于 2010-4-16 17:21:07 | 显示全部楼层
可能我没表达好,我的意思是子节点的center是有的,那么他的父节点是否需要另外设置center,还是通过其子节点的center计算获得。

该用户从未签到

 楼主| 发表于 2010-4-17 10:50:52 | 显示全部楼层
center的问题我知道了,是不需要另外计算的。
但是又遇到新问题,就是用lod->addchild(node,0,3000)以后,这个lod节点既有group信息,下面有child节点,又有rangelist信息。但如果只用addchile(node),那么rangelist里还是有信息,并且是0到0,模型也就不显示了。databasepager应该是通过child来遍历的吧,是否可以去掉rangelist呢,或者说直接用proxyNode节点呢?

该用户从未签到

发表于 2010-4-19 08:29:05 | 显示全部楼层
databasepager应该是通过child来遍历的吧,是否可以去掉rangelist呢,或者说直接用proxyNode节点呢
我不知道您到底想表达什么意思,不过看起来您的推论是没有什么道理的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表