OpenMesh简介


OpenMesh是一个通用的、高效的数据结构,用来表示和处理多边形网格(polygonal mesh)。它的设计遵循以下几个原则:

  1. 灵活:为不同的算法提供了通用基础,而不需要进行调整。
  2. 高效:在最大程度节省了时间的同时尽可能的降低内存使用。
  3. 易用:为处理复杂的内在结构提供了易用的接口。

特点

OpenMesh有以下特点:

  • 任意多边形的表示(通常情况)和三角网格表示(更加高效的、专门优化的)。
  • 明了的vertices、halfedges、edges和faces表示。
  • 快速的邻域访问,尤其是One-ring neighborhood
  • 高度可定制性:
    • 可选择坐标类型(维度和标量类型)
    • 为网格添加用户自定义的元素或函数
    • 在运行过程中用动态特性添加数据

halfedge数据结构

多边形网格包含几何(vertices)和拓扑结构(edges,faces)。多边形网格数据结构的主要区别在于存储拓扑信息的方式。基于面的结构缺少清晰的边的表示,基于边的结构因为丢失了边的方向导致效率低下,而半边结构克服了这些缺点。半边结构(使得边分成了不同朝向的两个部分)存储主要的连通信息:

这种方法表示出的点边面简单又直观。半边数据结构如上图所示,它将两点之间的边抽象成两条边,首先包含一个点,给定一个向量又能表示出这个点所在的面,同时还存储了指向的下个半边和对面的半边,下个半边可以认为是vertex的跳转,对面的半边则是face的跳转。半边结构还包含可选的前向半边。

重复(2-4)可以实现相邻节点的遍历。

实现

下图为OpenMesh各部分的交互。

该架构允许用户定义网格 ,用户可以为点边面制定任意的特性,或者为网格kernel选择预先定义的属性。kernel负责网格成员的存储,可以选择使用数组或双链表作为容器类型。因为不同属性的网格需要使用不同的C++类型,OpenMesh使用泛型编程实现网格的算法。类STL的方法有以下优点:

  • 非虚函数表和动态绑定
  • 没有内存和运行时开销
  • 输入数据是模板参数,在编译时

开始懂了


今天去隔壁南大做了一次oral,ICIMCS,一个不知名的小会议。对于做演讲这种东西,我大概是我们实验室最不适合的,然而最近实验室实在没人,也就硬着头皮上了……

和CCDC一样,让我感受最深的是,即使是我们眼中的“水会”,依然有许多有心人专注地对待。我很喜欢那种台上的演讲者耐心讲解,台下的听众用心聆听的完整和谐的学术氛围,我更欣赏speaker和audience交流时碰撞出的思维的火花,一种纯粹的对科学的热爱。

惭愧的是,我还是只能念着丑陋的ppt,偶尔穿插一句事先准备好的台词,做着生硬乏味的presentation,自以为"fairly good"的英语,却又在主持人的简单问题下原形毕露……也许是我已经习惯了应付,习惯了对自身缺点的逃避,我妄想遮掩它们,却从未做出过改变。

我多希望过去的那个懦弱的一味逃避的自己死掉,我不希望自己满足于仅仅做个台下的聆听者,我希望有一个不一样的自我取代他……

晚安,Double Young...


双标


琪琪早上发了一段话给我:狮子座是一个非常自我的星座,在他们眼里,自己永远是最优秀的,无人能敌,方方面面他都要占主导地位。

最近同门说我双标,对琪琪十分不耐烦,对她又耐心解释各种问题。相处时间长了,开玩笑互相diss确实容易麻木,加上我本身又容易迷之自信,说话和态度是有些膨胀,在这里向琪琪道个歉(反正你也看不到)。

 

 

 

抽空写博客确实是极好的,能将我的所见所闻所思所感记录下来,形成个人的心路历程,少一些经纶事务的困扰,多一些思想上的沉淀 。这里强调四个字:贵在坚持。

以上


???


北京是目前为止我在这个星球上到过的纬度最高的地方,这个记录后天将会被刷新。过去的几个月,我反复质问自己,我是谁,我在哪,我为什么在这里,现在的生活是不是我所想要的。我找不到答案。每次场景的转换都让我极度不适应,我做不到随遇而安。
徘徊于主楼与万人食堂之间,辽阔的树荫将我的影子遮蔽,我会一脸羡嫉的看着THUer们骑车从我身边掠过。时不时会有人向我问路,我的回答也越来越熟练与肯定。我不想将这种体验成为孤独,但它确实令我又爱又恨……