From 794553700fa644ce05c1f8058361f99a11e875bf Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 19 Mar 2007 10:38:44 +0000 Subject: [PATCH] Further work on osgterrain example --- examples/osgterrain/osgterrain.cpp | 138 ++++++++--------------------- 1 file changed, 39 insertions(+), 99 deletions(-) diff --git a/examples/osgterrain/osgterrain.cpp b/examples/osgterrain/osgterrain.cpp index 8a31f4b44..865b77bc6 100644 --- a/examples/osgterrain/osgterrain.cpp +++ b/examples/osgterrain/osgterrain.cpp @@ -8,125 +8,65 @@ #include #include #include +#include #include #include #include -#include -#include - -#include +#include +#include #include -osg::Node* createEarth() + +int main(int argc, char** argv) { - osg::TessellationHints* hints = new osg::TessellationHints; - hints->setDetailRatio(5.0f); + osg::ArgumentParser arguments(&argc, argv); - - osg::ShapeDrawable* sd = new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0,0.0,0.0), osg::WGS_84_RADIUS_POLAR), hints); - - osg::Geode* geode = new osg::Geode; - geode->addDrawable(sd); - - std::string filename = osgDB::findDataFile("Images/land_shallow_topo_2048.jpg"); - geode->getOrCreateStateSet()->setTextureAttributeAndModes(0, new osg::Texture2D(osgDB::readImageFile(filename))); - - osg::CoordinateSystemNode* csn = new osg::CoordinateSystemNode; - csn->setEllipsoidModel(new osg::EllipsoidModel()); - csn->addChild(geode); - - return csn; - -} - -osgText::Text* createText(osg::EllipsoidModel* ellipsoid, double latitude, double longitude, double height, const std::string& str) -{ - double X,Y,Z; - ellipsoid->convertLatLongHeightToXYZ( osg::DegreesToRadians(latitude), osg::DegreesToRadians(longitude), height, X, Y, Z); - - - osgText::Text* text = new osgText::FadeText; - - osg::Vec3 normal = ellipsoid->computeLocalUpVector( X, Y, Z); - text->setCullCallback(new osg::ClusterCullingCallback(osg::Vec3(X,Y,Z), normal, 0.0)); - - text->setText(str); - text->setFont("fonts/arial.ttf"); - text->setPosition(osg::Vec3(X,Y,Z)); - text->setCharacterSize(300000.0f); - text->setCharacterSizeMode(osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT); - text->setAutoRotateToScreen(true); - - return text; -} - -osg::Node* createFadeText(osg::EllipsoidModel* ellipsoid) -{ - osg::Group* group = new osg::Group; - - group->getOrCreateStateSet()->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF); - - osg::Geode* geode = new osg::Geode; - group->addChild(geode); - - std::vector textList; - textList.push_back("Town"); - textList.push_back("City"); - textList.push_back("Village"); - textList.push_back("River"); - textList.push_back("Mountain"); - textList.push_back("Road"); - textList.push_back("Lake"); - - unsigned int numLat = 15; - unsigned int numLong = 20; - double latitude = 0.0; - double longitude = -100.0; - double deltaLatitude = 1.0f; - double deltaLongitude = 1.0f; - - unsigned int t = 0; - for(unsigned int i = 0; i < numLat; ++i, latitude += deltaLatitude) - { - double lgnt = longitude; - for(unsigned int j = 0; j < numLong; ++j, ++t, lgnt += deltaLongitude) - { - geode->addDrawable( createText( ellipsoid, latitude, lgnt, 0, textList[t % textList.size()]) ); - } - } - - return group; -} - - -int main(int, char**) -{ // construct the viewer. osgViewer::Viewer viewer; - viewer.getCamera()->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_PRIMITIVES); - viewer.getCamera()->setNearFarRatio(0.00001f); + double x = 0.0; + double y = 0.0; + double w = 1.0; + double h = 1.0; + + osg::ref_ptr root = new osgTerrain::TerrainNode; + + bool readParameter = false; + do + { + readParameter = false; + std::string filename; + + if (arguments.read("-x",x)) readParameter = true; + if (arguments.read("-y",y)) readParameter = true; + if (arguments.read("-w",w)) readParameter = true; + if (arguments.read("-h",h)) readParameter = true; + + if (arguments.read("--dem",filename)) + { + readParameter = true; + osg::notify(osg::NOTICE)<<"--dem "<