zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    软件开发规范
    Fail2ban + firewalld 防护doss攻击
    SourceTree&Git部分名词解释
    训子
    一个网络下,手机如何访问本地网址
    tempalte.js的一般用法
    template.js的介绍
    获取URL中的参数
    js判断苹果和安卓端或者wp端
    HTML5与WebGL编程
  • 原文地址:https://www.cnblogs.com/VVingerfly/p/4415953.html
Copyright © 2011-2022 走看看