#include "IO.h" #include using namespace std; void MeshReconstruction::WriteObjFile(Mesh const& mesh, string const& fileName) { // FILE faster than streams. FILE* file = fopen(fileName.c_str(), "w"); if (file == NULL) { throw runtime_error("Could not write obj file."); } // write stats fprintf(file, "# %d vertices, %d triangles\n\n", static_cast(mesh.vertices.size()), static_cast(mesh.triangles.size())); // vertices for (size_t vi = 0; vi < mesh.vertices.size(); ++vi) { auto const& v = mesh.vertices.at(vi); fprintf(file, "v %f %f %f\n", v.x, v.y, v.z); } // vertex normals fprintf(file, "\n"); for (size_t ni = 0; ni < mesh.vertices.size(); ++ni) { auto const& vn = mesh.vertexNormals.at(ni); fprintf(file, "vn %f %f %f\n", vn.x, vn.y, vn.z); } // triangles (1-based) fprintf(file, "\n"); for (size_t ti = 0; ti < mesh.triangles.size(); ++ti) { auto const& t = mesh.triangles.at(ti); fprintf(file, "f %d//%d %d//%d %d//%d\n", t[0] + 1, t[0] + 1, t[1] + 1, t[1] + 1, t[2] + 1, t[2] + 1); } fclose(file); }