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