/// remove vertex with given index void GLData::removeVertex( unsigned int vertexIdx ) { // i) for each polygon of this vertex, call remove_polygon: typedef std::set< unsigned int, std::greater<unsigned int> > PolygonSet; PolygonSet pset = vertexDataArray[vertexIdx].polygons; BOOST_FOREACH( unsigned int polygonIdx, pset ) { removePolygon( polygonIdx ); }
void GLData::removeVertex( unsigned int vertexIdx ) { //std::cout << "GLData::removeVertex( " << vertexIdx << " )\n"; // i) for each polygon of this vertex, call remove_polygon: BOOST_FOREACH( unsigned int polygonIdx, vertexDataArray[vertexIdx].polygons ) { removePolygon( polygonIdx ); } // ii) overwrite with last vertex: unsigned int lastIdx = vertexArray.size()-1; if (vertexIdx != lastIdx) { vertexArray[vertexIdx] = vertexArray[lastIdx]; vertexDataArray[vertexIdx] = vertexDataArray[lastIdx]; // notify octree-node with new index here! // vertex that was at lastIdx is now at vertexIdx vertexDataArray[vertexIdx].node->swapIndex( lastIdx, vertexIdx ); // request each polygon to re-number this vertex. BOOST_FOREACH( unsigned int polygonIdx, vertexDataArray[vertexIdx].polygons ) { unsigned int idx = polygonIdx*polyVerts; for (int m=0;m<polyVerts;++m) { if ( indexArray[ idx+m ] == lastIdx ) indexArray[ idx+m ] = vertexIdx; } } }
GLRenderer::~GLRenderer() { glDeleteBuffers(1, &m_ParticleVBO); glDeleteVertexArrays(1, &m_ParticleVAO); for(size_t i = 0; i < m_PolygonVBOs.size(); ++i) { removePolygon(i); } }
void MeshBuilder::removePolygons() { for ( int i = polygons()-1 ; i >= 0 ; --i ) removePolygon(i); }