Exemplo n.º 1
0
        private void ParseFaces(Span <string> lineParts, string group, int vertexCounter, TriangleMesh mesh)
        {
            var normalCounter = 0;

            if (lineParts.Length > 4)
            {
                FanTriangulation(lineParts.Slice(1, lineParts.Length - 1), vertexCounter, group, mesh);
            }
            else
            {
                if (lineParts[1].Contains('/'))
                {
                    var faceVertex1 = BuildFace(lineParts[1].Split('/'));
                    var faceVertex2 = BuildFace(lineParts[2].Split('/'));
                    var faceVertex3 = BuildFace(lineParts[3].Split('/'));
                    if (faceVertex1.VertexIndex < 1)
                    {
                        mesh.AddTriangle(BuildTiangle(group, vertexCounter, normalCounter, faceVertex1, faceVertex2, faceVertex3));
                    }
                    else
                    {
                        mesh.AddTriangle(BuildTiangle(group, 0, 0, faceVertex1, faceVertex2, faceVertex3));
                    }
                }
                else
                {
                    if (Convert.ToInt32(lineParts[1]) < 1)
                    {
                        mesh.AddTriangle(
                            vertexCounter + Convert.ToInt32(lineParts[1]),
                            vertexCounter + Convert.ToInt32(lineParts[2]),
                            vertexCounter + Convert.ToInt32(lineParts[3]), group);
                    }
                    else
                    {
                        mesh.AddTriangle(Convert.ToInt32(lineParts[1]), Convert.ToInt32(lineParts[2]), Convert.ToInt32(lineParts[3]), group);
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void FanTriangulation(Span <string> lineParts, int vertexCounter, string group, TriangleMesh mesh)
        {
            var normalCounter = 0;

            for (int index = 1; index < lineParts.Length - 1; index++)
            {
                if (lineParts[0].Contains('/'))
                {
                    var faceVertex1 = BuildFace(lineParts[0].Split('/'));
                    var faceVertex2 = BuildFace(lineParts[index].Split('/'));
                    var faceVertex3 = BuildFace(lineParts[index + 1].Split('/'));
                    if (faceVertex1.VertexIndex < 1)
                    {
                        mesh.AddTriangle(BuildTiangle(group, vertexCounter, normalCounter, faceVertex1, faceVertex2, faceVertex3));
                    }
                    else
                    {
                        mesh.AddTriangle(BuildTiangle(group, 0, 0, faceVertex1, faceVertex2, faceVertex3));
                    }
                }
                else
                {
                    if (Convert.ToInt32(lineParts[1]) < 1)
                    {
                        mesh.AddTriangle(
                            vertexCounter + Convert.ToInt32(lineParts[0]),
                            vertexCounter + Convert.ToInt32(lineParts[index]),
                            vertexCounter + Convert.ToInt32(lineParts[index + 1]), group);
                    }
                    else
                    {
                        mesh.AddTriangle(Convert.ToInt32(lineParts[0]), Convert.ToInt32(lineParts[index]), Convert.ToInt32(lineParts[index + 1]), group);
                    }
                }
            }
        }