osgEarth的Rex引擎原理分析(一二七)rex影像层属性及其设置

本文详细分析了osgEarth的Rex引擎中影像层的相关属性及设置,包括ImageLayerOptions和TerrainLayerOptions。内容涵盖TileSourceOptions、VisibleLayerOptions以及LayerOptions的构建,并探讨了如何根据earth文件的options创建地理信息引擎节点,同时列出了一系列后续要分析的问题,涉及rex引擎的结构、功能和工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:(一二六)中问题213

<image name="mapbox_satellite" driver="xyz">
        <url>http://online2.map.bdimg.com/tile/?qt=tile&amp;x={x}&amp;y={y}&amp;z={z}&amp;styles=pl&amp;udt=20171031&amp;scaler=1&amp;p=1</url>
        <profile>global-geodetic
        	<num_tiles_wide_at_lod_0>8</num_tiles_wide_at_lod_0>
			  	<num_tiles_high_at_lod_0>8</num_tiles_high_at_lod_0>  
        </profile>            
</image>

osgEarthDrivers/earth/EarthFileSerializers2.cpp
    bool addLayer(const Config& conf, Map* map)
    {
        std::string name = conf.key();
        Layer* layer = Layer::create(name, conf);
        if (layer)
        {
            map->addLayer(layer);
        }
        return layer != 0L;
    }

ImageLayerOptions的属性及设置

osgEarth/ImageLayer.cpp
void
ImageLayerOptions::fromConfig(const Config& conf)
{
    conf.getIfSet( "nodata_image",   _noDataImageFilename );
    conf.getIfSet( "min_range",      _minRange );
    conf.getIfSet( "max_range",      _maxRange );
    conf.getIfSet( "shared",         _shared );
    conf.getIfSet( "coverage",       _coverage );
    conf.getIfSet( "feather_pixels", _featherPixels);

    if ( conf.hasValue( "transparent_color" ) )
        _transparentColor = stringToColor( conf.value( "transparent_color" ), osg::Vec4ub(0,0,0,0));

    if ( conf.hasChild("color_filters") )
    {
        _colorFilters.clear();
        ColorFilterRegistry::instance()->readChain( conf.child("color_filters"), _colorFilters );
    }

    conf.getIfSet("mag_filter","LINEAR",                _magFilter,osg::Texture::LINEAR);
    conf.getIfSet("mag_filter","LINEAR_MIPMAP_LINEAR",  _magFilter,osg::Texture::LINEAR_MIPMAP_LINEAR);
    conf.getIfSet("mag_filter","LINEAR_MIPMAP_NEAREST", _magFilter,osg::Texture::LINEAR_MIPMAP_NEAREST);
    conf.getIfSet("mag_filter","NEAREST",               _magFilter,osg::Texture::NEAREST);
    conf.getIfSet("mag_filter","NEAREST_MIPMAP_LINEAR", _magFilter,osg::Texture::NEAREST_MIPMAP_LINEAR);
    conf.getIfSet("mag_filter","NEAREST_MIPMAP_NEAREST",_magFilter,osg::Texture::NEAREST_MIPMAP_NEAREST);
    conf.getIfSet("min_filter","LINEAR",                _minFilter,osg::Texture::LINEAR);
    conf.getIfSet("min_filter","LINEAR_MIPMAP_LINEAR",  _minFilter,osg::Texture::LINEAR_MIPMAP_LINEAR);
    conf.getIfSet("min_filter","LINEAR_MIPMAP_NEAREST", _minFilter,osg::Texture::LINEAR_MIPMAP_NEAREST);
    conf.getIfSet("min_filter","NEAREST",               _minFilter,osg::Texture::NEAREST);
    conf.getIfSet("min_filter","NEAREST_MIPMAP_LINEAR", _minFilter,osg::Texture::NEAREST_MIPMAP_LINEAR);
    conf.getIfSet("min_filter","NEAREST_MIPMAP_NEAREST",_minFilter,osg::Texture::NEAREST_MIPMAP_NEAREST);

    conf.getIfSet("texture_compression", "none", _texcomp, osg::Texture::USE_IMAGE_DATA_FORMAT);
    conf.getIfSet("texture_compression", "auto", _texcomp, (osg::Texture::InternalFormatMode)~0);
    conf.getIfSet("texture_compression", "fastdxt", _texcomp, (osg::Texture::InternalFormatMode)(~0 - 1));
    //TODO add all the enums

    // uniform names
    conf.getIfSet("shared_sampler", _shareTexUniformName);
    conf.getIfSet("shared_matrix",  _shareTexMatUniformName);
}

TerrainLayerOptions的属性及设置

osgEarth/TerrainLayer.cpp
void
TerrainLayerOptions::fromConfig(const Config& conf)
{
    conf.getIfSet( "min_level", _minLevel );
    conf.getIfSet( "max_level", _maxLevel );        
    conf.getIfSet( "min_resolution", _minResolution );
    conf.getIfSet( "max_resolution", _maxResolution );
    conf.getIfSet( "max_data_level", _maxDataLevel );
    conf.getIfSet( "edge_buffer_ratio", _edgeBufferRatio);    
    conf.getIfSet( "reprojected_tilesize", _reprojectedTileSize);
    conf.getIfSet( "vdatum", _vertDatum );
    conf.getIfSet( "vsrs", _vertDatum );    // back compat
    conf.getObjIfSet( "proxy",        _proxySettings );
    conf.getIfSet("no_data_value", _noDataValue);
    conf.getIfSet("nodata_value", _noDataValue); // bac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值