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="<