void TerrainEngineNode::preInitialize( const Map* map, const TerrainOptions& options ) { _map = map; // fire up a terrain utility interface _terrainInterface = new Terrain( this, map->getProfile(), map->isGeocentric(), options ); // set up the CSN values _map->getProfile()->getSRS()->populateCoordinateSystemNode( this ); // OSG's CSN likes a NULL ellipsoid to represent projected mode. if ( !_map->isGeocentric() ) this->setEllipsoidModel( NULL ); // install the proper layer composition technique: _texCompositor = new TextureCompositor( options ); // prime the compositor with pre-existing image layers: MapFrame mapf(map, Map::IMAGE_LAYERS); for( unsigned i=0; i<mapf.imageLayers().size(); ++i ) { _texCompositor->applyMapModelChange( MapModelChange( MapModelChange::ADD_IMAGE_LAYER, mapf.getRevision(), mapf.getImageLayerAt(i), i ) ); } // then register the callback so we can process further map model changes _map->addMapCallback( new TerrainEngineNodeCallbackProxy( this ) ); // enable backface culling osg::StateSet* set = getOrCreateStateSet(); //set->setAttributeAndModes( new osg::CullFace( osg::CullFace::BACK ), osg::StateAttribute::ON ); set->setMode( GL_CULL_FACE, 1 ); // elevation uniform // NOTE: wrong...this should be per-CullVisitor...consider putting in the Culling::CullUserData _cameraElevationUniform = new osg::Uniform( osg::Uniform::FLOAT, "osgearth_CameraElevation" ); _cameraElevationUniform->set( 0.0f ); set->addUniform( _cameraElevationUniform.get() ); set->getOrCreateUniform( "osgearth_ImageLayerAttenuation", osg::Uniform::FLOAT )->set( *options.attentuationDistance() ); if ( options.enableMercatorFastPath().isSet() ) { OE_INFO << LC << "Mercator fast path " << (options.enableMercatorFastPath()==true? "enabled" : "DISABLED") << std::endl; } _initStage = INIT_PREINIT_COMPLETE; }
void TerrainEngineNode::preInitialize( const Map* map, const TerrainOptions& options ) { _map = map; // set up the CSN values _map->getProfile()->getSRS()->populateCoordinateSystemNode( this ); // OSG's CSN likes a NULL ellipsoid to represent projected mode. if ( !_map->isGeocentric() ) this->setEllipsoidModel( NULL ); // install the proper layer composition technique: _texCompositor = new TextureCompositor( options ); // prime the compositor with pre-existing image layers: MapFrame mapf(map, Map::IMAGE_LAYERS); for( unsigned i=0; i<mapf.imageLayers().size(); ++i ) { _texCompositor->applyMapModelChange( MapModelChange( MapModelChange::ADD_IMAGE_LAYER, mapf.getRevision(), mapf.getImageLayerAt(i), i ) ); } // then register the callback so we can process further map model changes _map->addMapCallback( new TerrainEngineNodeCallbackProxy( this ) ); // enable backface culling osg::StateSet* set = getOrCreateStateSet(); set->setAttributeAndModes( new osg::CullFace( osg::CullFace::BACK ), osg::StateAttribute::ON ); // elevation uniform _cameraElevationUniform = new osg::Uniform( osg::Uniform::FLOAT, "osgearth_CameraElevation" ); _cameraElevationUniform->set( 0.0f ); set->addUniform( _cameraElevationUniform.get() ); set->getOrCreateUniform( "osgearth_ImageLayerAttenuation", osg::Uniform::FLOAT )->set( *options.attentuationDistance() ); _initStage = INIT_PREINIT_COMPLETE; }