public bool addVertexList(int objectIndex, List <Vector3> verts, List <Vector3> norms, List <int> indices) { if (objectIndex >= m_objects.Count) { return(false); } m_vertexPositionArray = verts; m_vertexNormalArray = norms; OBJObject pObject = m_objects[objectIndex]; for (int i = 0; i < indices.Count; i += 3) { OBJFace newFace = new OBJFace(); newFace.m_vertexIndex[0] = indices[i] + 1; newFace.m_vertexIndex[1] = indices[i + 1] + 1; newFace.m_vertexIndex[2] = indices[i + 2] + 1; newFace.m_normalIndex[0] = indices[i] + 1; newFace.m_normalIndex[1] = indices[i + 1] + 1; newFace.m_normalIndex[2] = indices[i + 2] + 1; pObject.m_faces.Add(newFace); } return(true); }
public bool addTriangle(int objectIndex, Vector3 pos1, Vector3 pos2, Vector3 pos3) { if (objectIndex >= m_objects.Count) { return(false); } OBJObject pObject = m_objects[objectIndex]; // Create new face OBJFace newFace = new OBJFace(); newFace.m_vertexIndex[0] = addUniquePosition(pos1) + 1; newFace.m_vertexIndex[1] = addUniquePosition(pos2) + 1; newFace.m_vertexIndex[2] = addUniquePosition(pos3) + 1; pObject.m_faces.Add(newFace); return(true); }
public bool write(FileStream stream) { StreamWriter sw = new StreamWriter(stream); if (stream == null) { return(false); } int i, j; // Write out vertex position first sw.Write("# Ensemble Studios' .Net OBJ file I/O\n"); sw.Write("\n"); // Write out vertex positions firt int numVertexPositions = m_vertexPositionArray.Count; if (numVertexPositions > 0) { for (i = 0; i < numVertexPositions; i++) { Vector3 vertex = m_vertexPositionArray[i]; sw.Write("v {0} {1} {2}\n", vertex.X, vertex.Z, vertex.Y); } sw.Write("# {0} vertices\n\n\n", numVertexPositions); } // Write out vertex normals int numVertexNormals = m_vertexNormalArray.Count; if (numVertexNormals > 0) { for (i = 0; i < numVertexNormals; i++) { Vector3 normal = m_vertexNormalArray[i]; sw.Write("vn {0} {1} {2}\n", normal.X, normal.Z, normal.Y); } sw.Write("# {0} vertex normals\n\n\n", numVertexNormals); } // Write out objects int numObjects = m_objects.Count; for (i = 0; i < numObjects; i++) { OBJObject pObject = m_objects[i]; // Write out the object name sw.Write("g {0}\n", pObject.m_name); // Write out object faces int numFaces = pObject.m_faces.Count; for (j = 0; j < numFaces; j++) { OBJFace face = pObject.m_faces[j]; if (face.m_vertexIndex[0] != -1) { sw.Write("f {0} {1} {2}\n", face.m_vertexIndex[0], face.m_vertexIndex[1], face.m_vertexIndex[2]); } } sw.Write("# {0} faces\n\n\n", numFaces); } sw.Close(); return(true); }
private void readElements(string file) { int countObject = 0; OBJObject pCurObject = new OBJObject(); string[] input = File.ReadAllLines(file); for (int i = 0; i < input.Length; i++) { string[] split = input[i].Split(new Char[] { ' ' }); switch (split[0]) { case "v": // Plain vertex //get and increment the current vertex Vector3 vertex = new Vector3(); // initialize the vertex values (important if not all values are in file) vertex.X = vertex.Y = vertex.Z = 0.0f; //fill the values with the data in the line vertex.X = System.Convert.ToSingle(split[1]); vertex.Y = System.Convert.ToSingle(split[2]); vertex.Z = System.Convert.ToSingle(split[3]); m_vertexPositionArray.Add(vertex); break; case "vt": // Texture vertex break; case "vn": // vertex normal break; case "g": // new group if (input[i].Length > 2) { pCurObject = m_objects[countObject++]; string[] sub = input[i].Split(new Char[] { ' ' }); m_name = sub[1]; } break; case "s": // new smoothing group break; case "f": // new face List <vertexInfo> verts = new List <vertexInfo>(); vertexInfo vert = new vertexInfo(); vert.vp = vert.vt = vert.vn = -1; if (split.Length < 4) { break; } for (int j = 1; j < split.Length; j++) { string[] v = split[j].Split(new Char[] { '/' }); if (v.Length > 1) { vert.vp = System.Convert.ToInt16(v[0]); vert.vt = System.Convert.ToInt16(v[1]); vert.vn = System.Convert.ToInt16(v[2]); verts.Add(vert); } else { vert.vp = System.Convert.ToInt16(split[1]); verts.Add(vert); vert.vp = System.Convert.ToInt16(split[2]); verts.Add(vert); vert.vp = System.Convert.ToInt16(split[3]); verts.Add(vert); } } OBJFace newFace = new OBJFace(); pCurObject.m_faces.Add(newFace); newFace.m_vertexIndex[0] = verts[0].vp; newFace.m_vertexIndex[1] = verts[1].vp; newFace.m_vertexIndex[2] = verts[2].vp; break; } } }