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)

 

posted @ 2015-04-10 23:26  VVingerfly  阅读(5460)  评论(0编辑  收藏  举报