void TerrainEngineNode::validateTerrainOptions( TerrainOptions& options ) { // make sure all the requested properties are compatible, and fall back as necessary. //const Capabilities& caps = Registry::instance()->getCapabilities(); // warn against mixing multipass technique with preemptive/sequential mode: if (options.compositingTechnique() == TerrainOptions::COMPOSITING_MULTIPASS && options.loadingPolicy()->mode() != LoadingPolicy::MODE_STANDARD ) { OE_WARN << LC << "MULTIPASS compositor is incompatible with preemptive/sequential loading policy; " << "falling back on STANDARD mode" << std::endl; options.loadingPolicy()->mode() = LoadingPolicy::MODE_STANDARD; } }
TextureCompositor::TextureCompositor(const TerrainOptions& options) : osg::Referenced( true ), _tech( options.compositingTechnique().value() ), _options( options ), _forceTech( false ) { // for debugging: if ( _tech == TerrainOptions::COMPOSITING_AUTO && ::getenv( "OSGEARTH_COMPOSITOR_TECH" ) ) { TerrainOptions::CompositingTechnique oldTech = _tech; std::string t( ::getenv( "OSGEARTH_COMPOSITOR_TECH" ) ); if ( t == "TEXTURE_ARRAY" ) _tech = TerrainOptions::COMPOSITING_TEXTURE_ARRAY; else if ( t == "MULTITEXTURE_GPU" ) _tech = TerrainOptions::COMPOSITING_MULTITEXTURE_GPU; else if ( t == "MULTIPASS" ) _tech = TerrainOptions::COMPOSITING_MULTIPASS; if ( oldTech != _tech ) _forceTech = true; } init(); }
void GlobePlugin::setupMap() { QSettings settings; QString cacheDirectory = settings.value( "cache/directory", QgsApplication::qgisSettingsDirPath() + "cache" ).toString(); TMSCacheOptions cacheOptions; cacheOptions.setPath( cacheDirectory.toStdString() ); MapOptions mapOptions; mapOptions.cache() = cacheOptions; osgEarth::Map *map = new osgEarth::Map( mapOptions ); //Default image layer GDALOptions driverOptions; driverOptions.url() = QDir::cleanPath( QgsApplication::pkgDataPath() + "/globe/world.tif" ).toStdString(); ImageLayerOptions layerOptions( "world", driverOptions ); layerOptions.cacheEnabled() = false; map->addImageLayer( new osgEarth::ImageLayer( layerOptions ) ); MapNodeOptions nodeOptions; //nodeOptions.proxySettings() = //nodeOptions.enableLighting() = false; //LoadingPolicy loadingPolicy( LoadingPolicy::MODE_SEQUENTIAL ); TerrainOptions terrainOptions; //terrainOptions.loadingPolicy() = loadingPolicy; terrainOptions.compositingTechnique() = TerrainOptions::COMPOSITING_MULTITEXTURE_FFP; nodeOptions.setTerrainOptions( terrainOptions ); // The MapNode will render the Map object in the scene graph. mMapNode = new osgEarth::MapNode( map, nodeOptions ); //prefill cache if ( !QFile::exists( cacheDirectory + "/worldwind_srtm" ) ) { copyFolder( QgsApplication::pkgDataPath() + "/globe/data/worldwind_srtm", cacheDirectory + "/globe/worldwind_srtm" ); } mRootNode = new osg::Group(); mRootNode->addChild( mMapNode ); // Add layers to the map layersChanged(); // model placement utils mElevationManager = new osgEarth::Util::ElevationManager( mMapNode->getMap() ); mElevationManager->setTechnique( osgEarth::Util::ElevationManager::TECHNIQUE_GEOMETRIC ); mElevationManager->setMaxTilesToCache( 50 ); mObjectPlacer = new osgEarth::Util::ObjectPlacer( mMapNode ); // place 3D model on point layer if ( mSettingsDialog.modelLayer() && !mSettingsDialog.modelPath().isEmpty() ) { osg::Node* model = osgDB::readNodeFile( mSettingsDialog.modelPath().toStdString() ); if ( model ) { QgsVectorLayer* layer = mSettingsDialog.modelLayer(); QgsAttributeList fetchAttributes; layer->select( fetchAttributes ); //TODO: select only visible features QgsFeature feature; while ( layer->nextFeature( feature ) ) { QgsPoint point = feature.geometry()->asPoint(); placeNode( model, point.y(), point.x() ); } } } }
void GlobePlugin::setupMap() { QSettings settings; /* QString cacheDirectory = settings.value( "cache/directory", QgsApplication::qgisSettingsDirPath() + "cache" ).toString(); TMSCacheOptions cacheOptions; cacheOptions.setPath( cacheDirectory.toStdString() ); */ MapOptions mapOptions; //mapOptions.cache() = cacheOptions; osgEarth::Map *map = new osgEarth::Map( mapOptions ); //Default image layer /* GDALOptions driverOptions; driverOptions.url() = QDir::cleanPath( QgsApplication::pkgDataPath() + "/globe/world.tif" ).toStdString(); ImageLayerOptions layerOptions( "world", driverOptions ); map->addImageLayer( new osgEarth::ImageLayer( layerOptions ) ); */ TMSOptions imagery; imagery.url() = "http://readymap.org/readymap/tiles/1.0.0/7/"; map->addImageLayer( new ImageLayer( "Imagery", imagery ) ); MapNodeOptions nodeOptions; //nodeOptions.proxySettings() = //nodeOptions.enableLighting() = false; //LoadingPolicy loadingPolicy( LoadingPolicy::MODE_SEQUENTIAL ); TerrainOptions terrainOptions; //terrainOptions.loadingPolicy() = loadingPolicy; terrainOptions.compositingTechnique() = TerrainOptions::COMPOSITING_MULTITEXTURE_FFP; //terrainOptions.lodFallOff() = 6.0; nodeOptions.setTerrainOptions( terrainOptions ); // The MapNode will render the Map object in the scene graph. mMapNode = new osgEarth::MapNode( map, nodeOptions ); mRootNode = new osg::Group(); mRootNode->addChild( mMapNode ); // Add layers to the map imageLayersChanged(); elevationLayersChanged(); // model placement utils #ifdef HAVE_OSGEARTH_ELEVATION_QUERY #else mElevationManager = new osgEarth::Util::ElevationManager( mMapNode->getMap() ); mElevationManager->setTechnique( osgEarth::Util::ElevationManager::TECHNIQUE_GEOMETRIC ); mElevationManager->setMaxTilesToCache( 50 ); mObjectPlacer = new osgEarth::Util::ObjectPlacer( mMapNode ); // place 3D model on point layer if ( mSettingsDialog->modelLayer() && !mSettingsDialog->modelPath().isEmpty() ) { osg::Node* model = osgDB::readNodeFile( mSettingsDialog->modelPath().toStdString() ); if ( model ) { QgsVectorLayer* layer = mSettingsDialog->modelLayer(); QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( QgsAttributeList() ) ); //TODO: select only visible features QgsFeature feature; while ( fit.nextFeature( feature ) ) { QgsPoint point = feature.geometry()->asPoint(); placeNode( model, point.y(), point.x() ); } } } #endif }