public static TriMesh ConvertToTriMesh(NonManifoldMesh mesh) { TriMesh triMesh = new GraphicResearchHuiZhao.TriMesh(); triMesh.Traits.HasFaceVertexNormals = true; triMesh.Traits.HasTextureCoordinates = true; if (mesh.VertexNormal == null) { triMesh.Traits.HasFaceVertexNormals = false; } else { triMesh.Traits.HasFaceVertexNormals = true; } if (mesh.TextextCoordinate == null) { triMesh.Traits.HasTextureCoordinates = false; } else { triMesh.Traits.HasTextureCoordinates = true; } int vertexCount = mesh.VertexCount; int faceCount = mesh.FaceCount; for (int i = 0; i < vertexCount; i++) { VertexTraits traits = new VertexTraits((float)mesh.VertexPos[i * 3], (float)mesh.VertexPos[i * 3 + 1], (float)mesh.VertexPos[i * 3 + 2]); triMesh.Vertices.Add(traits); } TriMesh.Vertex[] vertices = new TriMesh.Vertex[3]; for (int i = 0; i < faceCount; i++) { vertices[0] = triMesh.Vertices[mesh.FaceIndex[i * 3]]; vertices[1] = triMesh.Vertices[mesh.FaceIndex[i * 3 + 1]]; vertices[2] = triMesh.Vertices[mesh.FaceIndex[i * 3 + 2]]; triMesh.Faces.AddTriangles(vertices); } if (triMesh.Traits.HasTextureCoordinates) { TriMesh.HalfEdge faceVertex; foreach (TriMesh.Face face in triMesh.Faces) { foreach (TriMesh.Vertex vertex in face.Vertices) { faceVertex = face.FindHalfedgeTo(vertex); if (faceVertex != null) // Make sure vertex belongs to face if triangularization is on { faceVertex.Traits.TextureCoordinate = new Vector2D(mesh.TextextCoordinate[vertex.Index * 2], mesh.TextextCoordinate[vertex.Index * 2 + 1]); } } } } if (triMesh.Traits.HasFaceVertexNormals) { TriMesh.HalfEdge faceVertex; foreach (TriMesh.Face face in triMesh.Faces) { foreach (TriMesh.Vertex vertex in face.Vertices) { faceVertex = face.FindHalfedgeTo(vertex); if (faceVertex != null) // Make sure vertex belongs to face if triangularization is on { faceVertex.Traits.Normal = new Vector3D(mesh.FaceNormal, vertex.Index); } } } } //if (triMesh.Traits.HasTextureCoordinates) //{ // foreach (HalfEdgeMesh.TriMesh.Vertex vertex in triMesh.Vertices ) // { // vertex.Traits.TextureCoordinate = new Vector2d(mesh.TextextCoordinate[vertex.Index * 2], mesh.TextextCoordinate[vertex.Index * 2 + 1]); // } //} //if (triMesh.Traits.HasFaceVertexNormals) //{ // foreach (HalfEdgeMesh.TriMesh.Vertex vertex in triMesh.Vertices) // { // vertex.Traits.Normal = new Vector3d(mesh.FaceNormal, vertex.Index); // } //} return triMesh; }
public static TriMesh ConvertToTriMesh(NonManifoldMesh mesh) { TriMesh triMesh = new GraphicResearchHuiZhao.TriMesh(); triMesh.Traits.HasFaceVertexNormals = true; triMesh.Traits.HasTextureCoordinates = true; if (mesh.VertexNormal == null) { triMesh.Traits.HasFaceVertexNormals = false; } else { triMesh.Traits.HasFaceVertexNormals = true; } if (mesh.TextextCoordinate == null) { triMesh.Traits.HasTextureCoordinates = false; } else { triMesh.Traits.HasTextureCoordinates = true; } int vertexCount = mesh.VertexCount; int faceCount = mesh.FaceCount; for (int i = 0; i < vertexCount; i++) { VertexTraits traits = new VertexTraits((float)mesh.VertexPos[i * 3], (float)mesh.VertexPos[i * 3 + 1], (float)mesh.VertexPos[i * 3 + 2]); triMesh.Vertices.Add(traits); } TriMesh.Vertex[] vertices = new TriMesh.Vertex[3]; for (int i = 0; i < faceCount; i++) { vertices[0] = triMesh.Vertices[mesh.FaceIndex[i * 3]]; vertices[1] = triMesh.Vertices[mesh.FaceIndex[i * 3 + 1]]; vertices[2] = triMesh.Vertices[mesh.FaceIndex[i * 3 + 2]]; triMesh.Faces.AddTriangles(vertices); } if (triMesh.Traits.HasTextureCoordinates) { TriMesh.HalfEdge faceVertex; foreach (TriMesh.Face face in triMesh.Faces) { foreach (TriMesh.Vertex vertex in face.Vertices) { faceVertex = face.FindHalfedgeTo(vertex); if (faceVertex != null) // Make sure vertex belongs to face if triangularization is on { faceVertex.Traits.TextureCoordinate = new Vector2D(mesh.TextextCoordinate[vertex.Index * 2], mesh.TextextCoordinate[vertex.Index * 2 + 1]); } } } } if (triMesh.Traits.HasFaceVertexNormals) { TriMesh.HalfEdge faceVertex; foreach (TriMesh.Face face in triMesh.Faces) { foreach (TriMesh.Vertex vertex in face.Vertices) { faceVertex = face.FindHalfedgeTo(vertex); if (faceVertex != null) // Make sure vertex belongs to face if triangularization is on { faceVertex.Traits.Normal = new Vector3D(mesh.FaceNormal, vertex.Index); } } } } //if (triMesh.Traits.HasTextureCoordinates) //{ // foreach (HalfEdgeMesh.TriMesh.Vertex vertex in triMesh.Vertices ) // { // vertex.Traits.TextureCoordinate = new Vector2d(mesh.TextextCoordinate[vertex.Index * 2], mesh.TextextCoordinate[vertex.Index * 2 + 1]); // } //} //if (triMesh.Traits.HasFaceVertexNormals) //{ // foreach (HalfEdgeMesh.TriMesh.Vertex vertex in triMesh.Vertices) // { // vertex.Traits.Normal = new Vector3d(mesh.FaceNormal, vertex.Index); // } //} return(triMesh); }