diff --git a/include/osgTerrain/Terrain b/include/osgTerrain/Terrain index 5cf7e448d..f36d10723 100644 --- a/include/osgTerrain/Terrain +++ b/include/osgTerrain/Terrain @@ -49,6 +49,14 @@ class OSGTERRAIN_EXPORT Terrain : public osg::CoordinateSystemNode /** Get the vertical scale hint.*/ float getVerticalScale() const { return _verticalScale; } + /** If set to true the boundaries between adjacent tiles should be equalized. + * Note, it is only possible to equalizae boundaries when the TerrainTile's contain properly assigned TileID's, + * databases built with VirtualPlanetBuilder-0.9.11 and older do not set the TileID, so databases must be + * built with later versions of VirtualPlanetBuilder to take advatange of boundary equalization. */ + void setEqualizeBoundaries(bool equalizeBoundaries); + + /** If true the boundaries between adjacent tiles will be equalized. */ + bool getEqualizeBoundaries() const { return _equalizeBoundaries; } /** Set the default policy to use when deciding whether to enable/disable blending and use of transparent bin. * Note, the Terrain::BlendingPolicy value only sets the value for the TerrainTiles it encloses for the @@ -95,6 +103,7 @@ class OSGTERRAIN_EXPORT Terrain : public osg::CoordinateSystemNode float _sampleRatio; float _verticalScale; TerrainTile::BlendingPolicy _blendingPolicy; + bool _equalizeBoundaries; mutable OpenThreads::Mutex _mutex; TerrainTileSet _terrainTileSet; diff --git a/src/osgTerrain/GeometryTechnique.cpp b/src/osgTerrain/GeometryTechnique.cpp index 0b326b865..90469c75d 100644 --- a/src/osgTerrain/GeometryTechnique.cpp +++ b/src/osgTerrain/GeometryTechnique.cpp @@ -29,8 +29,6 @@ using namespace osgTerrain; -#define NEW_COORD_CODE - GeometryTechnique::GeometryTechnique() { setFilterBias(0); @@ -880,8 +878,7 @@ void GeometryTechnique::generateGeometry(BufferData& buffer, Locator* masterLoca // VNG.populateCenter(elevationLayer, layerToTexCoordMap); -#if 1 - if (terrain) + if (terrain && terrain->getEqualizeBoundaries()) { TileID tileID = _terrainTile->getTileID(); @@ -997,7 +994,6 @@ void GeometryTechnique::generateGeometry(BufferData& buffer, Locator* masterLoca } #endif } -#endif osg::ref_ptr skirtVectors = new osg::Vec3Array((*VNG._normals)); diff --git a/src/osgTerrain/Terrain.cpp b/src/osgTerrain/Terrain.cpp index 3670dedfa..2c5a1f9ed 100644 --- a/src/osgTerrain/Terrain.cpp +++ b/src/osgTerrain/Terrain.cpp @@ -25,7 +25,8 @@ using namespace osgTerrain; Terrain::Terrain(): _sampleRatio(1.0), _verticalScale(1.0), - _blendingPolicy(TerrainTile::INHERIT) + _blendingPolicy(TerrainTile::INHERIT), + _equalizeBoundaries(false) { setNumChildrenRequiringUpdateTraversal(1); _terrainTechnique = new GeometryTechnique; @@ -36,6 +37,7 @@ Terrain::Terrain(const Terrain& ts, const osg::CopyOp& copyop): _sampleRatio(ts._sampleRatio), _verticalScale(ts._verticalScale), _blendingPolicy(ts._blendingPolicy), + _equalizeBoundaries(ts._equalizeBoundaries), _terrainTechnique(ts._terrainTechnique) { setNumChildrenRequiringUpdateTraversal(getNumChildrenRequiringUpdateTraversal()+1); @@ -71,6 +73,13 @@ void Terrain::setVerticalScale(float scale) dirtyRegisteredTiles(); } +void Terrain::setEqualizeBoundaries(bool equalizeBoundaries) +{ + if(_equalizeBoundaries == equalizeBoundaries) return; + _equalizeBoundaries = equalizeBoundaries; + dirtyRegisteredTiles(); +} + void Terrain::setBlendingPolicy(TerrainTile::BlendingPolicy policy) { if (_blendingPolicy == policy) return;