Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
                }
            }
        }