Exemplo n.º 1
0
        public Triangle(Vertex v0, Vertex v1, Vertex v2, string material)
            : base(material)
        {
            Vertex0 = v0;
            Vertex1 = v1;
            Vertex2 = v2;

            E1 = Vertex1.Position - Vertex0.Position;
            E2 = Vertex2.Position - Vertex0.Position;
            Normal = Vector3.CrossProduct(E2, E1).Normalized;
        }
Exemplo n.º 2
0
        public Quad(Vertex v0, Vertex v1, Vertex v2, Vertex v3, string material)
            : base(material)
        {
            Vertex0 = v0;
            Vertex1 = v1;
            Vertex2 = v2;
            Vertex3 = v3;

            T1 = new Triangle(Vertex0, Vertex1, Vertex3, material);
            T2 = new Triangle(Vertex2, Vertex3, Vertex1, material);
        }
Exemplo n.º 3
0
        private static IEnumerable<Triangle> ParseObjFile(string[] content, string mat)
        {
            List<Vector3> vertices = new List<Vector3>();
            List<Vector3> normals = new List<Vector3>();

            List<Triangle> tris = new List<Triangle>();

            foreach(string line in content)
            {
                if (line.StartsWith("#"))
                    continue;

                string[] tokens = line.Split(' ');
                if (tokens.Length == 0)
                    continue;
                switch(tokens[0])
                {
                    case "v":
                        vertices.Add(new Vector3(double.Parse(tokens[1]), double.Parse(tokens[2]), double.Parse(tokens[3])));
                        break;
                    case "vn":
                        normals.Add(new Vector3(double.Parse(tokens[1]), double.Parse(tokens[2]), double.Parse(tokens[3])));
                        break;
                    case "f":
                        string[] verts = tokens[1].Split('/');
                        Vertex v0 = new Vertex { Position = vertices[int.Parse(verts[0]) - 1] };
                        verts = tokens[2].Split('/');
                        Vertex v1 = new Vertex { Position = vertices[int.Parse(verts[0]) - 1] };
                        verts = tokens[3].Split('/');
                        Vertex v2 = new Vertex { Position = vertices[int.Parse(verts[0]) - 1] };

                        tris.Add(new Triangle(v0,v1,v2, mat));
                        break;
                }
            }

            return tris;
        }