查看: 1821|回复: 11

关于大规模建筑群的帧率问题

[复制链接]

该用户从未签到

发表于 2011-3-4 08:35:53 | 显示全部楼层 |阅读模式
本帖最后由 zjfzjf 于 2011-3-4 08:48 编辑

根据array的指点,我对建筑群做了两级LOD,建筑群分了百十块,仅一级精模osg文件就有2个G,纹理两个G 。其中较粗的一级是使用osgconv --simplify .5 对精细一级的预处理得到的,简化的不是很好。
下面是程序截图,请诸位分析一下这个程序的瓶颈在哪,系统内存的占用率显示为1.6G左右,cpu占用率14%不是很高,但是系统非常卡,帧率不到1帧。
分别是开启雾效,和关闭雾效的截图。我很奇怪,为什么视野中的模型很小,却占用那么多的资源。开启雾效情况也没有变化,请大家帮着分析一下。
2.JPG
23222.JPG

该用户从未签到

发表于 2011-3-4 08:45:59 | 显示全部楼层
您当前显示出的顶点数超过1000万个!您真的对自己的数据作了任何LOD和分块的处理吗

该用户从未签到

 楼主| 发表于 2011-3-4 08:50:39 | 显示全部楼层
是的,按照模型我导出110多块osg,然后加入pagelod作为一级LOD,
然后把模型预处理简化成文件,然后加入pagelod作为一级LOD,不知道方法对不对

该用户从未签到

发表于 2011-3-4 09:47:18 | 显示全部楼层
请给出您的节点结构,我感觉您的描述中存在问题

该用户从未签到

 楼主| 发表于 2011-3-4 12:01:11 | 显示全部楼层
感谢array的及时回复。我把代码贴上来,您看看
for(..................)
{
        osg:agedLOD* pPage= new osg::PagedLOD();
        pPage->setCenterMode( osg::PagedLOD::USER_DEFINED_CENTER );
        pPage->setCenter(osg::Vec3(X,Y,Z));
        pPage->setRadius(radius);
        //粗模作为第二级LOD,其名称规则为加上LOD2
std::string coarseFileName  = (std::string)szFilePath + "data\\LOD\\LOD2\\"+ filename;
        //设置两级LOD
        /*pPage->setFileName(0,fileName);*/
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile(coarseFileName, options.get());
        pPage->addChild(model,1500,FLT_MAX);
        pPage->setFileName(1,fileFullName);        
        pPage->setRange(1,0.0, 1500);
               rootNode->addChild(pPage);
}
rootNode->getOrCreateStateSet()->setAttributeAndModes( new osg::CullFace(osg::CullFace::BACK) );

还有就是我的模型中个别模型很大,osg文件就有三百多兆,我纳闷的是为什么加了雾效,还是那么多顶点要渲染。

该用户从未签到

发表于 2011-3-4 13:18:17 | 显示全部楼层
您的精细模型是否调入得太早了,抑或您的粗糙模型的简化效果根本就微乎其微?这些都是您需要检查的。此外您的场景似乎根本没有任何分块,这样大数据量的浏览依然不会流畅,请考虑四叉树等分块方法

此外雾效对于您的顶点数多少根本就没有帮助!

该用户从未签到

 楼主| 发表于 2011-3-4 16:03:25 | 显示全部楼层
array兄,是的我查了查,粗糙模型的简化效果确实很小,再请教一下,您说的四叉树分块就是在pagelod的基础上做是吗?是不是在osg现有调度的基础上上层再做一层调度?

该用户从未签到

发表于 2011-3-4 17:09:14 | 显示全部楼层
简单来说,差不多是这样。不过空间索引的意义还是远大于此的

该用户从未签到

 楼主| 发表于 2011-3-4 17:26:30 | 显示全部楼层
行,我学学这方面的知识,尝试做一下,再次感谢array兄的解答。

该用户从未签到

发表于 2011-3-4 18:27:22 | 显示全部楼层
呵呵,你这小小的一块,就千万点。快就怪了

该用户从未签到

 楼主| 发表于 2011-3-6 10:39:06 | 显示全部楼层
最近把四叉树相关的知识补习了一下,但是有疑问,因为现在模型是不规则分块的,而且没有粗模,怎么才能用四叉树管理呢?我实在是想不出办法怎样把建筑模型分级加入四叉树的叶节点,还请高手指点。

该用户从未签到

发表于 2011-3-6 18:33:55 | 显示全部楼层
这就是分开建立模型的好处,多快好省。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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