unsigned PatchMesh::processQuadFromPolygon() { unsigned i, j; m_numQuads = 0; for(i = 0; i < getNumPolygons(); i++) { if(polygonCounts()[i] < 5) m_numQuads++; } if(m_numQuads < 1) return 0; m_quadIndices.reset(new unsigned[m_numQuads * 4]); m_quadUVIds.reset(new unsigned[m_numQuads * 4]); unsigned * polygonIndir = polygonIndices(); unsigned * uvIndir = uvIds(); unsigned fc, ie = 0; for(i = 0; i < getNumPolygons(); i++) { fc = polygonCounts()[i]; if(fc == 4) { for(j = 0; j < 4; j++) { m_quadIndices[ie] = polygonIndir[j]; m_quadUVIds[ie] = uvIndir[j]; ie++; } } else if(fc == 3) { for(j = 0; j < 3; j++) { m_quadIndices[ie] = polygonIndir[j]; m_quadUVIds[ie] = uvIndir[j]; ie++; } m_quadIndices[ie] = m_quadIndices[ie - 3]; m_quadUVIds[ie] = m_quadUVIds[ie - 3]; ie++; } polygonIndir += fc; uvIndir += fc; } return m_numQuads; }
void BaseMesh::verbose() const { std::cout<<"mesh status:\n"; std::cout<<" num vertices "<<getNumVertices()<<"\n"; std::cout<<" num polygons "<<getNumPolygons()<<"\n"; std::map<unsigned, unsigned> faceCountList; for(unsigned i = 0; i < getNumPolygons(); i++) { if(faceCountList.find(m_polygonCounts[i]) == faceCountList.end()) faceCountList[m_polygonCounts[i]] = 1; else faceCountList[m_polygonCounts[i]] += 1; } std::map<unsigned, unsigned>::const_iterator it = faceCountList.begin(); for(; it != faceCountList.end(); ++it) { std::clog<<" "<<(*it).second<<" "<<(*it).first<<"-sided faces\n"; } std::cout<<" num polygon face vertices "<<getNumPolygonFaceVertices()<<"\n"; std::cout<<" num triangles "<<getNumTriangles()<<"\n"; std::cout<<" num quads "<<numQuads()<<"\n"; std::cout<<" num uvs "<<getNumUVs()<<"\n"; std::cout<<" num uvs indices "<<getNumUVIds()<<"\n"; }