查看: 3275|回复: 5

请教浏览大范围地形时通过场景筛选提高效率的问题

[复制链接]

该用户从未签到

发表于 2009-6-29 15:56:33 | 显示全部楼层 |阅读模式
在浏览大范围地形数据时,发现在某些较平的视角时(如图1),帧速率会变得很低,分析可能是这个角度下观察时,位移视景体内的地形tile数量最多,导致渲染速度变的很慢。请问有什么方法改善么?使帧速率能够提高。
我想到的方法是,在场景筛选时增加应用远裁剪面筛选,使远处的地形不被加载和渲染,同时开启雾化。代码如下所示,效果如图3。
viewer.getCamera()->setComputeNearFarMode(osg::Camera:O_NOT_COMPUTE_NEAR_FAR);
double fov, aspectRatio, zNear, zFar;
viewer.getCamera()->getProjectionMatrixAsPerspective(fov, aspectRatio, zNear, zFar);
viewer.getCamera()->setProjectionMatrixAsPerspective(fov, aspectRatio, 1, 10000);        // 远近剪裁面分别设为1和10000
viewer.getCamera()->setCullingMode(osg::CullSettings::ENABLE_ALL_CULLING);           // 开启所有筛选方式
// 开启雾化
osg::Fog* fog = new osg::Fog;
fog->setMode(osg::Fog:INEAR);
fog->setStart(5000);
fog->setEnd(10000);
fog->setColor(osg::Vec4(0.4,0.4,0.4,1));
fog->setFogCoordinateSource(osg::Fog::FRAGMENT_DEPTH);
viewer.getCamera()->getOrCreateStateSet()->setAttributeAndModes(fog);
然而从帧速率上来看,几乎没有任何的改善,请问是我的思路有问题还是具体的代码有问题?还有其他的办法么?

另外一个问题如图2,在启用自动计算远近剪裁面的情况下,由于场景中远点z值非常大,使得自动计算得到的近剪裁面值也较大,导致近处的物体处于近剪裁面以外而被OpenGL管线剪裁掉了。请问,当我的场景中即有很远的物体(如地球、天空球),又有很近的观察对象(人物)时,应该怎样设置远近剪裁面,是使用自动计算功能,还是关掉自动计算而根据实际情况自己实时修改远近剪裁面值?

[ 本帖最后由 indif 于 2009-6-29 15:57 编辑 ]
screen_shot_0_0 - 复制.jpg
screen_shot_0_1.jpg
screen_shot_0_0.jpg

该用户从未签到

发表于 2009-6-29 19:36:50 | 显示全部楼层
开启雾效是没有意义的,因为这并没有阻止场景中的对象被渲染。
我个人的做法是设置DatabasePager::setDoPreCompile(true),这样效果在低配置的机器上比较明显
此外使用四叉树等结构来管理场景时十分必要的,不然没有浏览海量数据的可能

该用户从未签到

 楼主| 发表于 2009-6-29 21:42:07 | 显示全部楼层
开启雾效只是为了使远处被裁剪掉的部分不会显得太突兀,它肯定是吃效率而不是节省效率这个毫无疑问
我以为开启远剪裁面的筛选应该能够减少渲染的地形瓦片,但是从结果来看似乎没有

VPB生成的地形数据本身就是使用四叉树管理的LOD瓦片数据,只是相机处于大致平行地面的方向时,处于可视范围内的瓦片数量达到了峰值,所以渲染速度明显比较慢,而我的目的也就是改善这种状况

打开预编译确实有效,多谢

该用户从未签到

发表于 2009-6-30 00:37:01 | 显示全部楼层
开启远近裁减面的筛选会改善地形瓦片的渲染。也许您的有些设置还不够完善

该用户从未签到

发表于 2011-4-8 18:28:36 | 显示全部楼层
我也遇到和楼主几乎一样的问题,区别是大范围地形是用osgearth实现的,还没试验DatabasePager::setDoPreCompile(true)的效果。

另外,我想问楼主远近裁减问题解决了没有,如果解决了能否分享,不胜感谢!

该用户从未签到

发表于 2011-4-10 11:28:41 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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