OpenMesh 读写网格控制(读取写入纹理坐标,法向等)
OpenMesh读取网格默认是不自动读取obj网格中的法向,纹理坐标等信息的,写入网格同样也是。所以要读取(或写入)这些信息需要修改默认的选项。
先看一下其读写网格的函数
1 template<class Mesh> 2 bool OpenMesh::IO::read_mesh( 3 Mesh &_mesh, 4 const std::string &_filename, 5 Options &_opt, 6 bool _clear = true 7 )
1 template<class Mesh > 2 bool OpenMesh::IO::write_mesh( 3 const Mesh &_mesh, 4 const std::string &_filename, 5 Options _opt = Options::Default, 6 std::streamsize _precision = 6 7 )
函数中的参数 Options 就可以控制读写其他信息。
-
OpenMesh的IO::Options::Flag
在OpenMesh的官方文档中,有很多关于IO的options,更详细的内容请看这里 http://www.openmesh.org/media/Documentations/OpenMesh-Doc-Latest/a00231.html#details
enum Flag
{
Default = 0x0000, Binary = 0x0001, MSB = 0x0002, LSB = 0x0004,
Swap = 0x0006, VertexNormal = 0x0010, VertexColor = 0x0020, VertexTexCoord = 0x0040,
EdgeColor = 0x0080, FaceNormal = 0x0100, FaceColor = 0x0200, FaceTexCoord = 0x0400,
ColorAlpha = 0x0800, ColorFloat = 0x1000, Custom = 0x2000
}
这些options可以让你自定义读取/写入网格。
-
OpenMesh 读网格
如果想要在读取obj网格的时候自动读取纹理坐标,只需要添加读取纹理坐标的option,注意在读取网格之前要先给纹理坐标分配内存,即 request_vertex_texcoords2D()。读取法向或其他信息也是一样。
。
1 OpenMesh::IO::Options opt_read = 0x0040; //选项控制读取纹理坐标 2 ptr_mesh_->request_vertex_texcoords2D(); 3 if ( !OpenMesh::IO::read_mesh(*ptr_mesh_, byfilename.data(), opt_read) ) 4 { 5 std::cerr<< "Cannot Open mesh to file '1.obj'" << std::endl; 6 return; 7 }
-
OpenMesh 写网格
如果要想在写入网格时写入顶点的法向信息,也是同样的。
1 OpenMesh::IO::Options opt_write = OpenMesh::IO::Options::VertexNormal; 2 if (!OpenMesh::IO::write_mesh(*ptr_mesh_, "mesh.obj", opt_write)) 3 { 4 std::cerr << "Cannot Write mesh to file" << std::endl; 5 return; 6 }
如果要控制写入网格的数据精度,也很简单:
1 OpenMesh::IO::write_mesh(*ptr_mesh_, "mesh.obj", opt_write, 12)