• 大小: 14.34MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-19
  • 语言: C/C++
  • 标签: C++  Voxel  3D  

资源简介

用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 << “\t./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\n“ static_cast(result->nvertices));
printf(“Number of indices: %ld\n“ static_cast(result->nindices));

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

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

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

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 << “\n“;
}

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\.vs\VoxelTest\
     目录           0  2019-03-27 14:40  VoxelTest\.vs\VoxelTest\v14\
     文件       28672  2018-11-27 16:51  VoxelTest\.vs\VoxelTest\v14\.suo
     目录           0  2019-03-27 14:45  VoxelTest\VoxelTest\
     文件     7864320  2019-03-27 14:45  VoxelTest\VoxelTest.sdf
     文件        1309  2018-11-27 10:23  VoxelTest\VoxelTest.sln
     文件       25600  2019-03-27 14:45  VoxelTest\VoxelTest.v12.suo
     目录           0  2019-03-27 14:40  VoxelTest\VoxelTest\Debug\
     文件     2669299  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\main.obj
     文件      470016  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\vc140.idb
     文件      888832  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\vc140.pdb
     文件        5585  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\VoxelTest.log
     目录           0  2019-03-27 14:40  VoxelTest\VoxelTest\Debug\VoxelTest.tlog\
     文件         738  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\VoxelTest.tlog\CL.command.1.tlog
     文件       17810  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\VoxelTest.tlog\CL.read.1.tlog
     文件         644  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\VoxelTest.tlog\CL.write.1.tlog
     文件        1314  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\VoxelTest.tlog\link.command.1.tlog
     文件        3342  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\VoxelTest.tlog\link.read.1.tlog
     文件         622  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\VoxelTest.tlog\link.write.1.tlog
     文件         188  2018-11-27 10:34  VoxelTest\VoxelTest\Debug\VoxelTest.tlog\VoxelTest.lastbuildstate
     文件        3567  2019-03-27 14:45  VoxelTest\VoxelTest\main.cpp
     文件      495213  2019-03-27 14:43  VoxelTest\VoxelTest\mesh_voxelized_res.obj
     目录           0  2019-03-27 14:40  VoxelTest\VoxelTest\models\
     文件    45104062  2017-05-29 14:15  VoxelTest\VoxelTest\models\building.obj
     文件      205917  2017-07-11 08:50  VoxelTest\VoxelTest\models\bunny.obj
     文件         663  2017-07-11 08:50  VoxelTest\VoxelTest\models\cube.obj
     文件     3466613  2017-07-11 08:50  VoxelTest\VoxelTest\models\dragon.obj
     文件      580788  2018-11-26 21:42  VoxelTest\VoxelTest\models\huiya.obj
     文件      248098  2017-07-11 08:50  VoxelTest\VoxelTest\models\suzanne.obj
............此处省略26个文件信息

评论

共有 条评论