从文件中读写网格

进行读写相应的函数在命名空间OpenMesh :: MeshIO中定义。 本节分为三个步骤:

  • 第一步将给出一个如何使用OpenMesh IOManager的简短示例。
  • 第二步将提供有关IOManager如何工作的一些背景信息。
  • 最后第三步将向您展示如何将自己的模块添加到IOManager。

IOManager的快速入门

  • 如果静态链接到OpenMesh,则必须将定义OM_STATIC_BUILD添加到应用程序。
  • IOManager使用文件扩展名来确定要使用的读写器。即 如果将“inputmesh.obj”作为文件名参数传递,则OBJ-File读写器将用于解析/写入文件。
#include <OpenMesh/Core/IO/MeshIO.hh>
MyMesh mesh;
if (!OpenMesh::IO::read_mesh(mesh, "some input file")) 
{
  std::cerr << "read error\n";
  exit(1);
}
// do something with your mesh ...
if (!OpenMesh::IO::write_mesh(mesh, "some output file")) 
{
  std::cerr << "write error\n";
  exit(1);
}

IOManager的理论

  • 通常,网格读取器和写入器例程直接针对数据结构和它们支持的相应文件格式编写。 这种方法的主要缺点是,针对不同的数据结构或添加另一种文件格式会导致代码重复。
  • IOManager通过读取器/写入器和导入器/导出器模块充当一侧的持久数据和另一侧的任意数据结构之间的接口。 这通过以下图表说明:
  • 任意格式的持久数据首先由读取器模块解释。 然后,数据通过指定的接口传递给目标数据结构的导入器模块。 写入数据的过程是类似的。 IOManager控制整个过程。 读/写器模块对用户是不可见的。 然而,必须明确指定导入器/导出器,因为它们特定于数据结构。
  • 数据结构和持久数据的完全分离使得维护现有代码和扩展两端的功能特别容易。

如何扩展IOManager

增加对新文件格式的支持

  • 添加对新文件格式的支持涉及添加读写器模块。 Reader模块是从OpenMesh :: IO :: BaseReader派生的类。 您通常必须定义的接口部分如下所示:
  • 根据文件扩展名或标题信息,IOManager决定使用哪个阅读器模块。 然后,阅读器解析格式,并将信息传递给目标数据结构,这是从OpenMesh :: IO :: BaseImporter派生的类的方法。

增加对新的数据结构的支持

  • 导入模块从阅读器模块接收信息。 Reader模块通过指定的接口传递信息:
  • 导入模块负责填充目标数据结构。 从数据结构导出信息比将数据导入数据结构要多一些。 编写器模块必须能够遍历所有向量、纹理 、 面。 因此,导出模块必须提供这些迭代器:
  • 可能需要导出器从其引用的结构缓存数据。 应该在每个BaseWriter :: save()方法的开头调用update()函数,它应该确保缓存的信息是最新的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值