// Load mesh from PLY file bool Mesh::loadFromFile(char* filename) { FILE* inFile = fopen(filename, "rt"); if (inFile == NULL) { char pszError[_MAX_FNAME + 1]; sprintf(pszError, "%s does not exist!\n", filename); MessageBox(NULL, pszError, NULL, MB_ICONEXCLAMATION); return FALSE; } // read header to PLY file if (!readPlyHeader(inFile)) { return false; } // read vertex data from PLY file if (!readPlyVerts(inFile)) { return false; } // read triangle data from PLY file if (!readPlyTris(inFile)) { return false; } fclose(inFile); // close the file calcVertNormals(); return true; }
Mesh::Mesh(const float pVertex[][3], const int nv, const int pTri[][3], const int ntri) { int i; _numVerts = nv; _numTriangles = ntri; for (i=0; i<_numVerts; i++) { const float x = pVertex[i][0]; const float y = pVertex[i][1]; const float z = pVertex[i][2]; vertex v(x, y, z); v.setIndex(i); _vlist.push_back(v); } for (i=0; i<_numTriangles; i++) { const int v1 = pTri[i][0]; const int v2 = pTri[i][1]; const int v3 = pTri[i][2]; triangle t(this, v1, v2, v3); t.setIndex(i); _plist.push_back(t); // update each vertex w/ its neighbors (vertrices & triangles) _vlist[v1].addTriNeighbor(i); _vlist[v1].addVertNeighbor(v2); _vlist[v1].addVertNeighbor(v3); _vlist[v2].addTriNeighbor(i); _vlist[v2].addVertNeighbor(v1); _vlist[v2].addVertNeighbor(v3); _vlist[v3].addTriNeighbor(i); _vlist[v3].addVertNeighbor(v1); _vlist[v3].addVertNeighbor(v2); } calcVertNormals(); }