int main(int argc, char** argv) { osg::ArgumentParser arguments(&argc,argv); // help? if ( arguments.read("--help") ) return usage(argv[0]); osgViewer::Viewer viewer(arguments); EarthManipulator* em = new EarthManipulator(); viewer.setCameraManipulator( em ); // load an earth file, and support all or our example command-line options // and earth file <external> tags osg::Node* earth = MapNodeHelper().load( arguments, &viewer ); MapNode* mapNode = MapNode::get(earth); if (!mapNode) return usage(argv[0]); // load the model file into the local coordinate frame, which will be // +X=east, +Y=north, +Z=up. osg::Node* model = osgDB::readNodeFile("cessna.osgt.1,-1,1.scale"); if ( !model ) return usage(argv[0]); osg::Group* root = new osg::Group(); root->addChild( earth ); App app; app.srs = mapNode->getMapSRS(); app.geo = new GeoTransform(); app.geo->setTerrain( mapNode->getTerrain() ); app.pat = new osg::PositionAttitudeTransform(); app.pat->addChild( model ); app.geo->addChild( app.pat ); root->addChild( app.geo ); viewer.setSceneData( root ); viewer.getCamera()->setNearFarRatio(0.00002); viewer.getCamera()->setSmallFeatureCullingPixelSize(-1.0f); ui::ControlCanvas::getOrCreate(&viewer)->addControl( makeUI(app) ); app.apply(); em->setTetherNode( app.geo ); osgEarth::Viewpoint vp; vp.setNode( app.geo ); vp.heading()->set( -45.0, Units::DEGREES ); vp.pitch()->set( -20.0, Units::DEGREES ); vp.range()->set( model->getBound().radius()*10.0, Units::METERS ); em->setViewpoint( vp ); return viewer.run(); }
int main(int argc, char** argv) { osg::ArgumentParser arguments(&argc,argv); // help? if ( arguments.read("--help") ) return usage(argv[0]); osg::Node* model = 0L; std::string filename; if (arguments.read("--model", filename)) { model = osgDB::readRefNodeFile(filename).release(); Registry::shaderGenerator().run(model); } // create a viewer: osgViewer::Viewer viewer(arguments); // Tell the database pager to not modify the unref settings viewer.getDatabasePager()->setUnrefImageDataAfterApplyPolicy( false, false ); // install our default manipulator (do this before calling load) EarthManipulator* manip = new EarthManipulator(); viewer.setCameraManipulator(manip); // load an earth file, and support all or our example command-line options // and earth file <external> tags osg::Group* node = osgEarth::Util::MapNodeHelper().load(arguments, &viewer, createUI()); if ( node ) { viewer.getCamera()->setNearFarRatio(0.00002); viewer.getCamera()->setSmallFeatureCullingPixelSize(-1.0f); viewer.setSceneData( node ); s_app.map = MapNode::get( node )->getMap(); s_app.addTriton(); s_app.addBuoyancyTest(model); // Zoom the camera to our area of interest: Viewpoint vp; vp.heading() = 25.0f; vp.pitch() = -25; vp.range() = 400.0; vp.focalPoint() = s_app.anchor; manip->setViewpoint(vp); while(!viewer.done()) { viewer.frame(); s_app.updateBuoyancyTest(); } } else { return usage(argv[0]); } }
/** * This code example effectively duplicates the "boston.earth" sample, * demonstrating how to create a 3D city model in osgEarth. * * Run this from the tests folder. */ int main(int argc, char** argv) { osg::ArgumentParser arguments(&argc,argv); // create the map. Map* map = new Map(); // add a TMS imagery layer: TMSOptions imagery; imagery.url() = "http://readymap.org/readymap/tiles/1.0.0/22/"; map->addImageLayer( new ImageLayer("ReadyMap imagery", imagery) ); // create a feature source to load the building footprint shapefile. OGRFeatureOptions feature_opt; feature_opt.name() = "buildings"; feature_opt.url() = "../data/boston_buildings_utm19.shp"; feature_opt.buildSpatialIndex() = true; // a style for the building data: Style buildingStyle; buildingStyle.setName( "default" ); ExtrusionSymbol* extrusion = buildingStyle.getOrCreate<ExtrusionSymbol>(); extrusion->heightExpression() = NumericExpression( "3.5 * max( [story_ht_], 1 )" ); extrusion->flatten() = true; extrusion->wallStyleName() = "building-wall"; extrusion->roofStyleName() = "building-roof"; // a style for the wall textures: Style wallStyle; wallStyle.setName( "building-wall" ); SkinSymbol* wallSkin = wallStyle.getOrCreate<SkinSymbol>(); wallSkin->libraryName() = "us_resources"; wallSkin->addTag( "building" ); wallSkin->randomSeed() = 1; // a style for the rooftop textures: Style roofStyle; roofStyle.setName( "building-roof" ); SkinSymbol* roofSkin = roofStyle.getOrCreate<SkinSymbol>(); roofSkin->libraryName() = "us_resources"; roofSkin->addTag( "rooftop" ); roofSkin->randomSeed() = 1; roofSkin->isTiled() = true; // assemble a stylesheet and add our styles to it: StyleSheet* styleSheet = new StyleSheet(); styleSheet->addStyle( buildingStyle ); styleSheet->addStyle( wallStyle ); styleSheet->addStyle( roofStyle ); // load a resource library that contains the building textures. ResourceLibrary* reslib = new ResourceLibrary( "us_resources", "../data/resources/textures_us/catalog.xml" ); styleSheet->addResourceLibrary( reslib ); // set up a paging layout for incremental loading. FeatureDisplayLayout layout; layout.tileSizeFactor() = 45.0; layout.addLevel( FeatureLevel(0.0f, 20000.0f) ); // create a model layer that will render the buildings according to our style sheet. FeatureGeomModelOptions fgm_opt; fgm_opt.featureOptions() = feature_opt; fgm_opt.styles() = styleSheet; fgm_opt.layout() = layout; map->addModelLayer( new ModelLayer( "buildings", fgm_opt ) ); // initialize a viewer: osgViewer::Viewer viewer(arguments); EarthManipulator* manip = new EarthManipulator(); viewer.setCameraManipulator( manip ); // make the map scene graph: osg::Group* root = new osg::Group(); viewer.setSceneData( root ); MapNode* mapNode = new MapNode( map ); root->addChild( mapNode ); // Process cmdline args MapNodeHelper helper; helper.configureView( &viewer ); helper.parse(mapNode, arguments, &viewer, root, new LabelControl("City Demo")); // zoom to a good startup position manip->setViewpoint( Viewpoint(-71.0763, 42.34425, 0, 24.261, -21.6, 3450.0), 5.0 ); viewer.getDatabasePager()->setDoPreCompile( true ); viewer.getCamera()->addCullCallback( new AutoClipPlaneCullCallback(mapNode) ); return viewer.run(); }