private void ReadFaceVertexIndex(String text, ref FaceVertexIndex v) { String[] ints = text.Split('/'); v.vertex = int.Parse(ints[0]); v.texture = int.Parse(ints[1]); v.normal = int.Parse(ints[2]); }
public FaceVertexIndex ReadVertexIndex(BinaryReader reader) { FaceVertexIndex newVertexIndex = new FaceVertexIndex(); newVertexIndex.index = reader.ReadUInt16(); newVertexIndex.link = reader.ReadUInt16(); return(newVertexIndex); }
public bool Load(String filename) { StreamReader re = null; try { re = File.OpenText(filename); } catch { // can't open file return false; } int line_count = 0; do { String line = null; try { line = re.ReadLine(); } catch { // eof break; } if (line == null) { break; } line_count++; String[] words = line.Split(' '); if (words[0] == "v") { OpenTK.Vector3 v3; v3.X = float.Parse(words[1]); v3.Y = float.Parse(words[2]); v3.Z = float.Parse(words[3]); vertices.Add(v3); } else if (words[0] == "vt") { OpenTK.Vector2 v2; v2.X = float.Parse(words[1]); v2.Y = 1.0f - float.Parse(words[2]); texcoords.Add(v2); } else if (words[0] == "vn") { OpenTK.Vector3 v3; v3.X = float.Parse(words[1]); v3.Y = float.Parse(words[2]); v3.Z = float.Parse(words[3]); normals.Add(v3); } else if (words[0] == "f") { FaceVertexIndex i1 = new FaceVertexIndex(); FaceVertexIndex i2 = new FaceVertexIndex(); FaceVertexIndex i3 = new FaceVertexIndex(); FaceVertexIndex i4 = new FaceVertexIndex(); switch (words.Length) { case 4: // three indices ReadFaceVertexIndex(words[1], ref i1); ReadFaceVertexIndex(words[2], ref i2); ReadFaceVertexIndex(words[3], ref i3); indexes.Add(i1); indexes.Add(i2); indexes.Add(i3); break; case 5: // four indices, quad, two triangles ReadFaceVertexIndex(words[1], ref i1); ReadFaceVertexIndex(words[2], ref i2); ReadFaceVertexIndex(words[3], ref i3); ReadFaceVertexIndex(words[4], ref i4); indexes.Add(i1); indexes.Add(i2); indexes.Add(i3); indexes.Add(i1); indexes.Add(i3); indexes.Add(i4); break; default: Console.WriteLine("Unhandled face index size {0}", words.Length); break; } } } while (true); /* foreach (FaceVertexIndex fvi in indexes) { // Obj indices start at 1 fvi.vertex -= 1; fvi.texture -= 1; fvi.normal -= 1; Console.WriteLine("{0}, {1}, {2}", fvi.vertex, fvi.texture, fvi.normal); } */ is_loaded = true; return true; }
public bool Load(String filename) { StreamReader re = null; try { re = File.OpenText(filename); } catch { // can't open file return(false); } int line_count = 0; do { String line = null; try { line = re.ReadLine(); } catch { // eof break; } if (line == null) { break; } line_count++; String[] words = line.Split(' '); if (words[0] == "v") { OpenTK.Vector3 v3; v3.X = float.Parse(words[1]); v3.Y = float.Parse(words[2]); v3.Z = float.Parse(words[3]); vertices.Add(v3); } else if (words[0] == "vt") { OpenTK.Vector2 v2; v2.X = float.Parse(words[1]); v2.Y = 1.0f - float.Parse(words[2]); texcoords.Add(v2); } else if (words[0] == "vn") { OpenTK.Vector3 v3; v3.X = float.Parse(words[1]); v3.Y = float.Parse(words[2]); v3.Z = float.Parse(words[3]); normals.Add(v3); } else if (words[0] == "f") { FaceVertexIndex i1 = new FaceVertexIndex(); FaceVertexIndex i2 = new FaceVertexIndex(); FaceVertexIndex i3 = new FaceVertexIndex(); FaceVertexIndex i4 = new FaceVertexIndex(); switch (words.Length) { case 4: // three indices ReadFaceVertexIndex(words[1], ref i1); ReadFaceVertexIndex(words[2], ref i2); ReadFaceVertexIndex(words[3], ref i3); indexes.Add(i1); indexes.Add(i2); indexes.Add(i3); break; case 5: // four indices, quad, two triangles ReadFaceVertexIndex(words[1], ref i1); ReadFaceVertexIndex(words[2], ref i2); ReadFaceVertexIndex(words[3], ref i3); ReadFaceVertexIndex(words[4], ref i4); indexes.Add(i1); indexes.Add(i2); indexes.Add(i3); indexes.Add(i1); indexes.Add(i3); indexes.Add(i4); break; default: Console.WriteLine("Unhandled face index size {0}", words.Length); break; } } } while (true); /* * foreach (FaceVertexIndex fvi in indexes) * { * // Obj indices start at 1 * fvi.vertex -= 1; * fvi.texture -= 1; * fvi.normal -= 1; * Console.WriteLine("{0}, {1}, {2}", fvi.vertex, fvi.texture, fvi.normal); * } */ is_loaded = true; return(true); }