From 1519d0d546abc7aa38f34b533c84f9ac31f9eb8f Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 27 May 2008 13:11:47 +0000 Subject: [PATCH] From John Vidar Larring, "Added vertical scale as a property of osgTerrain::Terrain. Lets you configure vertical scale when initializing the terrain model. E.g: osgTerrain::Terrain* terrain = findTopMostNodeOfType(model.get()); if (!terrain) { terrain = new osgTerrain::Terrain; terrain->addChild(model.get()); terrain->setVerticalScale(2.0f); model = terrain; } viewerWindow->setSceneData(model.get()); " --- include/osgTerrain/Terrain | 21 +++++++++++++++++++-- src/osgTerrain/GeometryTechnique.cpp | 6 +++--- src/osgTerrain/Terrain.cpp | 25 +++++++++++++++++++++++-- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/include/osgTerrain/Terrain b/include/osgTerrain/Terrain index 8374161ba..9186afd0c 100644 --- a/include/osgTerrain/Terrain +++ b/include/osgTerrain/Terrain @@ -38,11 +38,25 @@ class OSGTERRAIN_EXPORT Terrain : public osg::Group /** Set the sample ratio hint that TerrainTile should use when building geometry. * Defaults to 1.0, which means use all original sample points.*/ - void setSampleRatio(float ratio) { _sampleRatio = ratio; } + void setSampleRatio(float ratio) + { + _sampleRatio = ratio; + dirtyRegisteredTiles(); + } /** Get the sample ratio hint.*/ float getSampleRatio() const { return _sampleRatio; } - + + + /** Set the vertical scale hint.*/ + void setVerticalScale(float scale) + { + _verticalScale = scale; + dirtyRegisteredTiles(); + } + + /** Get the vertical scale hint.*/ + float getVerticalScale() const { return _verticalScale; } /** Get the TerrainTile for a given TileID.*/ TerrainTile* getTile(const TileID& tileID); @@ -56,6 +70,8 @@ class OSGTERRAIN_EXPORT Terrain : public osg::Group friend class TerrainTile; + void dirtyRegisteredTiles(); + void registerTerrainTile(TerrainTile* tile); void unregisterTerrainTile(TerrainTile* tile); @@ -63,6 +79,7 @@ class OSGTERRAIN_EXPORT Terrain : public osg::Group typedef std::set< TerrainTile* > TerrainTileSet; float _sampleRatio; + float _verticalScale; mutable OpenThreads::Mutex _mutex; TerrainTileSet _terrainTileSet; diff --git a/src/osgTerrain/GeometryTechnique.cpp b/src/osgTerrain/GeometryTechnique.cpp index 4b789e60a..62e1527d6 100644 --- a/src/osgTerrain/GeometryTechnique.cpp +++ b/src/osgTerrain/GeometryTechnique.cpp @@ -278,7 +278,7 @@ void GeometryTechnique::generateGeometry(Locator* masterLocator, const osg::Vec3 float minHeight = 0.0; - float scaleHeight = 1.0; + float scaleHeight = _terrainTile->getTerrain() ? _terrainTile->getTerrain()->getVerticalScale() : 1.0f; // allocate and assign tex coords typedef std::pair< osg::ref_ptr, Locator* > TexCoordLocatorPair; @@ -341,7 +341,7 @@ void GeometryTechnique::generateGeometry(Locator* masterLocator, const osg::Vec3 float value = 0.0f; validValue = elevationLayer->getValidValue(i_equiv,j_equiv, value); // osg::notify(osg::INFO)<<"i="<