diff --git a/src/osgPlugins/3dc/ReaderWriter3DC.cpp b/src/osgPlugins/3dc/ReaderWriter3DC.cpp index 53b6ab832..98d74cc79 100644 --- a/src/osgPlugins/3dc/ReaderWriter3DC.cpp +++ b/src/osgPlugins/3dc/ReaderWriter3DC.cpp @@ -54,17 +54,21 @@ class ReaderWriter3DC : public osgDB::ReaderWriter std::cout << "num="<reserve(num); - normals->reserve(num); - colours->reserve(num); + vertices->reserve(targetNumVertices); + normals->reserve(targetNumVertices); + colours->reserve(targetNumVertices); fin.close(); @@ -91,21 +95,44 @@ class ReaderWriter3DC : public osgDB::ReaderWriter if (a) - { + { + + if (vertices->size()>=targetNumVertices) + { + // finishing setting up the current geometry and add it to the geode. + geometry->setUseDisplayList(false); + geometry->setVertexArray(vertices); + geometry->setNormalArray(normals); + geometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); + geometry->setColorArray(colours); + geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX); + geometry->addPrimitiveSet(new osg::DrawArrays(GL_POINTS,0,vertices->size())); + + geode->addDrawable(geometry); + + // allocate a new geometry + geometry = new osg::Geometry; + + vertices = new osg::Vec3Array; + normals = new osg::Vec3Array; + colours = new osg::UByte4Array; + + vertices->reserve(targetNumVertices); + normals->reserve(targetNumVertices); + colours->reserve(targetNumVertices); + + } + vertices->push_back(pos); normals->push_back(normal); colours->push_back(osg::UByte4(r,g,b,255)); - //colours->push_back(osg::Vec4((float)r/255.0f,(float)g/255.0f,(float)b/255.0f,1.0f)); } } - - //std::cout << "["<setUseDisplayList(false); geometry->setVertexArray(vertices); geometry->setNormalArray(normals); @@ -114,7 +141,6 @@ class ReaderWriter3DC : public osgDB::ReaderWriter geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX); geometry->addPrimitiveSet(new osg::DrawArrays(GL_POINTS,0,vertices->size())); - osg::Geode* geode = new osg::Geode; geode->addDrawable(geometry); return geode;