Ejemplo n.º 1
0
        private void SaveToBinaryFile(ObjMesh mesh)
        {
            // Create the new, empty data file.
            string fileName = @"F:\Projekte\coop\obj2gltf\1.data";
            //if (File.Exists(fileName))
            //{
            //    Console.WriteLine(fileName + " already exists!");
            //    return;
            //}
            FileStream fs = new FileStream(fileName, FileMode.Create);
            // Create the writer for data.
            StreamWriter w = new StreamWriter(fs);

            // BinaryWriter w = new BinaryWriter(fs);
            // Write data to Test.data.
            foreach (var vertex in mesh.vertices)
            {
                var test = (Single)vertex.X;
                w.WriteLine(vertex.X.ToString("G17"));
                w.WriteLine(vertex.Y.ToString("G17"));
                w.WriteLine(vertex.Z.ToString("G17"));
            }

            foreach (var normal in mesh.normals)
            {
                w.WriteLine(normal.X.ToString("G17"));
                w.WriteLine(normal.Y.ToString("G17"));
                w.WriteLine(normal.Z.ToString("G17"));
            }

            foreach (var uv in mesh.uv)
            {
                w.WriteLine(uv.X.ToString("G17"));
                w.WriteLine(uv.Y.ToString("G17"));
            }

            foreach (var index in mesh.indices)
            {
                w.WriteLine((Int32)index);
            }

            //for (int i = 0; i < mesh.vertices.Length; i++)
            //{
            //    w.Write((int)mesh.vertices[i);
            //}
            w.Close();
            fs.Close();

            // Create the reader for data.
            //fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            //BinaryReader r = new BinaryReader(fs);
            //// Read data from Test.data.
            //for (int i = 0; i < 11; i++)
            //{
            //    Console.WriteLine(r.ReadInt32());
            //}
            //r.Close();
            //fs.Close();
        }
Ejemplo n.º 2
0
        // Use this for initialization
        public ObjMesh ImportFile(string filePath)
        {
            meshStruct newMesh = createMeshStruct(filePath);

            populateMeshStruct(ref newMesh);

            Vector3[] newVerts   = new Vector3[newMesh.faceData.Length];
            Vector2[] newUVs     = new Vector2[newMesh.faceData.Length];
            Vector3[] newNormals = new Vector3[newMesh.faceData.Length];
            int       i          = 0;

            /* The following foreach loops through the facedata and assigns the appropriate vertex, uv, or normal
             * for the appropriate Unity mesh array.
             */
            foreach (Vector3 v in newMesh.faceData)
            {
                newVerts[i] = newMesh.vertices[(int)v.X - 1];
                if (v.Y >= 1)
                {
                    newUVs[i] = newMesh.uv[(int)v.Y - 1];
                }

                if (v.Z >= 1)
                {
                    newNormals[i] = newMesh.normals[(int)v.Z - 1];
                }
                i++;
            }

            ObjMesh mesh = new ObjMesh();

            mesh.vertices = newVerts;
            mesh.uv       = newUVs;
            mesh.normals  = newNormals;
            mesh.indices  = newMesh.indices;

            //mesh.RecalculateBounds();
            //mesh.Optimize();
            //      mesh = Optimize(mesh);

            SaveToBinaryFile(mesh);

            return(mesh);
        }
Ejemplo n.º 3
0
        private ObjMesh Optimize(ObjMesh mesh)
        {
            Vector3 v;
            Vector3 v2;

            for (int i = 0; i < mesh.vertices.Length; i++)
            {
                v = mesh.vertices[i];
                for (int j = i + 1; j < mesh.vertices.Length; j++)
                {
                    v2 = mesh.vertices[j];
                    if (v.X == v2.X && v.Y == v2.Y && v.Z == v2.Z)
                    {
                        for (int ind = 0; ind < mesh.indices.Length; ind++)
                        {
                            if (mesh.indices[ind] == j)
                            {
                                mesh.indices[ind] = i;
                            }
                            else if (mesh.indices[ind] > j && mesh.indices[ind] > 0)
                            {
                                mesh.indices[ind]--;
                            }
                        }

                        var verticesList = mesh.vertices.ToList();
                        verticesList.RemoveAt(j);
                        mesh.vertices = verticesList.ToArray();

                        var uvList = mesh.uv.ToList();
                        uvList.RemoveAt(j);
                        mesh.uv = uvList.ToArray();

                        var normalsList = mesh.normals.ToList();
                        normalsList.RemoveAt(j);
                        mesh.normals = normalsList.ToArray();
                    }
                }
            }

            return(mesh);
        }