Пример #1
0
// 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;
}
Пример #2
0
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();
}