查看: 1038|回复: 2

场景树节点生成问题

[复制链接]

该用户从未签到

发表于 2013-7-28 21:41:55 | 显示全部楼层 |阅读模式
我在看osg源码的时候,发现在DatabasePager:atabaseThread::run()中的“do while(!testCancel() && !_done)”一直在循环生成节点,节点生成后应该是挂在了场景树下,我的问题1是这个工作与绘制端的场景节点裁切是怎样的关系,从跟代码的过程看,感觉是场景树根据视点的移动不断生成,当试点在n级别时,run函数通过readnode方法生成当前n级瓦片的n+1级子瓦片并挂在树下,应该是为试点到达下一层级节点绘制做准备。
第二个问题是,当这些还未被绘制的节点生成后,其数据是否在绘制之前放入缓存,具体缓存的形式是如何的?是一个列表吗?列表更新的规则是什么?通过时间还是帧数来判断缓存中的数据是否已经无用?如果我现在想控制哪些层级的瓦片数据进入缓存,比如说run()中获取当前的层级是第六级,在run()中会生成当前节点对应的第七级的四个子瓦片,我对这四个子瓦片进行了处理,我不想把它们放入缓存中,换句话说,也就是在下一次试点到达此位置时(当然是很近的一段时间内),第七级的瓦片重新生成,而不是直接从缓存中调取,有没有哪位高手知道相关的类或者对象?谢谢指点!

该用户从未签到

发表于 2013-7-29 22:42:46 | 显示全部楼层
“通过时间还是帧数来判断缓存中的数据是否已经无用?”
可以看一下DatabasePager类的其他函数

节点生成后,如果提交给了场景图,剩下的由显卡完成绘制,这个过程挺快的,生成节点的过程比较慢


该用户从未签到

 楼主| 发表于 2013-7-30 09:01:14 | 显示全部楼层
ago 发表于 2013-7-29 22:42
“通过时间还是帧数来判断缓存中的数据是否已经无用?”
可以看一下DatabasePager类的其他函数

谢谢ago,我还有个疑问,节点在生成后绘制前会放入内存缓存中吧?为的是如果下一次访问到该节点时直接从内存中取,减少生成时间。那么这个内存缓存中清理掉节点的标准是什么?是跟帧数有关吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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