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(); }
// 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); }
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); }