- Timestamp:
- 03/21/12 18:36:20 (14 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/src/osgTerrain/GeometryTechnique.cpp
r12597 r13041 1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield 1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield 2 2 * 3 * This library is open source and may be redistributed and/or modified under 4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or 3 * This library is open source and may be redistributed and/or modified under 4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or 5 5 * (at your option) any later version. The full license is in LICENSE file 6 6 * included with this distribution, and on the openscenegraph.org website. 7 * 7 * 8 8 * This library is distributed in the hope that it will be useful, 9 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 11 * OpenSceneGraph Public License for more details. 12 12 */ … … 35 35 setFilterWidth(0.1); 36 36 setFilterMatrixAs(GAUSSIAN); 37 37 38 38 } 39 39 … … 66 66 void GeometryTechnique::setFilterMatrix(const osg::Matrix3& matrix) 67 67 { 68 _filterMatrix = matrix; 68 _filterMatrix = matrix; 69 69 if (!_filterMatrixUniform) _filterMatrixUniform = new osg::Uniform("filterMatrix",_filterMatrix); 70 70 else _filterMatrixUniform->set(_filterMatrix); … … 97 97 { 98 98 OSG_INFO<<"Doing GeometryTechnique::init()"<<std::endl; 99 99 100 100 if (!_terrainTile) return; 101 101 … … 162 162 Locator* elevationLocator = elevationLayer ? elevationLayer->getLocator() : 0; 163 163 Locator* colorLocator = colorLayer ? colorLayer->getLocator() : 0; 164 164 165 165 Locator* masterLocator = elevationLocator ? elevationLocator : colorLocator; 166 166 if (!masterLocator) … … 169 169 return 0; 170 170 } 171 171 172 172 return masterLocator; 173 173 } … … 182 182 Locator* elevationLocator = elevationLayer ? elevationLayer->getLocator() : 0; 183 183 Locator* colorLocator = colorLayer ? colorLayer->getLocator() : 0; 184 184 185 185 if (!elevationLocator) elevationLocator = masterLocator; 186 186 if (!colorLocator) colorLocator = masterLocator; … … 188 188 osg::Vec3d bottomLeftNDC(DBL_MAX, DBL_MAX, 0.0); 189 189 osg::Vec3d topRightNDC(-DBL_MAX, -DBL_MAX, 0.0); 190 190 191 191 if (elevationLayer) 192 192 { … … 227 227 osg::Vec3d centerModel = (bottomLeftNDC + topRightNDC)*0.5; 228 228 masterLocator->convertLocalToModel(centerNDC, centerModel); 229 229 230 230 buffer._transform->setMatrix(osg::Matrix::translate(centerModel)); 231 231 232 232 return centerModel; 233 233 } … … 465 465 { 466 466 float value = 0.0f; 467 if (sampled) validValue = elevationLayer->getInterpolatedValidValue(ndc.x(), ndc.y(), value); 467 if (sampled) validValue = elevationLayer->getInterpolatedValidValue(ndc.x(), ndc.y(), value); 468 468 else validValue = elevationLayer->getValidValue(i,j,value); 469 469 ndc.z() = value*_scaleHeight; … … 784 784 unsigned int originalNumColumns = numColumns; 785 785 unsigned int originalNumRows = numRows; 786 786 787 787 numColumns = std::max((unsigned int) (float(originalNumColumns)*sqrtf(sampleRatio)), minimumNumColumns); 788 788 numRows = std::max((unsigned int) (float(originalNumRows)*sqrtf(sampleRatio)),minimumNumRows); 789 789 } 790 791 790 791 792 792 793 793 bool treatBoundariesToValidDataAsDefaultValue = _terrainTile->getTreatBoundariesToValidDataAsDefaultValue(); 794 794 OSG_INFO<<"TreatBoundariesToValidDataAsDefaultValue="<<treatBoundariesToValidDataAsDefaultValue<<std::endl; 795 795 796 796 float skirtHeight = 0.0f; 797 797 HeightFieldLayer* hfl = dynamic_cast<HeightFieldLayer*>(elevationLayer); 798 if (hfl && hfl->getHeightField()) 798 if (hfl && hfl->getHeightField()) 799 799 { 800 800 skirtHeight = hfl->getHeightField()->getSkirtHeight(); 801 801 } 802 802 803 803 bool createSkirt = skirtHeight != 0.0f; 804 804 … … 864 864 osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array(1); 865 865 (*colors)[0].set(1.0f,1.0f,1.0f,1.0f); 866 866 867 867 geometry->setColorArray(colors.get()); 868 868 geometry->setColorBinding(osg::Geometry::BIND_OVERALL); … … 1002 1002 // OSG_NOTICE<<"smallTile = "<<smallTile<<std::endl; 1003 1003 1004 osg::ref_ptr<osg::DrawElements> elements = smallTile ? 1004 osg::ref_ptr<osg::DrawElements> elements = smallTile ? 1005 1005 static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_TRIANGLES)) : 1006 1006 static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_TRIANGLES)); … … 1078 1078 osg::ref_ptr<osg::Vec3Array> normals = VNG._normals.get(); 1079 1079 1080 osg::ref_ptr<osg::DrawElements> skirtDrawElements = smallTile ? 1080 osg::ref_ptr<osg::DrawElements> skirtDrawElements = smallTile ? 1081 1081 static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 1082 1082 static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); … … 1163 1163 { 1164 1164 geometry->addPrimitiveSet(skirtDrawElements.get()); 1165 skirtDrawElements = smallTile ? 1165 skirtDrawElements = smallTile ? 1166 1166 static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 1167 1167 static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); … … 1205 1205 { 1206 1206 geometry->addPrimitiveSet(skirtDrawElements.get()); 1207 skirtDrawElements = smallTile ? 1207 skirtDrawElements = smallTile ? 1208 1208 static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 1209 1209 static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); … … 1288 1288 typedef std::map<osgTerrain::Layer*, osg::Texture*> LayerToTextureMap; 1289 1289 LayerToTextureMap layerToTextureMap; 1290 1290 1291 1291 for(unsigned int layerNum=0; layerNum<_terrainTile->getNumColorLayers(); ++layerNum) 1292 1292 { … … 1297 1297 if (switchLayer) 1298 1298 { 1299 if (switchLayer->getActiveLayer()<0 || 1299 if (switchLayer->getActiveLayer()<0 || 1300 1300 static_cast<unsigned int>(switchLayer->getActiveLayer())>=switchLayer->getNumLayers()) 1301 1301 { … … 1352 1352 1353 1353 stateset->setTextureAttributeAndModes(layerNum, texture2D, osg::StateAttribute::ON); 1354 1354 1355 1355 } 1356 1356 else if (contourLayer) … … 1369 1369 layerToTextureMap[colorLayer] = texture1D; 1370 1370 } 1371 1371 1372 1372 stateset->setTextureAttributeAndModes(layerNum, texture1D, osg::StateAttribute::ON); 1373 1373 … … 1478 1478 1479 1479 1480 if (_terrainTile->getDirty()) 1480 if (_terrainTile->getDirty()) 1481 1481 { 1482 1482 OSG_INFO<<"******* Doing init ***********"<<std::endl;
