WS30: Apply correct technique to top-leve tile.
This commit is contained in:
parent
fd0e7ac2d8
commit
bf62554da9
@ -993,26 +993,34 @@ struct OSGOptimizePolicy : public OptimizeModelPolicy {
|
|||||||
CleanTechniqueVisitor ctv;
|
CleanTechniqueVisitor ctv;
|
||||||
optimized->accept(ctv);
|
optimized->accept(ctv);
|
||||||
|
|
||||||
|
SGSceneFeatures* features = SGSceneFeatures::instance();
|
||||||
|
|
||||||
// Adjust the LOD ranges as required.
|
// Adjust the LOD ranges as required.
|
||||||
double rangeFactor = SGSceneFeatures::instance()->getVPBRangeFactor();
|
double rangeFactor = features->getVPBRangeFactor();
|
||||||
double maxRange = SGSceneFeatures::instance()->getVPBMaxRange();
|
double maxRange = features->getVPBMaxRange();
|
||||||
AdjustLODVisitor alv = AdjustLODVisitor(rangeFactor, maxRange);
|
AdjustLODVisitor alv = AdjustLODVisitor(rangeFactor, maxRange);
|
||||||
optimized->accept(alv);
|
optimized->accept(alv);
|
||||||
|
|
||||||
osg::ref_ptr<osgTerrain::Terrain> terrain = findTopMostNodeOfType<osgTerrain::Terrain>(optimized.get());
|
osg::ref_ptr<osgTerrain::Terrain> terrain = findTopMostNodeOfType<osgTerrain::Terrain>(optimized.get());
|
||||||
|
osg::ref_ptr<osgTerrain::TerrainTile> terrainTile = findTopMostNodeOfType<osgTerrain::TerrainTile>(optimized.get());
|
||||||
|
|
||||||
if (terrain != NULL) {
|
if (terrain != NULL) {
|
||||||
// Top level
|
// Top level. This is likely to have the default GeometryTechnique already assigned which we need to replace with our own
|
||||||
terrain->setSampleRatio(1.0);
|
terrain->setSampleRatio(features->getVPBSampleRatio());
|
||||||
terrain->setVerticalScale(1.0);
|
terrain->setVerticalScale(features->getVPBVerticalScale());
|
||||||
terrain->setTerrainTechniquePrototype(new VPBTechnique(sgopt));
|
terrain->setTerrainTechniquePrototype(new VPBTechnique(sgopt));
|
||||||
|
if (terrainTile != NULL) {
|
||||||
|
terrainTile->setTerrainTechnique(new VPBTechnique(sgopt));
|
||||||
|
terrainTile->setDirty(true);
|
||||||
|
} else {
|
||||||
|
SG_LOG(SG_TERRAIN, SG_ALERT, "VPB TerrainTile not found");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// no Terrain node present insert one above the loaded model.
|
// no Terrain node present insert one above the loaded model.
|
||||||
terrain = new osgTerrain::Terrain;
|
terrain = new osgTerrain::Terrain;
|
||||||
terrain->setSampleRatio(1.0);
|
terrain->setSampleRatio(features->getVPBSampleRatio());
|
||||||
terrain->setVerticalScale(1.0);
|
terrain->setVerticalScale(features->getVPBVerticalScale());
|
||||||
terrain->setTerrainTechniquePrototype(new VPBTechnique(sgopt));
|
terrain->setTerrainTechniquePrototype(new VPBTechnique(sgopt));
|
||||||
//SG_LOG(SG_TERRAIN, SG_ALERT, "Creating Terrain Node for " << fileName);
|
|
||||||
|
|
||||||
// if CoordinateSystemNode is present copy it's contents into the Terrain, and discard it.
|
// if CoordinateSystemNode is present copy it's contents into the Terrain, and discard it.
|
||||||
osg::CoordinateSystemNode* csn = findTopMostNodeOfType<osg::CoordinateSystemNode>(optimized.get());
|
osg::CoordinateSystemNode* csn = findTopMostNodeOfType<osg::CoordinateSystemNode>(optimized.get());
|
||||||
|
Loading…
Reference in New Issue
Block a user