public Triangle(Vertex v0, Vertex v1, Vertex v2)
     : this()
 {
     Vertex0 = v0;
     Vertex1 = v1;
     Vertex2 = v2;
 }
        static void Main(string[] args)
        {
            List<Vector3> vertices = new List<Vector3>();
            List<Vector2> texcoords = new List<Vector2>();
            List<Vector3> normals = new List<Vector3>();
            List<Triangle> triangles = new List<Triangle>();

            if (args.Length == 0)
            {
                Console.WriteLine("No file specified.");
                return;
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("File does not exist.");
                return;
            }

            StreamReader reader = new StreamReader(args[0]);
            //StreamReader reader = new StreamReader(@"C:\Users\Robert Rouhani\Documents\maya\projects\default\scenes\buttonup.obj");
            string file = reader.ReadToEnd();

            foreach (string l in file.Split(Environment.NewLine.ToCharArray()))
            {
                string line = l.Trim();

                //get rid of comments
                int commentStart = line.IndexOf("#");
                if (commentStart != -1)
                    line = line.Substring(0, commentStart);

                //if the line is blank, go on to the next line
                if (line.Length == 0)
                    continue;

                string[] values = line.Split(' ');

                //based on the type of identifier, do something to the rest of the line.
                switch (values[0])
                {
                    case "v":
                        vertices.Add(new Vector3(values[1], values[2], values[3]));
                        break;
                    case "vt":
                        texcoords.Add(new Vector2(values[1], values[2]));
                        break;
                    case "vn":
                        normals.Add(new Vector3(values[1], values[2], values[3]));
                        break;
                    case "f":
                    {
                        Vertex[] triVerts = new Vertex[3];
                        for (int i = 0; i < 3; i++)
                        {
                            string[] indValues = values[i + 1].Split('/');
                            Vector3i indNums = new Vector3i(indValues[0], indValues[1], indValues[2]);
                            triVerts[i] = new Vertex(vertices[indNums.X - 1], texcoords[indNums.Y - 1], normals[indNums.Z - 1]);
                        }
                        triangles.Add(new Triangle(triVerts[0], triVerts[1], triVerts[2]));
                        break;
                    }
                }
            }

            Console.WriteLine("/**");
            Console.WriteLine(" * Copyright (c) 2010-2012 Lightning Development Studios <*****@*****.**>");
            Console.WriteLine(" * ");
            Console.WriteLine(" * Permission is hereby granted, free of charge, to any person obtaining a copy of");
            Console.WriteLine(" * this software and associated documentation files (the \"Software\"), to deal in");
            Console.WriteLine(" * the Software without restriction, including without limitation the rights to");
            Console.WriteLine(" * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies");
            Console.WriteLine(" * of the Software, and to permit persons to whom the Software is furnished to do");
            Console.WriteLine(" * so, subject to the following conditions:");
            Console.WriteLine(" * ");
            Console.WriteLine(" * The above copyright notice and this permission notice shall be included in all");
            Console.WriteLine(" * copies or substantial portions of the Software.");
            Console.WriteLine(" * ");
            Console.WriteLine(" * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR");
            Console.WriteLine(" * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,");
            Console.WriteLine(" * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE");
            Console.WriteLine(" * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER");
            Console.WriteLine(" * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,");
            Console.WriteLine(" * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE");
            Console.WriteLine(" * SOFTWARE.");
            Console.WriteLine(" */");
            Console.WriteLine("");
            Console.WriteLine("package com.ltdev.cc.models;");
            Console.WriteLine("");
            Console.WriteLine("/**");
            Console.WriteLine(" * Automatically generated vertex data for model \"" + Path.GetFileName(args[0]) + "\".");
            Console.WriteLine(" * @author Lightning Development Studios");
            Console.WriteLine(" */");
            Console.WriteLine("public class " + Path.GetFileNameWithoutExtension(args[0]) + "Data");
            Console.WriteLine("{");
            Console.WriteLine("\t/**");
            Console.WriteLine("\t * The number of vertices in the array.");
            Console.WriteLine("\t */");
            Console.WriteLine("public static final int vertexCount = " + triangles.Count * 3 + ";");
            Console.WriteLine("");
            Console.WriteLine("\t/**");
            Console.WriteLine("\t * Vertex data.");
            Console.WriteLine("\t */");
            Console.WriteLine("\tpublic static final float[] vertices = {");

            foreach (Triangle t in triangles)
            {
                Console.WriteLine("\t\t" + t.Vertex0.Position.ToJavaArray() + ", " + t.Vertex0.TexCoord.ToJavaArray() + ", " + t.Vertex0.Normals.ToJavaArray() + ",");
                Console.WriteLine("\t\t" + t.Vertex1.Position.ToJavaArray() + ", " + t.Vertex1.TexCoord.ToJavaArray() + ", " + t.Vertex1.Normals.ToJavaArray() + ",");
                Console.WriteLine("\t\t" + t.Vertex2.Position.ToJavaArray() + ", " + t.Vertex2.TexCoord.ToJavaArray() + ", " + t.Vertex2.Normals.ToJavaArray() + ",");
            }

            Console.WriteLine("\t};");
            Console.WriteLine("}");
        }