基于重新划分的三角形网格简化的一种改进算法

1649 篇文章 11 订阅
1623 篇文章 22 订阅

周 昆 马小虎 潘志庚 石教英

(浙江大学CAD&CG国家重点实验室 杭州 310027)



摘要 基于重新划分的三角形网格简化方法能自动生成多细节层次模型,它的基本思想是:根据三角形网格的局部几何和拓扑特征将一定数量的点分布到原网格上,生成一个中间网格,移去中间网格中的老顶点,并对产生的多边形区域进行局部三角化,最后形成以新点为顶点的三角形网格.本文在已有算法的基础上,提出了一种分布新点的算法,从而克服了原有方法的局限性.它利用三角形顶点的曲率和三角形的面积两个因素来反映网格在每个三角形处的特征.文中给出的一组实例说明了算法的有效性.
关 键 词 三角形网格,约束三角化,曲率,细节层次.
中图法分类号 TP391

An Improved Algorithm of Triangle Mesh Simplification Based on Re-tiling

ZHOU Kun MA Xiao-hu PAN Zhi-geng SHI Jiao-ying

(State Key Laboratory of CAD&CG Zhejiang University Hangzhou 310027)

Abstract  Triangle mesh simplification based on re-tiling is an automatic method for creating models at multiple levels of detail. Its basic idea is to distribute a set of new points onto original mesh based on the local geometry and topology features of triangle mesh, create an intermediate mesh, remove old vertex from the intermediate mesh, retriangulate the holes left by removal of old vertex, then new triangle mesh containing new points is created. In this paper, the authors present a new method for distributing new points, using the curvature at the vertices of triangle and the area of triangle. Examples illustrate efficiency of the algorithm.

Key words Triangle mesh, constrained triangulation, curvature, levels of detail


在计算机图形学应用领域,经常采用多边形网格(特例为三角形网格)来描述物体模型.用这种方法描述复杂物体时,需要成千上万的多边形才能刻画出复杂物体的细节,结果导致庞大的物体模型.由于绘制时间和存储量与多边形的数目成正比,因此过于庞大的物体模型通常是不实用的.采用多边网格简化方法,能在保持物体基本形状的前提下大大减少多边形的数目,得到简化的物体模型.由于多边形网格简化方法的实际意义,有许多学者对此进行了研究,如Schroeder[1],Hoppe[2],Turk[3]等.其中Turk在文献[3]中提出了一种基于网格重新划分的多边形网格简化方法.这种方法先将一定数量的点分布到原有网格上,然后新点与老顶点生成一个中间网格,最后删除中间网格中的老顶点,并对产生的多边形区域进行局部三角化,形成以新点为顶点的三角形网格.其中分布新点采用排斥力算法,即先随机分布新点,然后计算新点之间的排斥力,根据排斥力在网格上移动这些新点,使它们重新分布.排斥力的大小与新点之间的距离、新点所在三角形的曲率和面积有关.实践表明,这种方法存在两个局限性:①这种方法对那些较光滑的模型是很有效的,但对于那些不光滑的模型,效果较差[3];②由于根据排斥力重新分布新点,涉及到平面旋转或投影,计算量和误差都较大.
针对上述排斥力算法的局限性,本文提出了一种分布新点的算法.该算法选择两个因素来反映网格在各个三角形处的特征.(a) 三角形的曲率:用来反映网格在该三角形处的弯曲程度.(b) 三角形的面积:用来反映原网格在该三角形处的疏密程度.
  由于能分布的点的数量有限,我们对这两个因素交叉考虑.分布的原则是:新点要优先分布到弯曲程度(即曲率)较大的三角形上;新点要优先分布到较稀疏,即三角形面积较大的三角形上.
本文第1节描述算法,着重阐述了分布新点的算法.第2节是算法应用.最后是讨论.
1 算法描述
为叙述方便和清楚起见,首先引入一些基本概念.
1.1 基本概念
定义1.
空间中一组三角形,沿公共边及在顶点处相邻接,把这样的一组三角形定义为三角形网格(TM),TM可以由顶点集合V={V1,V2,...,Vn}和三角形集合T={T1,T2,...,Tm}所组成的二元组(V,T)来表示.
  定义2. 对TM中任一顶点Vi,有一个或多个三角形使用了Vi,把这些三角形定义为与顶点Vi相关的三角形Tik,简称相关三角形(0<in,0<km).
定义3. 把TM边界上的顶点定义为边界顶点,其余为非边界顶点.
定义4. 对TM中任一顶点Vi,与Vi相关的所有三角形Tik按逆时针方向排列,则构成有序三角形环(或半环),简记为TLi.相应的顶点则构成有序顶点环(或半环),简记为VLi.对边界顶点,则有一个有序顶点半环围绕该顶点;对非边界顶点,则有一个有序顶点环围绕该顶点.
定义5. 设与简单顶点相关的有序三角形环中每个三角形的法向量为Image265.gif (882 bytes),中心为Image266.gif (878 bytes)i,面积为Ai,那么由式(1)定义的法向量Image265.gif (882 bytes)和中心Image266.gif (878 bytes)所构造的平面定义为三角形环的平均平面.

406-g1.gif (2819 bytes)

(1)
定义6. 三角形的曲率是指该三角形3个顶点的曲率的平均值,在连续曲线或曲面上,顶点的曲率定义为该点曲率半径的倒数,曲率半径越小曲率越大.
定义7. 带权重心是指以三角形3个顶点的曲率为权值的重心.
1.2 分布新点
把一定数量的点分布到原网格上去,这些点将作为最后生成的新网格的顶点.为了使新网格尽可能地保持原网格的特征,应将这些点分布到最能反映原网格特征的三角形上去.我们采用算法1来分布新点.
算法1. 分布新点(设新分布的点数为2n)
步骤1. 对三角形网格中每一顶点求出其曲率,从而得到每一三角形的曲率.
步骤2. 按曲率值从大到小排序所有的三角形.
步骤3. 选择前n个曲率较大的三角形,在每个三角形的带权重心上分布一个新点.
步骤4. 以各三角形面积所占三角形网格总面积的百分比为每个三角形的概率,随机选取n个三角形,在每个三角形的带权重心上分布一个新点.
注: 若某个三角形上已分布了一个新点,则令其概率为0,以使每个三角形面片上至多分布一个新点.
(1) 曲率计算
对于离散点构成的二维多边形或空间多面体,曲率没有明确的定义.我们先考察二维折线ABC,如图1所示.显然,当θ角在0~90°范围内变化时,θ角越小,即|tgθ|越小,B点的弯曲程度就越大;当θ角在90~180°范围内变化时,θ角越大,即|tgθ|越小,B点的弯曲程度越大.我们可以用1/|tgθ|来定义曲率,|tgθ|在这里起了曲率半径的作用,|tgθ|越小,曲率越大.把这个概念推广到三维.如图2所示,设简单顶点Q,Image265.gif (882 bytes)为Q点的平均平面的法向量,P1,P2,...,Pk为Q点周围的顶点环中的所有顶点,Image265.gif (882 bytes)i为从Q点到Pi点的向量(i=1,2,...,k),θiImage265.gif (882 bytes)Image265.gif (882 bytes)的夹角,则Q点的曲率可以按式(2)计算.

406-g2.gif (2605 bytes)

(2)
上述对离散点的曲率的估算方法其实是很粗糙的.若需要得到较精确的值,可以对离散数据先作插值或拟合,再求曲率.但这样会增加计算的复杂性,降低速度.鉴于我们需要的只是曲率值的相对大小,所以上述估算还是很有效的.
(2) 新点在三角形上的分布
  选择了新点应投置的三角形,还要考虑新点在该三角形中的确切位置.这有很多种选择,可以随机分布,也可以固定某一位置;固定某一位置可以是内心,也可以是重心,我们选择带权重心.所谓权是指三角形三点的曲率,这样可以使新点更靠近三角形三点中曲率最大的点,更能反映原网格的特征.设三角形三点的曲率值和坐标向量分别为curvature[i]和coord[i](i=1,2,3),则新点的坐标向量new_coord可以按式(3)计算.

406-g3.gif (2591 bytes)

(3)

由于一个三角形的带权重心只有一个,所以,如果有两个新点同时分布到同一个三角形上,这两个新点会重合.解决这个问题的方法是,限定一个三角形上最多只能分布一个新点.由于整个多细节层次模型自动生成算法的目的是简化数据量很大的模型,新分布点的数量总是小于原模型的三角形个数,所以这个限制是合理的,同时也可以使新点均匀分布开.
  实际上,在整个多细节层次模型的自动生成算法中[4],分布新点这一步是至关重要的.因为新分布的点在老顶点被删除后,将作为最后生成的网格的顶点,所以新点分布的好坏,决定了新网格的质量,因而是整个算法中最关键的一步.本节详细阐述的分布新点的算法1,实现简单,速度快.对较光滑的数据,简化率高,效果好;对于不是很光滑的数据,在分布的点的数量较多的情况下效果也较好.在后面的小节中将进行更详细的讨论.
1.3 中间网格的生成
  
在新点分布到原网格上去后,中间网格的生成就变得很简单了.如图3(a)所示,原三角形ABC中分布了一点D,从D向A,B,C各引一条边,原三角形ABC就被分割成3个三角形ABD,BCD,CAD,所以中间网格实际上是原网格的加密,原网格越有特征的部分加密得越多.这里必须注意一些边界情况,如新点近似落在原三角形的一条边上,如图3(b)所示;或与原三角形的一个顶点近似重合

407-03.gif (3350 bytes)

图3

1.4 新网格的生成和优化
扫描所有的老顶点,对每一个简单顶点,找出其周围的有序三角形环和有序顶点环(在中间网格中);删除老顶点后,对有序顶点环构成的空间多边形进行三角剖分,并进行优化.图4(a)为老顶点Q及其周围的有序三角形环,图4(b)为删去Q进行三角化后的三角形集.

407-04.gif (3218 bytes)

图4

由于有序顶点环中的顶点都在平均平面附近,因此可以采用投影方法,把一个三维三角化问题转化为平均平面上的二维三角化问题,这个三角化过程的基本思想是:把有序顶点环中每一顶点投影到平均平面上,顺序连接投影点,得到一平面多边形,如果该多边形是自交的,则表示该环不能三角化,那么产生该环的老顶点不能删除;否则,计算出每一顶点的凸凹性[5]:每次取一凸点及其前后两点形成一个三角形,如果该三角形不包含多边形上其它顶点,则保存该三角形,并删去该凸点.重复这个过程直到三角剖分完成为止.实践表明,这种基于投影的平面带约束三角化方法不仅实现简单,而且比较有效.
对删除老顶点后的多边形区域进行了三角化,生成的三角形有可能会出现太尖的情况,根据逼近论的分析结果,三角形曲面的逼近误差与三角区域的最小内角有关,避免过尖的三角形就可提高逼近精度.为此,我们按最大-最小角优化准则,对生成的三角形网格进行局部优化,具体算法可参见文献[5].图5给出了一个局部优化的例子,其中图5(a)为局部优化之前的局部三角形网格,图5(b)为局部优化之后的局部三角形网格.当然,平面最优网格,并不一定是空间最优网格,但由于有序顶点环在平均平面附近,所以这种平面三角形网格优化还是很有效的.

407-05.gif (3483 bytes)

图5

2 算法的应用和讨论
本文所有算法已在SUN SPARC工作站上用C语言实现,图6和图7是一组例子.实践表明,该算法对较光滑的模型数据简化效果是比较好的.如图6中兔子的模型,在简化65%之后与原模型还很接近,而最大简化率可达95%.其他光滑模型,尽管原模型数据量不太大,简化率也达到90%,而且效果较好.对于不光滑的数据,如带头发的人头、山脉,效果比较好.对山脉而言,该算法可以使其大部分山峰和山谷得到保存,因而基本上保持了原网格的特征.但对这种数据,简化率只能达到70%左右.对于那种极其规整的机械零件数据,本文提出的算法效果则不理想,简化率在40%左右时,新网格较原网格已经有明显失真.因为对于零件而言,原模型中存在较多的直线边,按人的观点,直线只要确定其两端点就可以确定该直线;但本文算法是根据曲率和面积来判断三角形的特征,对算法而言,直线上每一点都是很重要的,这就导致了整个模型中具有特征的点(三角形)太多,分布的新点数量要很多.而且即使新点的数量足够多,也不一定能保证原来网格中的直线边在新网格中仍是直线棱边.事实上,分布的新点数量较少时,新网格也能保持原网格中直线棱边的两端点;但分布新点的数量即使很多,也很难保证两端点之间的其余点都在同一直线上.
所实现的三角形网格简化算法可望在虚拟现实和交互式可视化中得到应用.该算法既可以根据用户指定的粗细程度(能分布的新点个数)生成新模型,也可以根据多细节层次模型中所要求的细节层次个数,自动计算出所需要的顶点个数,并生成一系列模型.

408-06.gif (49024 bytes)


(a)原始模型 (b)简化模型1 (c)简化模型2 (d)简化模型3
(34 836个点) (10 241个点) (5 252个点) (2 754个点)

图6 算法生成的LOD模型(例1)

408-07.gif (50008 bytes)

(a)原始模型 (b)简化模型1 (c)简化模型2 (d)简化模型3
(2 732个点) (2 055个点) (1 088个点) (600个点)

图7 算法生成的LOD模型(例2)

3 结束语
本文提出的基于重新划分的三角形网格简化的改进算法简单明了、速度快,并且效果较好.文中还提出了一种曲率的近似计算方法.该算法可用于虚拟现实中多细节场景的生成和交互式可视化中.今后的工作包括以下两方面:(1) 提取更多的能反映原网格特征的因素;(2) 寻找简化网格与原网格逼近程度的度量.

本文研究得到国家自然科学基金和浙江大学曹光彪科技基金资助.作者周昆,1977年生,硕士生,主要研究领域为虚拟现实,限时计算.马小虎,1963年生,博士,副教授,主要研究领域为计算机图形和中文信息处理.潘志庚,1965年生,博士,研究员,主要研究领域为计算机图形,虚拟现实,多媒体计算.石教英,1937年生,教授,博士导师,主要研究领域为多媒体,计算机图形,可视化.
本文通讯联系人:潘志庚,杭州 310027,浙江大学CAD&CG国家重点实验室
本文1996-12-10收到原稿,1997-06-19收到修改稿

参考文献

1 Schroeder W J, Zarge J A et al. Decimation of triangle meshes. Computer Graphics, 1992,26(2):6570
2 Hoppe H, DeRose T et al. Mesh optimization. Computer Graphics, 1993,27(SIGGRAPH'93 Special Issue):19
26
3 Turk G. Re-tiling polygonal surface. Computer Graphics, 1992,26(2):55
64
4
潘志庚,马小虎,石教英.虚拟环境中多细节层次模型自动生成算法.软件学报,1996,7(9):526531
(Pan Zhi-geng, Ma Xiao-hu, Shi Jiao-ying. The automatic generation algorithm for models at multiple levels of detail in virtual environment. Journal of Software, 1996,7(9):526
531)
5
潘志庚,马小虎,董军等.基于图的二维任意域内点集的Delaunay三角剖分算法.软件学报,1996,7(11):656661
(Pan Zhi-geng, Ma Xiao-hu, Dong Jun et al. A graph-based algorithm for generating the delaunay triangulation of a point set within an arbitrary 2D domain. Journal of Software, 1996,7(11):656
661).

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值