基于C++的三维模型体素化程序


用VS2013打开,修改模型输入输出位置,以及控制输出模型精度,即可进行三维模型的体素化。修改的位置已经在代码中注释了
资源截图
代码片段和文件信息
#define VOXELIZER_DEBUG
#define VOXELIZER_IMPLEMENTATION
#include “voxelizer.h“
#define TINYOBJLOADER_IMPLEMENTATION
#include “tiny_obj_loader.h“
#include 
#include 
#include 


#define TRIANGULATE
//#define POINT_CLOUD

int main(int argc char** argv) {
/*if (argc < 4) {
std::cout << “Usage: “ << std::endl;
std::cout << “ ./voxelizer file.obj resolution precision“ << std::endl;
return EXIT_FAILURE;
}*/

std::vector shapes;
std::vector materials;
std::string err;
bool ret = tinyobj::LoadObj(shapes materials err “models/teapot.obj“ NULL);//输入模型

if (!err.empty()) {
std::cerr << err << std::endl;
}

if (!ret) {
return EXIT_FAILURE;
}
std::cout << “shape_size:“ << shapes.size() << std::endl;
#ifdef TRIANGULATE
std::ofstream file(“mesh_voxelized_res.obj“);   //输出的体素模型
#endif

#ifdef POINT_CLOUD
std::ofstream file(“mesh_voxelized_res.txt“);
#endif

size_t voffset = 0;
size_t noffset = 0;

for (size_t i = 0; i < shapes.size(); i++) {
std::cout << “shapes_index_“ << i<<“:“ ;
vx_mesh_t* mesh;

mesh = vx_mesh_alloc(shapes[i].mesh.positions.size() shapes[i].mesh.indices.size());

for (size_t f = 0; f < shapes[i].mesh.indices.size(); f++) {
mesh->indices[f] = shapes[i].mesh.indices[f];
}
for (size_t v = 0; v < shapes[i].mesh.positions.size() / 3; v++) {
mesh->vertices[v].x = shapes[i].mesh.positions[3 * v + 0];
mesh->vertices[v].y = shapes[i].mesh.positions[3 * v + 1];
mesh->vertices[v].z = shapes[i].mesh.positions[3 * v + 2];
}

float res = 10;
float precision = 10;

#ifdef TRIANGULATE
vx_mesh_t* result;
result = vx_voxelize(mesh res res res precision);   //控制输出的体素模型精度
std::cout << “体素化完成,正在输出...“ << std::endl;
printf(“Number of vertices: %ld
“ static_cast(result->nvertices));
printf(“Number of indices: %ld
“ static_cast(result->nindices));

if (file.is_open()) {
file << “
“;
file << “o “ << i << “
“;

for (int j = 0; j < result->nvertices; ++j) {
file << “v “ << result->vertices[j].x << “ “
<< result->vertices[j].y << “ “
<< result->vertices[j].z << “
“;
}

for (int j = 0; j < result->nnormals; ++j) {
file << “vn “ << result->normals[j].x << “ “
<< result->normals[j].y << “ “
<< result->normals[j].z << “
“;
}

size_t max = 0;

for (int j = 0; j < result->nindices; j += 3) {
size_t i0 = voffset + result->indices[j + 0] + 1;
size_t i1 = voffset + result->indices[j + 1] + 1;
size_t i2 = voffset + result->indices[j + 2] + 1;

max = i0 > max ? i0 : max;
max = i1 > max ? i1 : max;
max = i2 > max ? i2 : max;

file << “f “;

file << i0 << “//“ << result->normalindices[j + 0] + noffset + 1 << “ “;
file << i1 << “//“ << result->normalindices[j + 1] + noffset + 1 << “ “;
file << i2 << “//“ << result->normalindices[j + 2] + noffset + 1 << “
“;
}

voffset += max;
noffset += 6;
}

vx_mesh_free(result);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-03-27 14:45  VoxelTest
     目录           0  2019-03-27 14:40  VoxelTest.vs
     目录           0  2019-03-27 14:40  VoxelTest.vsVoxelTest
     目录           0  2019-03-27 14:40  VoxelTest.vsVoxelTestv14
     文件       28672  2018-11-27 16:51  VoxelTest.vsVoxelTestv14.suo
     目录           0  2019-03-27 14:45  VoxelTestVoxelTest
     文件     7864320  2019-03-27 14:45  VoxelTestVoxelTest.sdf
     文件        1309  2018-11-27 10:23  VoxelTestVoxelTest.sln
     文件       25600  2019-03-27 14:45  VoxelTestVoxelTest.v12.suo
     目录           0  2019-03-27 14:40  VoxelTestVoxelTestDebug
     文件     2669299  2018-11-27 10:34  VoxelTestVoxelTestDebugmain.obj
     文件      470016  2018-11-27 10:34  VoxelTestVoxelTestDebugvc140.idb
     文件      888832  2018-11-27 10:34  VoxelTestVoxelTestDebugvc140.pdb
     文件        5585  2018-11-27 10:34  VoxelTestVoxelTestDebugVoxelTest.log
     目录           0  2019-03-27 14:40  VoxelTestVoxelTestDebugVoxelTest.tlog
     文件         738  2018-11-27 10:34  VoxelTestVoxelTestDebugVoxelTest.tlogCL.command.1.tlog
     文件       17810  2018-11-27 10:34  VoxelTestVoxelTestDebugVoxelTest.tlogCL.read.1.tlog
     文件         644  2018-11-27 10:34  VoxelTestVoxelTestDebugVoxelTest.tlogCL.write.1.tlog
     文件        1314  2018-11-27 10:34  VoxelTestVoxelTestDebugVoxelTest.tloglink.command.1.tlog
     文件        3342  2018-11-27 10:34  VoxelTestVoxelTestDebugVoxelTest.tloglink.read.1.tlog
     文件         622  2018-11-27 10:34  VoxelTestVoxelTestDebugVoxelTest.tloglink.write.1.tlog
     文件         188  2018-11-27 10:34  VoxelTestVoxelTestDebugVoxelTest.tlogVoxelTest.lastbuildstate
     文件        3567  2019-03-27 14:45  VoxelTestVoxelTestmain.cpp
     文件      495213  2019-03-27 14:43  VoxelTestVoxelTestmesh_voxelized_res.obj
     目录           0  2019-03-27 14:40  VoxelTestVoxelTestmodels
     文件    45104062  2017-05-29 14:15  VoxelTestVoxelTestmodelsuilding.obj
     文件      205917  2017-07-11 08:50  VoxelTestVoxelTestmodelsunny.obj
     文件         663  2017-07-11 08:50  VoxelTestVoxelTestmodelscube.obj
     文件     3466613  2017-07-11 08:50  VoxelTestVoxelTestmodelsdragon.obj
     文件      580788  2018-11-26 21:42  VoxelTestVoxelTestmodelshuiya.obj
     文件      248098  2017-07-11 08:50  VoxelTestVoxelTestmodelssuzanne.obj
............此处省略26个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)