查看: 930|回复: 6

osg内存问题

[复制链接]

该用户从未签到

发表于 2016-1-26 14:24:42 | 显示全部楼层 |阅读模式
请教各位大神一个问题。我有下面的一段代码:

osgViewer::Viewer viewer;
osg::Group * root = new osg::Group();
root->addChild(osgDB::readNodeFile("../../160120_80/1#宿舍二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/1#宿舍六楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/1#宿舍三楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/1#宿舍四楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/1#宿舍屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/1#宿舍五楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/1#宿舍一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/1#宿舍一楼大门.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/2#宿舍二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/2#宿舍六楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/2#宿舍三楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/2#宿舍四楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/2#宿舍屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/2#宿舍五楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/2#宿舍一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/2#宿舍一楼大门.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/3#宿舍二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/3#宿舍六楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/3#宿舍三楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/3#宿舍四楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/3#宿舍屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/3#宿舍五楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/3#宿舍一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/3#宿舍一楼大门.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/办公楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/仓库二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/仓库屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/仓库一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/地面.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/地面周边.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/候见楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/会见楼地下通道.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/会见楼二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/会见楼屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/会见楼一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/教学楼二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/教学楼三楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/教学楼四楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/教学楼屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/教学楼一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/女子监狱办公楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/十四监区.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/食堂二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/食堂屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/食堂一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/食堂一楼家具.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/树.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼二楼家具.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼三楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼三楼家具.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼四楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼四楼家具.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼五楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/习艺楼一楼家具.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/欣艺楼二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/欣艺楼二楼家具.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/欣艺楼三楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/欣艺楼一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/欣艺楼一楼家具.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/研艺楼二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/研艺楼二楼家具.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/研艺楼三楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/研艺楼四楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/研艺楼屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/研艺楼五楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/研艺楼一楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/再生堂二楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/再生堂三楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/再生堂四楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/再生堂屋顶.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/再生堂五楼.ive"));
root->addChild(osgDB::readNodeFile("../../160120_80/再生堂一楼.ive"));
osgUtil::Optimizer optimizer;
optimizer.optimize(root);
viewer.setSceneData(root);
viewer.realize();
viewer.run();

viewer.run()执行前占用内存大概500M,viewer.run()执行后占用内存达到1G多。osg的渲染会占用这么多内存吗?有什么方法可以优化吗?

该用户从未签到

 楼主| 发表于 2016-1-27 15:04:28 | 显示全部楼层
大神 快出来

该用户从未签到

发表于 2016-1-27 16:34:50 | 显示全部楼层
我也碰到这个情况,觉得是读取ive过程的内存文件,特别是纹理。只有视图渲染之后这个内存才消掉,不知道是不是跑到显存去了。

所以500M我觉得还可以接受,要么ive里的纹理分辨率弄小一点

或者不要在渲染前读取这么多模型,动态加载

该用户从未签到

 楼主| 发表于 2016-1-27 16:40:33 | 显示全部楼层
rpgpp 发表于 2016-1-27 16:34
我也碰到这个情况,觉得是读取ive过程的内存文件,特别是纹理。只有视图渲染之后这个内存才消掉,不知道是 ...

只加载数据的话,500M是可以接受的。可是一渲染,内存就飙到1G了,增加了500M的内存是为什么呢?是因为我的电脑是集成显卡,显存用的是内存吗?

该用户从未签到

发表于 2016-1-27 17:19:43 | 显示全部楼层
lawn212@163.com 发表于 2016-1-27 16:40
只加载数据的话,500M是可以接受的。可是一渲染,内存就飙到1G了,增加了500M的内存是为什么呢?是因为我 ...

集显有可能共享了计算机的内存,所以内存就涨了

该用户从未签到

发表于 2016-1-27 22:52:19 | 显示全部楼层
lawn212@163.com 发表于 2016-1-27 16:40
只加载数据的话,500M是可以接受的。可是一渲染,内存就飙到1G了,增加了500M的内存是为什么呢?是因为我 ...

应该不是,集显占用的内存是不在资源管理器里面显示的。渲染产生的500M可能是生成displaylist用的。

该用户从未签到

发表于 2016-1-29 12:40:45 | 显示全部楼层
smash 发表于 2016-1-27 22:52
应该不是,集显占用的内存是不在资源管理器里面显示的。渲染产生的500M可能是生成displaylist用的。

楼上正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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