Пример #1
0
void AutoTriangleMesh<PointType>::triangulateAllFaces(void)
	{
	/* Find all non-triangular faces and triangulate them: */
	for(FaceIterator faceIt=BaseMesh::beginFaces();faceIt!=BaseMesh::endFaces();++faceIt)
		{
		/* Triangulate the face if it is not a triangle: */
		if(faceIt->getNumEdges()>3)
			triangulateFace(faceIt);
		}
	}
Пример #2
0
void triangulateMesh(RTCScene sceneID, unsigned int meshID, SubdivisionMesh &mesh) {

    /*! Map the triangle mesh vertex buffer from Embree space into user space. */
    Vertex *vertices = (Vertex *) rtcMapBuffer(sceneID, meshID, RTC_VERTEX_BUFFER);

    /*! Copy vertex data from the subdivision mesh into the triangle mesh buffer. */
    for (size_t i=0 ; i < mesh.vertexCount() ; i++) { Vec3f p = mesh.getCoordinates(i);  vertices[i].x = p.x;  vertices[i].y = p.y;  vertices[i].z = p.z; }

    /*! Unmap the triangle mesh buffer. */
    rtcUnmapBuffer(sceneID, meshID, RTC_VERTEX_BUFFER);

    /*! Map the triangle mesh index buffer from Embree space into user space. */
    Triangle *triangles = (Triangle *) rtcMapBuffer(sceneID, meshID, RTC_INDEX_BUFFER);

    /* Copy vertex indices into the triangle mesh buffer. */
    for (size_t i=0, j=0 ; i < mesh.faceCount() ; j += mesh.getFace(i).vertexCount() - 2, i++) triangulateFace(mesh.getFace(i), &triangles[j]);

    /*! Unmap the triangle mesh buffer. */
    rtcUnmapBuffer(sceneID, meshID, RTC_INDEX_BUFFER);

}