diff options
Diffstat (limited to 'examples/voxelize/main.cc')
-rw-r--r-- | examples/voxelize/main.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/examples/voxelize/main.cc b/examples/voxelize/main.cc new file mode 100644 index 0000000..035e3a1 --- /dev/null +++ b/examples/voxelize/main.cc @@ -0,0 +1,74 @@ +#define VOXELIZER_IMPLEMENTATION +#include "voxelizer.h" + +#define TINYOBJLOADER_IMPLEMENTATION +#include "../../tiny_obj_loader.h" + +bool Voxelize(const char* filename, float voxelsizex, float voxelsizey, float voxelsizez, float precision) +{ + tinyobj::attrib_t attrib; + std::vector<tinyobj::shape_t> shapes; + std::vector<tinyobj::material_t> materials; + std::string err; + bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, filename); + + if (!err.empty()) { + printf("err: %s\n", err.c_str()); + } + + if (!ret) { + printf("failed to load : %s\n", filename); + return false; + } + + if (shapes.size() == 0) { + printf("err: # of shapes are zero.\n"); + return false; + } + + // Only use first shape. + { + vx_mesh_t* mesh; + vx_mesh_t* result; + + mesh = vx_mesh_alloc(attrib.vertices.size(), shapes[0].mesh.indices.size()); + + for (size_t f = 0; f < shapes[0].mesh.indices.size(); f++) { + mesh->indices[f] = shapes[0].mesh.indices[f].vertex_index; + } + + for (size_t v = 0; v < attrib.vertices.size() / 3; v++) { + mesh->vertices[v].x = attrib.vertices[3*v+0]; + mesh->vertices[v].y = attrib.vertices[3*v+1]; + mesh->vertices[v].z = attrib.vertices[3*v+2]; + } + + result = vx_voxelize(mesh, voxelsizex, voxelsizey, voxelsizez, precision); + + printf("Number of vertices: %ld\n", result->nvertices); + printf("Number of indices: %ld\n", result->nindices); + } + return true; +} + + +int +main( + int argc, + char** argv) +{ + if (argc < 4) { + printf("Usage: voxelize input.obj voxelsizex voxelsizey voxelsizez precision\n"); + exit(-1); + } + + const char* filename = argv[1]; + float voxelsizex = atof(argv[2]); + float voxelsizey = atof(argv[3]); + float voxelsizez = atof(argv[4]); + float prec = atof(argv[5]); + bool ret = Voxelize(filename, voxelsizex, voxelsizey, voxelsizez, prec); + + return ret ? EXIT_SUCCESS : EXIT_FAILURE; +} + |