查看: 813|回复: 0

OSG3.4.0 DatabasePager::RequestQueue::takeFirst的效率问题

[复制链接]

该用户从未签到

发表于 2018-3-20 16:01:26 | 显示全部楼层 |阅读模式
使用OSG的DatabasePager和PagedLOD组合很长时间了,一直都在说加载模型慢,也一直在找模型加载代码的问题。
最近我直接把模型变成若干序列,使用windows的缓存机制放入内存,也就是说模型的加载代码就是内存到内存的对拷,按理说速度应该很快,不使用OSG,直接加载整个模型只需要3秒+的时间。

但是使用OSG,加载时间还在10S左右。

最后我发现问题在于DatabasePager::RequestQueue::takeFirst函数上。

首先,这个函数是要按优先级排序的,找最大优先级的方法很简单:线性查找

当这个列表里有上万个元素时,非常慢。

所以,是我规划场景树的方式不对吗?

那我说一下我的方式:
最开始,使用Group来把场景划分成八叉树,最末层是PagedLOD,每个负责一个单独模型的加载和LOD。全场景中会存在超过10W的PagedLOD。
后来经过读代码,发现之前可能是误用了,所以把之前的Group全部换成了PagedLOD,使其按级连方式逐层加载。但是性能不增反降。

所以像我这种使用场景,场景树应该怎么组织效率才最好?

谢谢各位大侠的无私帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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