From 72554ca27e5c7ff6af5c1ce122de88ed269346fb Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 15 Dec 2005 16:30:31 +0000 Subject: [PATCH] From Jason Beverage, added option to control whether simplification of tiles is done during osgdem builds. --- applications/osgdem/osgdem.cpp | 7 +++++++ include/osgTerrain/DataSet | 5 +++++ src/osgTerrain/DataSet.cpp | 15 +++++++++------ src/osgWrappers/osgTerrain/DataSet.cpp | 3 +++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/applications/osgdem/osgdem.cpp b/applications/osgdem/osgdem.cpp index 53f12b236..ef4e0e9ca 100644 --- a/applications/osgdem/osgdem.cpp +++ b/applications/osgdem/osgdem.cpp @@ -189,6 +189,7 @@ int main( int argc, char **argv ) arguments.getApplicationUsage()->addCommandLineOption("--RGB-16","Use 16bit RGBA destination imagery"); arguments.getApplicationUsage()->addCommandLineOption("--RGBA","Use 32bit RGBA destination imagery"); arguments.getApplicationUsage()->addCommandLineOption("--max-visible-distance-of-top-level","Set the maximum visible distance that the top most tile can be viewed at"); + arguments.getApplicationUsage()->addCommandLineOption("--no-terrain-simplification",""); arguments.getApplicationUsage()->addCommandLineOption("--radius-to-max-visible-distance-ratio","Set the maximum visible distance ratio for all tiles apart from the top most tile. The maximum visuble distance is computed from the ratio * tile radius."); arguments.getApplicationUsage()->addCommandLineOption("--no-mip-mapping","Disable mip mapping of textures"); arguments.getApplicationUsage()->addCommandLineOption("--mip-mapping-hardware","Use mip mapped textures, and generate the mipmaps in hardware when available."); @@ -300,6 +301,12 @@ int main( int argc, char **argv ) dataset->setRadiusToMaxVisibleDistanceRatio(radiusToMaxVisibleDistanceRatio); } + while (arguments.read("--no_terrain_simplification") || + arguments.read("--no-terrain-simplification")) + { + dataset->setSimplifyTerrain(false); + } + std::string image_ext; while (arguments.read("--image-ext",image_ext)) { diff --git a/include/osgTerrain/DataSet b/include/osgTerrain/DataSet index 12bc6f1d1..3ea6c3a0a 100644 --- a/include/osgTerrain/DataSet +++ b/include/osgTerrain/DataSet @@ -1044,6 +1044,9 @@ class OSGTERRAIN_EXPORT DataSet : public osg::Referenced void setUseLocalTileTransform(bool flag) { _useLocalTileTransform = flag; } bool getUseLocalTileTransform() const { return _useLocalTileTransform; } + void setSimplifyTerrain(bool flag) { _simplifyTerrain = flag; } + bool getSimplifyTerrain() const { return _simplifyTerrain; } + void setDecorateGeneratedSceneGraphWithCoordinateSystemNode(bool flag) { _decorateWithCoordinateSystemNode = flag; } bool getDecorateGeneratedSceneGraphWithCoordinateSystemNode() const { return _decorateWithCoordinateSystemNode; } @@ -1159,6 +1162,8 @@ class OSGTERRAIN_EXPORT DataSet : public osg::Referenced std::string _comment; bool _writeNodeBeforeSimplification; + + bool _simplifyTerrain; osg::ref_ptr _rootNode; osg::ref_ptr _state; diff --git a/src/osgTerrain/DataSet.cpp b/src/osgTerrain/DataSet.cpp index 733a60b77..452032728 100644 --- a/src/osgTerrain/DataSet.cpp +++ b/src/osgTerrain/DataSet.cpp @@ -3023,14 +3023,15 @@ osg::Node* DataSet::DestinationTile::createPolygonal() osgDB::writeNodeFile(*geode,"NodeBeforeSimplification.osg"); } -#if 1 - unsigned int targetMaxNumVertices = 2048; - float sample_ratio = (numVertices <= targetMaxNumVertices) ? 1.0f : (float)targetMaxNumVertices/(float)numVertices; + if (_dataSet->getSimplifyTerrain()) + { + unsigned int targetMaxNumVertices = 2048; + float sample_ratio = (numVertices <= targetMaxNumVertices) ? 1.0f : (float)targetMaxNumVertices/(float)numVertices; - osgUtil::Simplifier simplifier(sample_ratio,geometry->getBound().radius()/2000.0f); + osgUtil::Simplifier simplifier(sample_ratio,geometry->getBound().radius()/2000.0f); - simplifier.simplify(*geometry, pointsToProtectDuringSimplification); // this will replace the normal vector with a new one -#endif + simplifier.simplify(*geometry, pointsToProtectDuringSimplification); // this will replace the normal vector with a new one + } osgUtil::TriStripVisitor tsv; tsv.setMinStripSize(3); @@ -3743,6 +3744,8 @@ DataSet::DataSet() _writeNodeBeforeSimplification = false; + _simplifyTerrain = true; + setEllipsoidModel(new osg::EllipsoidModel()); } diff --git a/src/osgWrappers/osgTerrain/DataSet.cpp b/src/osgWrappers/osgTerrain/DataSet.cpp index a72c6ab5b..c15beb3a0 100644 --- a/src/osgWrappers/osgTerrain/DataSet.cpp +++ b/src/osgWrappers/osgTerrain/DataSet.cpp @@ -128,6 +128,8 @@ BEGIN_OBJECT_REFLECTOR(osgTerrain::DataSet) I_Method0(osgTerrain::DataSet::MipMappingMode, getMipMappingMode); I_Method1(void, setUseLocalTileTransform, IN, bool, flag); I_Method0(bool, getUseLocalTileTransform); + I_Method1(void, setSimplifyTerrain, IN, bool, flag); + I_Method0(bool, getSimplifyTerrain); I_Method1(void, setDecorateGeneratedSceneGraphWithCoordinateSystemNode, IN, bool, flag); I_Method0(bool, getDecorateGeneratedSceneGraphWithCoordinateSystemNode); I_Method1(void, setDecorateGeneratedSceneGraphWithMultiTextureControl, IN, bool, flag); @@ -175,6 +177,7 @@ BEGIN_OBJECT_REFLECTOR(osgTerrain::DataSet) I_Property(float, MaximumVisibleDistanceOfTopLevel); I_Property(osgTerrain::DataSet::MipMappingMode, MipMappingMode); I_Property(float, RadiusToMaxVisibleDistanceRatio); + I_Property(bool, SimplifyTerrain); I_Property(float, SkirtRatio); I_Property(osg::State *, State); I_Property(osgTerrain::DataSet::TextureType, TextureType);