コード例 #1
0
ファイル: PatchMesh.cpp プロジェクト: amattwithers/aphid
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;
}
コード例 #2
0
ファイル: BaseMesh.cpp プロジェクト: spinos/aphid
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";
}