查看: 15194|回复: 11

【矢量】osgEarth中添加矢量三种方式

[复制链接]

该用户从未签到

发表于 2013-7-9 09:37:24 | 显示全部楼层 |阅读模式
参考了例子osgearth_feature.cpp,数据是中国省界

【1】使用要素几何模型法将矢量作为几何模型加到earth里面
代码:
         Style style;
        LineSymbol* ls=style.getOrCreateSymbol<LineSymbol>();
        ls->stroke()->color()=Color::Yellow;
        ls->stroke()->width()=4.0f;

        OGRFeatureOptions featureOptions;
        featureOptions.url()="E:/osgEarth/osgearth2.3/data/chinashp.shp";

        FeatureGeomModelOptions geomOptions;
        geomOptions.featureOptions()=featureOptions;
        geomOptions.styles()=new StyleSheet();
        geomOptions.styles()->addStyle(style);
        geomOptions.enableLighting()=false;

        ModelLayerOptions layerOptions("china_boundaries",geomOptions);
        layerOptions.overlay()=true;
        map->addModelLayer(new ModelLayer(layerOptions));
效果图:

几何模型法

几何模型法

               当把overlay参数设为false时,受地形影响,青藏高原那块矢量线条比较虚,慢慢放大就渐渐看不清了
效果图:

几何模型法overlay=false

几何模型法overlay=false

【2】使用stencil模板法
代码:
         osg:isplaySettings::instance()->setMinimumNumStencilBits( 8 );
        Style style;
        LineSymbol* ls=style.getOrCreateSymbol<LineSymbol>();
        ls->stroke()->color()=Color::Yellow;
        ls->stroke()->width()=4.0f;
       
        OGRFeatureOptions featureOptions;
        featureOptions.url()="E:/osgEarth/osgearth2.3/data/chinashp.shp";

        FeatureStencilModelOptions stencilOptions;
                stencilOptions.featureOptions() = featureOptions;
                stencilOptions.styles() = new StyleSheet();
                stencilOptions.styles()->addStyle( style );
                stencilOptions.enableLighting() = false;
                stencilOptions.depthTestEnabled() = false;
                //ls->stroke()->width() = 0.1f;
                map->addModelLayer( new ModelLayer("my features", stencilOptions) );
效果:为什么明明是线图层的省界矢量,模板法显示出来却是面状的呢?是使用的方法不对吗?
      

模板法

模板法

【3】Agglite栅格化
代码:   Style style;
        LineSymbol* ls=style.getOrCreateSymbol<LineSymbol>();
        ls->stroke()->color()=Color::Yellow;
        ls->stroke()->width()=2.0f;

        OGRFeatureOptions featureOptions;
        featureOptions.url()="E:/osgEarth/osgearth2.3/data/chinashp.shp";

         AGGLiteOptions rasterOptions;
               rasterOptions.featureOptions() = featureOptions;
               rasterOptions.styles() = new StyleSheet();
               rasterOptions.styles()->addStyle( style );
               map->addImageLayer( new ImageLayer("my features", rasterOptions) );
效果:赶紧整体效果不是很好,栅格化好粗糙,还有个问题,怎么底图变花了呢?求助大神
      

栅格化法

栅格化法

该用户从未签到

 楼主| 发表于 2013-7-11 09:01:39 | 显示全部楼层
这是在2.3里面做的实验,请问有没有前辈做过类似的工作啊?2.4里面的相关功能有改进吗

该用户从未签到

 楼主| 发表于 2013-7-12 13:52:56 | 显示全部楼层
请问osgearth添加shp矢量数据时有没有办法把矢量数据抬高一定的距离再显示啊?

该用户从未签到

发表于 2013-9-4 16:04:41 | 显示全部楼层
您好。请问一下,我想在地球表面画一个多边形,然后对这个区域进行着色,要怎样才能实现这个功能?

该用户从未签到

发表于 2013-9-7 13:17:43 | 显示全部楼层
幻影天使 发表于 2013-9-4 16:04
您好。请问一下,我想在地球表面画一个多边形,然后对这个区域进行着色,要怎样才能实现这个功能?

osgEarthQt里面有绘制线、面的代码

该用户从未签到

发表于 2013-9-13 13:01:50 | 显示全部楼层
本帖最后由 就是那个胖子 于 2013-9-13 13:05 编辑

您好,您用真矢量直接加shp文件时,会出现闪烁的状态么?我加载之后会一直闪烁,请教下该怎么解决呢?,另外我用您帖子里第三种方法,栅格化之后不显示是什么原因啊?

该用户从未签到

 楼主| 发表于 2013-10-12 13:57:15 | 显示全部楼层
就是那个胖子 发表于 2013-9-13 13:01
您好,您用真矢量直接加shp文件时,会出现闪烁的状态么?我加载之后会一直闪烁,请教下该怎么解决呢?,另外 ...

layerOptions.overlay()=true;设为false会出现闪烁

该用户从未签到

发表于 2013-10-14 17:26:03 | 显示全部楼层
vampire_ljw 发表于 2013-10-12 13:57
layerOptions.overlay()=true;设为false会出现闪烁

谢谢,我测试的时候,overlay()好像是矢量图层的覆盖属性,true的时候也会闪,后面发现是添加矢量的时候,如果 map->addModelLayer(new ModelLayer(layerOptions))中new ModelLayer()里设置为两个参数的时候,就不闪了

该用户从未签到

发表于 2013-11-15 10:21:50 | 显示全部楼层
楼主,你的第二种方法“使用stencil模板法”的问题找到了吗?
你试试把线的宽度改一下应该就可以了

ls->stroke()->width()=4.0f;
改成
ls->stroke()->width()=0.4f;//或者0.04f

该用户从未签到

 楼主| 发表于 2013-12-13 09:32:03 | 显示全部楼层
xuruilll 发表于 2013-11-15 10:21
楼主,你的第二种方法“使用stencil模板法”的问题找到了吗?
你试试把线的宽度改一下应该就可以了

多谢,的确可以了,不过效果不是特别好,线宽从随着视点放大变的很粗,而且程序的启动速度变的很慢

该用户从未签到

发表于 2014-7-15 09:49:08 | 显示全部楼层
就是那个胖子 发表于 2013-10-14 17:26
谢谢,我测试的时候,overlay()好像是矢量图层的覆盖属性,true的时候也会闪,后面发现是添加矢量的时 ...

设置哪两个参数呢?

该用户从未签到

发表于 2014-10-27 17:29:45 | 显示全部楼层
你好,楼主,使用你上面的方法可以将矢量添加到地球上,但是当添加位置有高程的时候,这种方法添加的矢量不显示,请问是为什么?另外,矢量在放大缩小的时候出现闪烁和不全的情况该怎么处理,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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