<2x2>OpenMesh译:使用并理解OpenMesh-半边数据结构

                                              

半边数据结构

本节描述用于存储网格顶点,边,面及其连接信息的基础数据结构。

有许多应用广泛的数据结构用于表示多边形网格。有关它们的详细比较,请参阅本节末尾的参考文章。

本项目中所使用的数目结构为半边数据结构。基于面的数据结构将网格的连接性存储在顶点与其邻接单元上,而基于边的数据结构将网格的连接性存储在边上。假设将这条边在中间一分为二(例如,连接顶点A与B的一条边将会被分成两个有向半边,从A指向B为一个半边,反之亦然),将会获得半边数据结构,下面这张图阐述了半边数据结构存储的连接性。

译者注:下面这张图十分重要!!!

http://www.openmesh.org/Documentation/OpenMesh-Doc-Latest/halfedge_structure3.png

  1. 每个顶点对应一个出边。例如,一个半边从顶点1出发;
  2. 每个面对应一个半边为它的边界,例如面2;
  3. 每个半边指向的对象如下:

            a. 指向下一个顶点3;

            b. 指向一个面4;

            c. 指向下一边半边5;

            d. 指向反向的半边6;

            e. 指向上一个半边7(可选)

基于这种数据类型的链接,可以方便的实现根据一个面寻找它的顶点、半边或者邻接面。从一个半边的顶点开始迭代至其上一个半边的相反半边,可能轻易的计算出这个顶点,这个顶点进/出半边或者邻接单元。这些功能封装在迭代器中,详情请看网格迭代器与循环器(Mesh Iterators and Circulators)

注意:

  1. 为了有效地对边界顶点进行分类,这些边界顶点所对应的出半边必须为边界半边,参见OpenMesh::PolyMeshT::is_boundary();
  2. 无论何时当你使用修改函数更改拓扑关系时,请务必保证此行为,详情参阅OpenMesh::PolyMeshT::adjust_outgoing_halfedge()。

尽管您不需要存储上一个半边(7),因为这可以通过下一个半边的链接性中得出,但为了时间性能,您或许可以选择这么做。实际上,上一个半边在缺省状态下为保存状态(OpenMesh::DefaultTraits),为了获取更多的存储空间您可以使用属性将上一个半边移除。这种使用方式在Specifying your MyMesh中有所陈述。

虽然基于半边的结构通常比基于面的结构消耗更多的内存,但它们具有以下重要优点:

  1. 在一个网格中加入面或顶点十分容易;
  2. 可以明确的表示面、边和顶点,由于这种结构能够轻易的实现这些类型的成员变量模块化,用来存储每条边/半边的数据将会非常有用;
  3. 通过一个顶点计算其邻接面、边对于多边形的各种几何计算非常重要。基于面的数据结构将会导致许多类似if-then的分支,半边数据结构能够在常数时间内提供这种功能且不需要条件分支。

参考文献

S. Campagna, L. Kobbelt, H.-P. Seidel, Directed Edges - A Scalable Representation For Triangle Meshes , ACM Journal of Graphics Tools 3 (4), 1998.

Lutz Kettner, Using Generic Programming for Designing a Data Structure for Polyhedral Surfaces, in Proc. 14th Annual ACM Symp. on Computational Geometry, 1998.

译者说明:因科研需要,避免重复造轮子,近来借用OpenMesh,因其结构封装严谨,灵活可靠,且十分方便,故抽出时间对官网的说明做点翻译。英文水平不高,如翻译有误请多多包涵,也请您多多指正。

上一篇:使用并理解OpenMesh-OpenMesh的功能和目标

下一篇:使用并理解OpenMesh-迭代器与循环器

英文原文地址:http://www.openmesh.org/Documentation/OpenMesh-Doc-Latest/index.html
--------------------- 
作者:feengg 
来源:CSDN 
原文:
https://blog.csdn.net/feengg/article/details/85983372
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 


 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值