From a1b46de9360a9ef000266d6bf7de0c1481ffb2ff Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 29 Mar 2004 22:26:51 +0000 Subject: [PATCH] Added normal generation in polygonal tile generation, and add --wtk option for setting coord systems in osgdem --- examples/osgdem/osgdem.cpp | 6 ++++ include/osgTerrain/CoordinateSystem | 34 ++++++++++++------ src/osgTerrain/CoordinateSystem.cpp | 10 +++--- src/osgTerrain/DataSet.cpp | 56 ++++++++++++++++++++--------- 4 files changed, 75 insertions(+), 31 deletions(-) diff --git a/examples/osgdem/osgdem.cpp b/examples/osgdem/osgdem.cpp index 33d967003..dcb7a8fe6 100644 --- a/examples/osgdem/osgdem.cpp +++ b/examples/osgdem/osgdem.cpp @@ -174,6 +174,12 @@ int main( int argc, char **argv ) currentCS = !def.empty() ? SanitizeSRS(def.c_str()) : ""; std::cout<<"--cs "<getProjectionRef().c_str()); + char* projection_string = strdup(lhs->getWKT().c_str()); char* importString = projection_string; OGRSpatialReference lhsSR; lhsSR.importFromWkt(&importString); free(projection_string); + + std::cout<<"getCoordinateSystemType("<getProjectionRef()<getWKT()<getVertex(c,r); + + if (n) (*n)[vi] = grid->getNormal(c,r); + t[vi].x() = (float)(c)/(float)(numColumns); t[vi].y() = (float)(r)/(float)(numRows); + ++vi; } } geometry->setVertexArray(&v); + + if (n) + { + geometry->setNormalArray(n); + geometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); + } + geometry->setColorArray(&color); geometry->setColorBinding(osg::Geometry::BIND_OVERALL); geometry->setTexCoordArray(0,&t); @@ -1905,6 +1925,7 @@ osg::Geometry* DataSet::DestinationTile::createDrawablePolygonal() skirtDrawElements[ei++] = (r)*numColumns+c; skirtDrawElements[ei++] = vi; v[vi] = v[(r)*numColumns+c]+skirtVector; + if (n) (*n)[vi] = (*n)[r*numColumns+c]; t[vi++] = t[(r)*numColumns+c]; } // create right skirt vertices @@ -1914,6 +1935,7 @@ osg::Geometry* DataSet::DestinationTile::createDrawablePolygonal() skirtDrawElements[ei++] = (r)*numColumns+c; skirtDrawElements[ei++] = vi; v[vi] = v[(r)*numColumns+c]+skirtVector; + if (n) (*n)[vi] = (*n)[(r)*numColumns+c]; t[vi++] = t[(r)*numColumns+c]; } // create top skirt vertices @@ -1923,6 +1945,7 @@ osg::Geometry* DataSet::DestinationTile::createDrawablePolygonal() skirtDrawElements[ei++] = (r)*numColumns+c; skirtDrawElements[ei++] = vi; v[vi] = v[(r)*numColumns+c]+skirtVector; + if (n) (*n)[vi] = (*n)[(r)*numColumns+c]; t[vi++] = t[(r)*numColumns+c]; } // create left skirt vertices @@ -1932,6 +1955,7 @@ osg::Geometry* DataSet::DestinationTile::createDrawablePolygonal() skirtDrawElements[ei++] = (r)*numColumns+c; skirtDrawElements[ei++] = vi; v[vi] = v[(r)*numColumns+c]+skirtVector; + if (n) (*n)[vi] = (*n)[(r)*numColumns+c]; t[vi++] = t[(r)*numColumns+c]; } skirtDrawElements[ei++] = 0; @@ -2623,7 +2647,7 @@ void DataSet::computeDestinationGraphFromSources(unsigned int numLevels) if (sd->_cs.valid()) { _coordinateSystem = sd->_cs; - std::cout<<"Setting coordinate system to "<<_coordinateSystem->getProjectionRef()<getWKT()<