diff --git a/include/osgTerrain/Layer b/include/osgTerrain/Layer index 22a09aa98..51c50b38f 100644 --- a/include/osgTerrain/Layer +++ b/include/osgTerrain/Layer @@ -35,14 +35,15 @@ class OSGTERRAIN_EXPORT Layer : public osg::Object void setLocator(Locator* locator) { _locator = locator; } - Locator* getLocator() { return _locator.get(); } - const Locator* getLocator() const { return _locator.get(); } virtual unsigned int getNumColumns() const { return 0; } virtual unsigned int getNumRows() const { return 0; } + void setDefaultValue(const osg::Vec4& value) { _defaultValue = value; } + const osg::Vec4& getDefaultValue() const { return _defaultValue; } + virtual bool getValue(unsigned int /*i*/, unsigned int /*j*/, float& /*value*/) const { return false; } virtual bool getValue(unsigned int /*i*/, unsigned int /*j*/, osg::Vec2& /*value*/) const { return false; } virtual bool getValue(unsigned int /*i*/, unsigned int /*j*/, osg::Vec3& /*value*/) const { return false; } @@ -112,7 +113,8 @@ class OSGTERRAIN_EXPORT Layer : public osg::Object virtual ~Layer(); - osg::ref_ptr _locator; + osg::ref_ptr _locator; + osg::Vec4 _defaultValue; }; diff --git a/src/osgTerrain/GeometryTechnique.cpp b/src/osgTerrain/GeometryTechnique.cpp index 07a2f103e..48c827cc9 100644 --- a/src/osgTerrain/GeometryTechnique.cpp +++ b/src/osgTerrain/GeometryTechnique.cpp @@ -13,6 +13,9 @@ #include #include + +#include + #include using namespace osgTerrain; @@ -100,6 +103,14 @@ void GeometryTechnique::init() unsigned int numRows = 100; unsigned int numColumns = 100; + + if (elevationLayer) + { + numColumns = elevationLayer->getNumColumns(); + numRows = elevationLayer->getNumRows(); + } + + unsigned int numVertices = numRows * numColumns; // allocate and assign vertices @@ -129,6 +140,15 @@ void GeometryTechnique::init() { unsigned int iv = j*numColumns + i; osg::Vec3d ndc( (double)i/(double)(numColumns-1), (double)j/(double)(numColumns-1), 0.0); + + if (elevationLayer) + { + float value = 0.0f; + elevationLayer->getValue(i,j, value); + // osg::notify(osg::NOTICE)<<"i="<data(i,j); + switch(_image->getDataType()) + { + case(GL_BYTE): + value = *((const char*)data); + // osg::notify(osg::NOTICE)<<"byte "<getHeight(i,j); + return true; } bool HeightFieldLayer::getValue(unsigned int i, unsigned int j, osg::Vec2& value) const { - osg::notify(osg::NOTICE)<<"Not implemented yet"<getHeight(i,j); + value.y() = _defaultValue.y(); + return true; } bool HeightFieldLayer::getValue(unsigned int i, unsigned int j, osg::Vec3& value) const { - osg::notify(osg::NOTICE)<<"Not implemented yet"<getHeight(i,j); + value.y() = _defaultValue.y(); + value.z() = _defaultValue.z(); + return true; } bool HeightFieldLayer::getValue(unsigned int i, unsigned int j, osg::Vec4& value) const { - osg::notify(osg::NOTICE)<<"Not implemented yet"<getHeight(i,j); + value.y() = _defaultValue.y(); + value.z() = _defaultValue.z(); + value.w() = _defaultValue.w(); + return true; }