From 6e854d04c7924335584c889d102187d4f9e99f7a Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 6 Apr 2004 16:01:05 +0000 Subject: [PATCH] =?UTF-8?q?Fixes=20from=20Per=20M=C3=A5nsson=20for=20Win32?= =?UTF-8?q?=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/osgTerrain/DataSet | 4 +++- src/osgTerrain/DataSet.cpp | 44 +++++++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/include/osgTerrain/DataSet b/include/osgTerrain/DataSet index 145f5d718..3c8155829 100644 --- a/include/osgTerrain/DataSet +++ b/include/osgTerrain/DataSet @@ -26,10 +26,12 @@ #include +#include + namespace osgTerrain { -class DataSet : public osg::Referenced +class OSGTERRAIN_EXPORT DataSet : public osg::Referenced { public: diff --git a/src/osgTerrain/DataSet.cpp b/src/osgTerrain/DataSet.cpp index 972aa1b4e..ed6c9e578 100644 --- a/src/osgTerrain/DataSet.cpp +++ b/src/osgTerrain/DataSet.cpp @@ -59,13 +59,15 @@ CoordinateSystemType getCoordinateSystemType(const osgTerrain::CoordinateSystem* OGRSpatialReference lhsSR; lhsSR.importFromWkt(&importString); - free(projection_string); - + std::cout<<"getCoordinateSystemType("< n = new osg::Vec3Array(numVertices); // must use ref_ptr so the array isn't removed when smooothvisitor is used float skirtRatio = 0.01f; osg::Matrixd localToWorld; @@ -2030,7 +2031,7 @@ osg::Node* DataSet::DestinationTile::createPolygonal() } // note normal will need rotating. - if (n) (*n)[vi] = grid->getNormal(c,r); + if (n.valid()) (*(n.get()))[vi] = grid->getNormal(c,r); t[vi].x() = (c==numColumns-1)? 1.0f : (float)(c)/(float)(numColumns-1); t[vi].y() = (r==numRows-1)? 1.0f : (float)(r)/(float)(numRows-1); @@ -2042,9 +2043,9 @@ osg::Node* DataSet::DestinationTile::createPolygonal() //geometry->setUseDisplayList(false); geometry->setVertexArray(&v); - if (n) + if (n.valid()) { - geometry->setNormalArray(n); + geometry->setNormalArray(n.get()); geometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); } @@ -2091,8 +2092,14 @@ osg::Node* DataSet::DestinationTile::createPolygonal() } } +#if 1 osgUtil::SmoothingVisitor sv; - sv.smooth(*geometry); + sv.smooth(*geometry); // this will replace the normal vector with a new one + + // now we have to reassign the normals back to the orignal pointer. + n = geometry->getNormalArray(); + if (n.valid() && n->size()!=numVertices) n->resize(numVertices); +#endif if (numVerticesInSkirt>0) { @@ -2107,7 +2114,7 @@ osg::Node* DataSet::DestinationTile::createPolygonal() skirtDrawElements[ei++] = (r)*numColumns+c; skirtDrawElements[ei++] = vi; v[vi] = v[(r)*numColumns+c]+skirtVector; - if (n) (*n)[vi] = (*n)[r*numColumns+c]; + if (n.valid()) (*n)[vi] = (*n)[r*numColumns+c]; t[vi++] = t[(r)*numColumns+c]; } // create right skirt vertices @@ -2117,7 +2124,7 @@ osg::Node* DataSet::DestinationTile::createPolygonal() skirtDrawElements[ei++] = (r)*numColumns+c; skirtDrawElements[ei++] = vi; v[vi] = v[(r)*numColumns+c]+skirtVector; - if (n) (*n)[vi] = (*n)[(r)*numColumns+c]; + if (n.valid()) (*n)[vi] = (*n)[(r)*numColumns+c]; t[vi++] = t[(r)*numColumns+c]; } // create top skirt vertices @@ -2127,7 +2134,7 @@ osg::Node* DataSet::DestinationTile::createPolygonal() skirtDrawElements[ei++] = (r)*numColumns+c; skirtDrawElements[ei++] = vi; v[vi] = v[(r)*numColumns+c]+skirtVector; - if (n) (*n)[vi] = (*n)[(r)*numColumns+c]; + if (n.valid()) (*n)[vi] = (*n)[(r)*numColumns+c]; t[vi++] = t[(r)*numColumns+c]; } // create left skirt vertices @@ -2137,12 +2144,19 @@ osg::Node* DataSet::DestinationTile::createPolygonal() skirtDrawElements[ei++] = (r)*numColumns+c; skirtDrawElements[ei++] = vi; v[vi] = v[(r)*numColumns+c]+skirtVector; - if (n) (*n)[vi] = (*n)[(r)*numColumns+c]; + if (n.valid()) (*n)[vi] = (*n)[(r)*numColumns+c]; t[vi++] = t[(r)*numColumns+c]; } skirtDrawElements[ei++] = 0; skirtDrawElements[ei++] = firstSkirtVertexIndex; - } + } + + if (n.valid()) + { + geometry->setNormalArray(n.get()); + geometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); + } + #if 0 osgUtil::TriStripVisitor tsv;