From c7673a295aa430ad751e157cd1e44f87b537135c Mon Sep 17 00:00:00 2001 From: mckay Date: Mon, 20 Oct 2025 18:05:12 +0800 Subject: [PATCH] feat: obj writing --- application/main.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/application/main.cpp b/application/main.cpp index 286ac37..c764b6e 100644 --- a/application/main.cpp +++ b/application/main.cpp @@ -1,8 +1,38 @@ #include #include + #include +#include +#include +#include + +void write_obj(const polymesh_t& mesh, std::string filename = "output.obj") { + std::ofstream obj(filename); + if (!obj) return; + + // write in vertices + for (uint32_t i = 0; i < mesh.num_vertices; ++i) { + const auto& v = mesh.vertices[i]; + obj << "v " << v.x << " " << v.y << " " << v.z << "\n"; + } + + // write in faces + uint32_t idx = 0; + for (uint32_t i = 0; i < mesh.num_faces; ++i) { + obj << "f"; + for (uint32_t j = 0; j < mesh.vertex_counts[i]; ++j) { + // OBJ is 1-indexed + obj << " " << (mesh.faces[idx++] + 1); + } + obj << "\n"; + } + std::cout << "OBJ file written to: " << std::filesystem::absolute(filename) << std::endl; +} + + + int main() { auto primitive_data_center = create_primitive_data_center(); @@ -29,6 +59,7 @@ int main() auto solver = create_solver(baked_blobtree, settings); auto result = generate_polymesh(solver); + write_obj(result.mesh, "output.obj"); print_statistics(solver); destroy_solver(solver);