75 lines
1.9 KiB
C++
75 lines
1.9 KiB
C++
#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;
|
|
}
|
|
|