static void Load(ObjMesh mesh, TextReader textReader) { vertices = new List<Vector3>(); normals = new List<Vector3>(); texCoords = new List<Vector2>(); objVerticesIndexDictionary = new Dictionary<ObjMesh.ObjVertex, int>(); objVertices = new List<ObjMesh.ObjVertex>(); objTriangles = new List<ObjMesh.ObjTriangle>(); objQuads = new List<ObjMesh.ObjQuad>(); string line; while ((line = textReader.ReadLine()) != null) { line = line.Trim(splitCharacters); line = line.Replace(" ", " "); string[] parameters = line.Split(splitCharacters); switch (parameters[0]) { case "p": // Point break; case "v": // Vertex float x = float.Parse(parameters[1]); float y = float.Parse(parameters[2]); float z = float.Parse(parameters[3]); vertices.Add(new Vector3(x, y, z)); break; case "vt": // TexCoord float u = float.Parse(parameters[1]); float v = float.Parse(parameters[2]); texCoords.Add(new Vector2(u, v)); break; case "vn": // Normal float nx = float.Parse(parameters[1]); float ny = float.Parse(parameters[2]); float nz = float.Parse(parameters[3]); normals.Add(new Vector3(nx, ny, nz)); break; case "f": switch (parameters.Length) { case 4: ObjMesh.ObjTriangle objTriangle = new ObjMesh.ObjTriangle(); objTriangle.Index0 = ParseFaceParameter(parameters[1]); objTriangle.Index1 = ParseFaceParameter(parameters[2]); objTriangle.Index2 = ParseFaceParameter(parameters[3]); objTriangles.Add(objTriangle); break; case 5: ObjMesh.ObjQuad objQuad = new ObjMesh.ObjQuad(); objQuad.Index0 = ParseFaceParameter(parameters[1]); objQuad.Index1 = ParseFaceParameter(parameters[2]); objQuad.Index2 = ParseFaceParameter(parameters[3]); objQuad.Index3 = ParseFaceParameter(parameters[4]); objQuads.Add(objQuad); break; } break; } } mesh.Vertices = objVertices.ToArray(); mesh.Triangles = objTriangles.ToArray(); mesh.Quads = objQuads.ToArray(); objVerticesIndexDictionary = null; vertices = null; normals = null; texCoords = null; objVertices = null; objTriangles = null; objQuads = null; }
static void Load(ObjMesh mesh, StreamReader textReader) { //try { //vertices = null; //objVertices = null; if(vertices == null) { vertices = new List<Vector3>(); } if(normals == null) { normals = new List<Vector3>(); } if(texCoords == null) { texCoords = new List<Vector2>(); } if(objVerticesIndexDictionary == null) { objVerticesIndexDictionary = new Dictionary<ObjMesh.ObjVertex, int>(); } if(objVertices == null) { objVertices = new List<ObjMesh.ObjVertex>(); } objTriangles = new List<ObjMesh.ObjTriangle>(); objQuads = new List<ObjMesh.ObjQuad>(); mesh.vertexPositionOffset = vertices.Count; string line; while ((line = textReader.ReadLine()) != null) { if(line.Length<2) { break; } line = line.Trim(splitCharacters); line = line.Replace(" ", " "); string[] parameters = line.Split(splitCharacters); switch (parameters[0]) { case "usemtl": //Material specification try { mesh.Material = materials[parameters[1]]; }catch(KeyNotFoundException) { Console.WriteLine("WARNING: Texture parse failure: "+parameters[1]); } break; case "p": // Point break; case "v": // Vertex float x = parsefloat(parameters[1]); float y = parsefloat(parameters[2]); float z = parsefloat(parameters[3]); vertices.Add(new Vector3(x, y, z)); break; case "vt": // TexCoord float u = parsefloat(parameters[1]); float v = parsefloat(parameters[2]); texCoords.Add(new Vector2(u, v)); break; case "vn": // Normal float nx = parsefloat(parameters[1]); float ny = parsefloat(parameters[2]); float nz = parsefloat(parameters[3]); normals.Add(new Vector3(nx, ny, nz)); break; case "f": switch (parameters.Length) { case 4: ObjMesh.ObjTriangle objTriangle = new ObjMesh.ObjTriangle(); objTriangle.Index0 = ParseFaceParameter(parameters[1]); objTriangle.Index1 = ParseFaceParameter(parameters[2]); objTriangle.Index2 = ParseFaceParameter(parameters[3]); objTriangles.Add(objTriangle); break; case 5: ObjMesh.ObjQuad objQuad = new ObjMesh.ObjQuad(); objQuad.Index0 = ParseFaceParameter(parameters[1]); objQuad.Index1 = ParseFaceParameter(parameters[2]); objQuad.Index2 = ParseFaceParameter(parameters[3]); objQuad.Index3 = ParseFaceParameter(parameters[4]); objQuads.Add(objQuad); break; } break; } } //}catch(Exception er) { // Console.WriteLine(er); // Console.WriteLine("Successfully recovered. Bounds/Collision checking may fail though"); //} mesh.Vertices = objVertices.ToArray(); mesh.Triangles = objTriangles.ToArray(); mesh.Quads = objQuads.ToArray(); textReader.BaseStream.Close(); }
static void Load(ObjMesh mesh, TextReader textReader) { vertices = new List <Vector3>(); normals = new List <Vector3>(); texCoords = new List <Vector2>(); objVerticesIndexDictionary = new Dictionary <ObjMesh.ObjVertex, int>(); objVertices = new List <ObjMesh.ObjVertex>(); objTriangles = new List <ObjMesh.ObjTriangle>(); objQuads = new List <ObjMesh.ObjQuad>(); string line; while ((line = textReader.ReadLine()) != null) { line = line.Trim(splitCharacters); line = line.Replace(" ", " "); string[] parameters = line.Split(splitCharacters); switch (parameters[0]) { case "p": // Point break; case "v": // Vertex float x = float.Parse(parameters[1]); float y = float.Parse(parameters[2]); float z = float.Parse(parameters[3]); vertices.Add(new Vector3(x, y, z)); break; case "vt": // TexCoord float u = float.Parse(parameters[1]); float v = float.Parse(parameters[2]); texCoords.Add(new Vector2(u, v)); break; case "vn": // Normal float nx = float.Parse(parameters[1]); float ny = float.Parse(parameters[2]); float nz = float.Parse(parameters[3]); normals.Add(new Vector3(nx, ny, nz)); break; case "f": switch (parameters.Length) { case 4: ObjMesh.ObjTriangle objTriangle = new ObjMesh.ObjTriangle(); objTriangle.Index0 = ParseFaceParameter(parameters[1]); objTriangle.Index1 = ParseFaceParameter(parameters[2]); objTriangle.Index2 = ParseFaceParameter(parameters[3]); objTriangles.Add(objTriangle); break; case 5: ObjMesh.ObjQuad objQuad = new ObjMesh.ObjQuad(); objQuad.Index0 = ParseFaceParameter(parameters[1]); objQuad.Index1 = ParseFaceParameter(parameters[2]); objQuad.Index2 = ParseFaceParameter(parameters[3]); objQuad.Index3 = ParseFaceParameter(parameters[4]); objQuads.Add(objQuad); break; } break; } } mesh.Vertices = objVertices.ToArray(); mesh.Triangles = objTriangles.ToArray(); mesh.Quads = objQuads.ToArray(); objVerticesIndexDictionary = null; vertices = null; normals = null; texCoords = null; objVertices = null; objTriangles = null; objQuads = null; }