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; }
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); }
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; }