当前位置: 首页 > 专利查询>田捷专利>正文

利用半边数据结构实现三维网格模型的简化方法技术

技术编号:2950284 阅读:284 留言:0更新日期:2012-04-11 18:40
一种利用半边数据结构实现三维网格模型的简化方法,包括步骤:(1)获取三维模型的网格信息并构建半边结构;(2)初始化:计算每条边的折叠代价;(3)化简。本发明专利技术利用半边结构与二次误差准则进行网格简化的算法,不仅能够提高化简的速度,同时还具有广泛的适应性,是一种快速高效的面片化简算法。在计算机辅助设计,医学图像系统等领域有着重要的应用价值。(*该技术在2021年保护过期,可自由使用*)

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及数据结构,特别涉及结合半边结构和二次误差准则来进行面片化简的方法。然而在实际应用中,很多情况下并不需要十分精细的高分辨率模型。例如在虚拟现实中,背景以及比较远的物体,可以用比较粗糙的分辨率来表示;而对于较近的物体,则可用精细的模型来表达。由于处理模型所要耗费的时间与该模型的精确程度是一对矛盾,因而为了获得可接受的运算时间,我们必须用一些相对简单的模型来代替原始模型,也就是对模型进行简化。这种简化不是简单的删除模型中的三角形,而是根据实际要求,删除那些对模型影响相对较小的三角形,保留那些能反映模型几何特征的三角形。网格简化对于三维几何模型的存储、传输、计算和显示有着重要的意义。它可以减少磁盘和内存的需求,加速网络的传输,加速形状信息的计算如有限元分析,碰撞检测、可见性判断、形状识别,和实时显示等,同时也是多分辨率分析、层次细节模型LOD的基础。最近几年,面片化简包括多分辨率模型的问题得到了广泛的重视,也陆续提出了一些典型的算法,主要可分为顶点删除、顶点聚类和边折叠三类。Schroeder采用顶点删除然后再重新三角化的方法进行网格简化,这是首次提出通过几何元素删除来实现网格简化的方法。在三角网格中,若一点与其周围三角面片的距离小于某个设定的阈值,且这一点的删除不会带来拓扑结构的改变,那么就可将这点删除,同时所有与该顶点相连的面均被从原始模型中删除,然后对其邻域重新三角化来填补由于这一点被删除所带来的空洞。这种算法只适用于流体结构,速度较快,也不需要占用太多的内存,但在保持表面的光滑性方面存在困难。随后又陆续提出了一些更精确的误差测度。但这些算法在生成较高质量模型的同时,也需要花费更多的时间。Rossignac提出了顶点聚类的化简方法。该算法首先用一个包围盒将原始模型包围起来,再把包围盒划分为若干区域,将同一区域内的点合并为一个顶点,然后根据原始网格的拓扑关系对新顶点重新三角化,从而得到简化模型。这是一种通用的不保持拓扑结构的化简方法,而且速度较快。但它没有较好的误差控制,所以生成模型的质量不高。后来PeterLindstrom又拓展了此方法,使它能够简化无法一次调入内存的超大规模网格模型。Hoppe在Siggraph’93上提出了一种基于边折叠的面片化简方法,采用能量优化的方式来确定折叠次序和新顶点的位置,将网格简化问题归结为通过边折叠、边交换使能量函数最小的问题。后来Hoppe在1996年对此能量函数加以了改进,并且通过边折叠和点分裂构造了多分辨率的LoD模型。此方法计算复杂,所需时间较长,但是生成模型的效果却是在所有化简方法中最好的。Garland和Heckbert在97年提出了一种基于二次误差测度的化简算法(Quadric Error Metric,简称QEM),它以点到平面距离的平方和作为误差测度。该算法首先为原始网格中的每个顶点分配一个4×4的误差矩阵,根据误差矩阵计算网格中边折叠的代价和新顶点的位置;然后按照折叠代价从小到大的顺序进行折叠操作,折叠生成的新点的误差矩阵为折叠边的两个顶点的误差矩阵之和。QEM算法速度快,简化生成的模型质量也比较高,是一种非常有效的化简算法。后来Hoppe又对QEM进行了改进,将法向量、颜色及纹理等信息加入到误差矩阵中,采用翼边(Wedge-based)的数据结构,也得到了较好的效果。除了这三类以外,还有其他一些网格简化的方法。Greg Turk在1992年的Siggraph年会上提出了重采样方法(Re-Tiling)。Hinker和Hansen于下一年提出了一种区域合并的算法,即首先将法向差异较小的平面合并为一个大的平面,然后再重新三角化;后来Kalvin和Taylor又提出了基于区域生长的简化方法(超面法),这也是一个比较典型的区域合并方法;Michael Lounsbery和Tony DeRose将小波技术用于模型简化;Lindstrom在98年用化简前后体积的变化以及面积的变化作为误差测度,提高了化简速度并减少了内存占用。在网格简化这一类问题的研究中,不仅要考虑简化后的精度,还要尽可能的提高化简速度。原因在于如果简化速度过慢,将不能弥补直接绘制高分辨率模型所带来的时间损失,从而简化也就失去了意义,特别是在多分辨率分析及LOD模型中,这点显得尤为重要。为实现上述目的,一种,包括步骤(1)获取三维模型的网格信息并构建半边结构;(2)初始化计算每条边的折叠代价;(3)化简。本专利技术利用半边结构与二次误差准则进行网格简化的算法,不仅能够提高化简的速度,同时还具有广泛的适应性,是一种快速高效的面片化简算法。在计算机辅助设计,医学图像系统等领域有着重要的应用价值。下面结合附图详细描述本专利技术的网格简化算法。作为一种具体的实现方案,结构框图见附图说明图1。主要包括三个步骤构建半边结构,初始化和化简。其中第三步还包括合法性检查、边界处理等方面。下面对其逐一介绍。构建半边结构图2给出了半边结构的基本概念以及用其表示的网格模型。如图中所示,边e被分为两个具有相同端点但方向相反的边e1、e2,e1、e2就称为边e的两个半边,同时e1、e2构成一组邻居半边。发出半边的顶点称为半边的起点,半边指向的顶点称为半边的终点。如半边e1的起点为v2,终点为v1。边e两侧为它的两个邻面,每个邻面包含三条半边。采用半边数据结构时,我们将模型中边的信息存储在半边表中,而不是边表中。由图2可以看出,模型中每个面的三条半边构成了一组循环,其方向既可以是顺时针也可以是逆时针,但所有的面中半边循环的方向必须一致。显然,半边结构只适用于流体结构,因为非流体结构中会出现一条边的邻面超过两个的情况,这时其半边的邻居半边不唯一。半边数据结构的灵活性很强,可以根据不同的需要构建不同的顶点表、面表和半边表。事实上,半边结构的优点就在于它能方便的进行点、线、面之间邻接关系的查询而无需记录太多的信息。在我们将半边结构应用于面片化简当中时,采用下面几个简单的结构即可得到所需要的一切信息,同时边折叠后点、线、面之间邻接关系的更新也相当简单。在半边表中,每条半边所要记录的信息可用如下的结构来表示Struct HalfEdge{Vertex*vert;∥该半边的起始点HalfEdge*pair;∥该半边的邻居半边HalfEdge*next;∥该半边的下一半边(在同一面内)Face*face;∥该半边所在的面};在顶点表中,无需记录顶点的邻边、邻面。除了必不可少的顶点坐标和法向量外,只需要记录由该顶点发出的所有半边中的任意一条即可。顶点结构如下所示Struct Vertex{float vcoord;∥顶点坐标float ncoord;∥顶点法向量HalfEdge*he;∥由该顶点发出的任意一条半边 };在面表中,每个面只需记录其所包含的半边循环中的任意一条半边。面结构如下所示Struct Face{HalfEdge*he;∥该面所包含半边循环中任意一条半边};采用上述结构,我们可以很方便的查询点、边和面之间的邻接关系。如某条边的两个端点及两个邻接面可用如下方式得到Vertex*vert1=he->vert; ∥端点1Vertex*vert2=he->pair->vert;∥端点2Face*f本文档来自技高网...

【技术保护点】
一种利用半边数据结构实现三维网格模型的简化方法,包括步骤: (1)获取三维模型的网格信息并构建半边结构; (2)初始化:计算每条边的折叠代价; (3)化简。

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:田捷常红星张晓鹏蒋永实
申请(专利权)人:田捷常红星张晓鹏蒋永实
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1