查看: 2056|回复: 10

overlay 锯齿很严重,如何消除?

[复制链接]

该用户从未签到

发表于 2013-5-21 16:55:29 | 显示全部楼层 |阅读模式
本帖最后由 victording 于 2013-5-21 16:57 编辑

各位:
      在使用OverlayNode将KML线包裹在地球表面时,线的边缘锯齿很严重,不知道如何消除。
我能想到的设置texture2D和Camera的参数都修改过了,可还是不行,都将texture大小弄成8196*8196了,还是有锯齿。
锯齿.png

核心代码如下:

                osg::Texture2D* texture = new osg::Texture2D;
                texture->setTextureSize(8196, 8196);
                texture->setInternalFormat(GL_RGBA);
                texture->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D:INEAR);
                texture->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR);
                texture->setWrap(osg::Texture2D::WRAP_S,osg::Texture2D::CLAMP_TO_BORDER);
                texture->setWrap(osg::Texture2D::WRAP_T,osg::Texture2D::CLAMP_TO_BORDER);
                texture->setWrap(osg::Texture2D::WRAP_R,osg::Texture2D::CLAMP_TO_BORDER);



                _camera = new osg::Camera;
                _camera->setName("overlay_camera");
                _camera->setClearColor(_overlayClearColor);
                _camera->setReferenceFrame(osg::Camera::ABSOLUTE_RF_INHERIT_VIEWPOINT);
                _camera->setViewport(0,0,tex_width,tex_height);
                _camera->setComputeNearFarMode(osg::CullSettings:O_NOT_COMPUTE_NEAR_FAR);
                _camera->setRenderOrder(osg::Camera:RE_RENDER);
                _camera->setRenderTargetImplementation(_renderTargetImpl);
                _camera->attach(osg::Camera::COLOR_BUFFER, overlayData->_texture.get() );

                if (_overlaySubgraph.valid())
                        _camera->addChild(_overlaySubgraph.get());

该用户从未签到

发表于 2013-5-22 16:19:31 | 显示全部楼层
OverlayNode没有实际应用的价值,它完全没考虑过地形纹理金字塔这种情形,仅仅是简单的ProjectiveTexturing方法的实现。虽然有个VIEW_DEPENDENT模式,但是我试验过这个模式目前的效率很低,远不及我自己或者osgearth所用的纹理贴敷方法

该用户从未签到

发表于 2013-5-21 17:11:29 来自手机 | 显示全部楼层
这么大的纹理,不过4096*2不应该是8192么?

该用户从未签到

 楼主| 发表于 2013-5-21 17:52:00 | 显示全部楼层
素商 发表于 2013-5-21 17:11
这么大的纹理,不过4096*2不应该是8192么?

是我搞错了,不过这不是问题的关键。

该用户从未签到

发表于 2013-5-21 18:57:32 | 显示全部楼层
  您可以考虑对显卡的硬件进行设置,比如开启N卡的FASS等采样技术试试。

该用户从未签到

发表于 2013-5-22 08:15:49 | 显示全部楼层
OverlayNode 有什么作用?这个还真没用过,楼主 给普及普及

该用户从未签到

 楼主| 发表于 2013-5-22 08:26:16 | 显示全部楼层
CWorld 发表于 2013-5-21 18:57
您可以考虑对显卡的硬件进行设置,比如开启N卡的FASS等采样技术试试。

应该不是这个原因吧,我看googleEarth的没有锯齿。我怀疑和过滤方式有关系: texture->setFilter,但所有参数都试过了,没用。经测试:当OverlayNode节点的子节点BoundSphere半径越大(也就是说矢量线面积越大)锯齿越严重。

该用户从未签到

 楼主| 发表于 2013-5-22 08:36:36 | 显示全部楼层
liuzhiyu123 发表于 2013-5-22 08:15
OverlayNode 有什么作用?这个还真没用过,楼主 给普及普及

看这个帖子:http://bbs.osgchina.org/forum.php?mod=viewthread&tid=9958

该用户从未签到

发表于 2013-5-22 08:44:47 来自手机 | 显示全部楼层
有没有设置超采样?看看osgprerender

该用户从未签到

发表于 2013-5-22 08:46:30 来自手机 | 显示全部楼层
另外googlearth的矢量绘制用的恐怕不是纹理的方法,应该是模板缓冲区的思路,可以精确到像素级的。

该用户从未签到

 楼主| 发表于 2013-5-22 14:32:17 | 显示全部楼层
素商 发表于 2013-5-22 08:46
另外googlearth的矢量绘制用的恐怕不是纹理的方法,应该是模板缓冲区的思路,可以精确到像素级的。

好,我试试模板缓冲区再说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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