查看: 2756|回复: 9

有关osgEarth viewer中LOD数量的问题

[复制链接]

该用户从未签到

发表于 2012-9-27 22:39:11 | 显示全部楼层 |阅读模式
请教一下各位:
现象:最近通过osgearth_viewer做测试发现,DatabasePager中_activePagedLODList的数目不会随着我将视角拉远而变小,states(按S键)中LOD的数目在达到300(_targetMaximumNumberOfPageLOD默认设置的是300)之前一直处于增加的状态,跟进去看了下,发现存储的都是影像的Tile,按照我的理解,在视角拉远的时候Tile应该会减少才对,可为什么LOD却只是在不停的增加直到达到它的最大值才开始删除LOD,之后LOD数目一直维持在300左右。当我将DatabasePager中的targetMaximumNumberOfPageLOD改为100时,LOD的值就在100左右徘徊,这让我感觉PagedLOD没有起作用!

问题:OSG中的PagedLOD节点究竟是在什么情况下才被删除?为何states中的LOD数目在达到targetMaximumNumberOfPageLOD之前一直处在增长状态?
DatabasePager::removeExpiredSubgraphs(const osg::FrameStamp& frameStamp)这个函数貌似是删除比targetMaximumNumberOfPageLOD数目多的结点,不知道我的理解是否有问题?

该用户从未签到

发表于 2012-9-28 11:50:11 | 显示全部楼层
俺说一下俺的理解,pagedLOD说是动态管理LOD数据,你是不是希望那些不在视野的LOD数据就立即被DatabasePager给卸载掉呢,这样才节省内存空间嘛。但事实上如您所见,在LOD数目达到targetMaximumNumberOfPageLOD之前,DatabasePager一直不释放已经加载到内存的LOD数据(虽然有些不在视野中)。我觉得这样做是有道理的,依据就是当重新需要那些不在视野范围但是已经加载过的LOD数据显示的时候,能够快速的在内存中找到,而不是去硬盘上读取。
我觉得DatabasePager 的职能类似于缓存,存储那些已经读进内存的数据以便快速再次读取,但是空间不能太大,一旦缓存满了,就需要替换了,这也就是说PagedLOD是动态加载的原因了吧。

个人理解,错了望包涵。

该用户从未签到

 楼主| 发表于 2012-10-4 10:32:14 | 显示全部楼层
wanggang8826 发表于 2012-9-28 11:50
俺说一下俺的理解,pagedLOD说是动态管理LOD数据,你是不是希望那些不在视野的LOD数据就立即被DatabasePage ...

谢谢您的回复。按照您的意思,DatabasePager 的职能只是在限定的内存空间中动态的加载或删除缓存,这样应该不会出现LOD数目长时间大于300的情况才对啊,可是我在加载模型的模型的时候发现它经常飙到700多?这种现象如果解释呢?

另外,如果DatabasePager只是这样的话,不在视野的LOD由谁删除呢,是LOD本身么?

该用户从未签到

发表于 2012-10-8 10:17:39 | 显示全部楼层
可是我在加载模型的模型的时候发现它经常飙到700多?这种现象如果解释呢?
最大的可能性是,您这700多个节点都在视野范围内,所以没有办法剔除掉。OSG不可能主动把那些您还看得见的模型踢掉的。
删除LOD的任务也是DatabasePager来完成的,当节点总数超过_targetMaximumNumberOfPageLOD之后,将不在视野范围内的节点按照时间排序,从最古老的开始删除

该用户从未签到

发表于 2012-10-8 12:40:15 | 显示全部楼层
osgearth  要想达到理想状态,要做彻底的革新的

该用户从未签到

发表于 2012-10-8 12:40:22 | 显示全部楼层
osgearth  要想达到理想状态,要做彻底的革新的

该用户从未签到

发表于 2012-10-8 12:41:19 | 显示全部楼层
其管理策略,不是一般的傻

该用户从未签到

 楼主| 发表于 2012-10-12 23:20:33 | 显示全部楼层
array 发表于 2012-10-8 10:17
最大的可能性是,您这700多个节点都在视野范围内,所以没有办法剔除掉。OSG不可能主动把那些您还看得见的模 ...

那就是说节点数在达到_targetMaximumNumberOfPagedLOD之前即使不在视野内也不会进行删除是吧?另外,除了节点在视野内这个可能性之外其他的可能性还有哪些呢?
另外,osgEarth中加载的影像tile在删除的时候应该也是通过DatabasePager来执行的吧,我觉得在osgEarth中加载的tile没有得到及时的删除。

该用户从未签到

 楼主| 发表于 2012-10-12 23:22:50 | 显示全部楼层
jack 发表于 2012-10-8 12:41
其管理策略,不是一般的傻

我现在觉得osgEarth在影像的调度上删除不够及时,暂时找不到原因,还请赐教

该用户从未签到

发表于 2012-10-17 20:08:35 | 显示全部楼层
那是"缺陷"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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