From dbc3dbc5fad7288b9ce9b4f7f28c4555cc42d9ab Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 1 Apr 2004 13:09:05 +0000 Subject: [PATCH] Added scaling of the PagedLOD range to be relative to the radius of children. --- include/osgTerrain/DataSet | 6 +++++- src/osgTerrain/DataSet.cpp | 13 ++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/include/osgTerrain/DataSet b/include/osgTerrain/DataSet index f06c699bb..facd6aa35 100644 --- a/include/osgTerrain/DataSet +++ b/include/osgTerrain/DataSet @@ -839,7 +839,9 @@ class DataSet : public osg::Referenced void loadSources(); - + void setRadiusToMaxVisibleDistanceRatio(float ratio) { _radiusToMaxVisibleDistanceRatio = ratio; } + float getRadiusToMaxVisibleDistanceRatio() const { return _radiusToMaxVisibleDistanceRatio; } + void setVerticalScale(float verticalScale) { _verticalScale = verticalScale; } float getVerticalScale() const { return _verticalScale; } @@ -935,6 +937,8 @@ class DataSet : public osg::Referenced QuadMap _quadMap; + + float _radiusToMaxVisibleDistanceRatio; float _verticalScale; osg::ref_ptr _destinationCoordinateSystem; diff --git a/src/osgTerrain/DataSet.cpp b/src/osgTerrain/DataSet.cpp index b38aed40b..24d71c979 100644 --- a/src/osgTerrain/DataSet.cpp +++ b/src/osgTerrain/DataSet.cpp @@ -2410,7 +2410,7 @@ osg::Node* DataSet::CompositeDestination::createPagedLODScene() float farDistance = 1e8; if (tileNodes.size()==1) { - pagedLOD->addChild(tileNodes.front(),cutOffDistance,farDistance); + pagedLOD->addChild(tileNodes.front()); } else if (tileNodes.size()>1) { @@ -2421,9 +2421,13 @@ osg::Node* DataSet::CompositeDestination::createPagedLODScene() { group->addChild(*itr); } - pagedLOD->addChild(group,cutOffDistance,farDistance); + pagedLOD->addChild(group); } + cutOffDistance = pagedLOD->getBound().radius()*_dataSet->getRadiusToMaxVisibleDistanceRatio(); + + pagedLOD->setRange(0,cutOffDistance,farDistance); + pagedLOD->setFileName(1,getSubTileName()); pagedLOD->setRange(1,0,cutOffDistance); @@ -2499,6 +2503,9 @@ DataSet::DataSet() { init(); + _radiusToMaxVisibleDistanceRatio = 11.0f; + _verticalScale = 1.0f; + _convertFromGeographicToGeocentric = false; _defaultColor.set(0.5f,0.5f,1.0f,1.0f); @@ -2557,7 +2564,7 @@ DataSet::CompositeDestination* DataSet::createDestinationGraph(CompositeDestinat DataSet::CompositeDestination* destinationGraph = new DataSet::CompositeDestination(cs,extents); - destinationGraph->_maxVisibleDistance = extents.radius()*11.0f; + destinationGraph->_maxVisibleDistance = extents.radius()*getRadiusToMaxVisibleDistanceRatio(); // first create the topmost tile