刘 磊,马劲松,刘 凯,沈 洁
(1.南京大学 地理与海洋科学学院,江苏 南京 210046;2.南京师范大学 地理科学学院,江苏 南京210046)
CityEngine三维建筑模型的简化算法研究
刘 磊1,马劲松1,刘 凯1,沈 洁2
(1.南京大学 地理与海洋科学学院,江苏 南京 210046;2.南京师范大学 地理科学学院,江苏 南京210046)
分析CityEngine的使用规则,为批量构建三维城市建筑模型,从模型的墙体、屋顶和纹理3个方面进行分类。探讨了实现多分辨率三维数字城市的技术方法,通过使用最小特征面平移算法实现对CityEngine三维模型的简化。
CityEngine;三维模型;简化;综合
近年来,三维数字城市的建设发展迅速,已能将三维城市景观很好地展示在屏幕上,但三维场景的大数据量给可视化造成很大的负担[1]。因此,国内外学者对三维数字城市建筑模型的综合作过很多研究。三维建筑模型综合是二维建筑物的综合方法和技术在三维空间中的扩展,内容广泛[2]。武芳等分析了三维建筑模型的分类和识别,探讨了取舍、化简、概括和位移等二维综合的基本方法[3]。在三维建筑物综合中,建筑物的简化是一个重要问题。葛磊等提出了基于最小特征的面平移算法[4];Andrea Forberg提出三维建筑矢量数据的综合方法,集合数学形态学和曲率空间的优点,使综合过程变得更快、更简便[5]。 Ribelles等提出将多余要素与建筑主体分离并删除,然后填洞的三维建筑简化算法[6]。ESRI的CityEngine三维城市建模系统发展迅速,它可以利用二维数据快速创建大量的三维场景,并能高效地进行规划设计,应用广泛。尝试将CityEngine建立的城市建筑模型进行综合,以实现不同空间细节层次的三维城市模型。
1.1 基于CityEngine的城市三维建筑建模
1)CityEngine的功能。CityEngine能将测绘所得建筑平面数据快速建成三维建筑模型。它支持多种GIS数据格式,如ESRI Shapefile、KML等;可支持多种3D格式的数据输出,如Collada、DXF以及3DS等。
2)CityEngine三维建模特点。CityEngine建模的最大特点是基于规则的建模,通过总结建筑物的共性和特性来编写CGA(computer generated architecture)规则文件。共性是指一般建筑物的大体结构,如墙体、屋顶等的分区;特性是指各个建筑物所具有的不同属性,如楼房高度、屋顶样式等。
1.2 三维模型的简化
城市建筑模型的形态类型。将测绘所得的房屋地籍数据作为三维建模的二维基础数据(图1a),经过CityEngine三维建模的结果如图1b。本文从2个方面来探讨我国常规城市建筑的形态分类。
图1 CityEngine建模效果
首先是根据墙体分类。可将平面图形成的墙体大致分为以下3类:墙体无凸凹(图2a),墙体一面有凸凹(图2b),2面都凸凹(图2c),三维效果如图3。
图2 墙体分类的二维效果
其次是根据屋顶分类。我国现有城市建筑的屋顶样式可归类为以下3种: 尖顶(图4a),斜坡顶(图4b),平顶(图4c)。
图4 建筑屋顶分类
1.3 模型简化方法
通过CityEngine建立的三维数字城市模型包括三角面构成的平面和纹理贴图,所以本文的简化内容包括平面细节简化、纹理删除等。模型平面的简化包括墙面简化、屋顶简化以及外部附属物简化。本文主要讨论墙面和屋顶的简化。
墙面凹凸结构的简化是两两比较墙面所在平面,通过2平面与模型中心点的比较判定2平面的相对位置来识别凹凸结构,并通过2平面面积大小来判断平面平移方向,从而达到简化墙面的作用。此过程主要使用了最小特征面平移算法。
屋顶的简化首先通过先验知识(墙体垂直地面)识别墙面,通过与墙体所在平面的夹角来识别屋顶面,从而区分出墙面点和屋顶点。最后平移屋顶点至屋顶面与地面平行,达到屋顶面的简化效果。此过程使用了点平移算法。
2.1 模型文件的结构、输入输出
CityEngine通过输入二维GIS数据,采用编写的CGA规则文件进行三维建模。本文选用3DS作为数据输出格式,存储模型的几何信息和材质信息。几何信息主要包括顶点的数目、每个顶点的坐标、三角面数目、每个三角面上3个顶点的索引。三维建筑简化的操作对象主要是模型的几何信息。
2.2 模型的简化算法实现
根据CityEngine所建立的3D模型进行墙面和屋顶的简化,如图5。
图5 三维模型简化流程图
2.3 构造平面算法
建筑物模型的表面由平面构成,所有的简化处理操作都是以平面为单位,但3DS模型都是由三角面构成的(如图6),所以首先需要将三角面组成平面[7],根据法向量共向和面面共点这2个必要条件,组合在同一个平面上的三角面形成一个完整的平面。法向量可由式(1)获取,法向量共向可用它们之间的夹角的余弦值为0来判定,如式(2)。通过式(3)和式(4)获取三角面和平面的面积特征值。
图6 三角面构成三维模型
式中,P1、P2、P3表示平面上任意3点,通过式(1)计算得到平面的法向量Normal1。
式中,Normal1、Normal2表示2平面的法向量,表示2平面之间的夹角。
式中,A、B、C为三角面的三边边长;P=(A+B+C)/ 2;S表示三角面面积。
式中,SΔi表示构成平面的第i个三角面的面积;S平面表示平面面积。
2.4 墙面凹凸判断方法
建筑物墙面凹凸主要依据建筑物中心到平面的距离大小来判定。具体判断算法如下:
2)将平面两两比较,如果2平面法向量方向相同,则进行步骤3),否则比较另外2组平面。
3)判断2个平面是否在中心点的同一侧,如果在,则进行步骤4),否则比较另外2组平面。
4)计算2个平面的平面方程。任取平面内4个点,根据ax+by+cz+d=0建立方程组计算出a、b、c、d的值,从而计算出平面方程。
5)通过式(5)分别计算中心到2平面的距离,具有相对较小距离的平面为凹面,相对较大距离的面为凸面,如图7。
式中,a、b、c、d为平面方程的参数;x,y,z为中心点的三维坐标值。
图7 墙面凹凸
2.5 面平移算法
面平移算法的原理是通过平移平面的点来消除建筑物模型细节信息,包括墙面凹凸、外部附属物、屋顶等。首先对墙面和外部附属物进行简化的算法如下:
1) 两两比较平面,若2个平面的法向量同向,则进行步骤2),否则比较下一组平面。
2)分别计算中心点到2平面的投影,通过中心点与投影点的方向判定2个平面是否在中心点的同一侧。如果在同一侧,则进行步骤3),否则比较另外2组平面[8]。
3)获取并比较2平面的面积S,用式(6)计算2平面的距离,如图8a红色部分。如果V于等于整个模型的体积V总的1/3,则进行步骤4),否则比较下一组平面。
4) 将小面积平面的所有点朝着大面积平面的方向平移距离D,从而使得2平面共面,如图8b。
图8 墙面简化
屋顶的识别与处理步骤如下:
1)首先遍历所有平面,通过判断平面是否垂直地面判断出模型的墙面(图9的灰色部分)。
2)遍历两两平面之间的夹角,当夹角不等于90°且不为墙面(图9深色部分)时,判定平面为屋顶面(图9浅色部分)。
3)遍历屋顶面所有点,若点是屋顶面和墙面公共点,则判定为墙面点,否则为屋顶点。
4)向地面方向平移屋顶点,直至各屋顶面共面,完成屋顶简化。
图9 屋顶简化
3.1 三维模型的读取和显示
本文使用CityEngine建立的三维数字城市模型导出为3DS数据结构,在VisualStudio 2012平台上使用C++语言对三维模型读取点、面、纹理信息后,使用OpenGL对模型进行三维显示。
3.2 三维模型简化效果
三维模型的简化效果主要有2方面的内容:模型细节简化,如图10;数据量减少,如表1。
图10 简化效果
表1 三维模型简化数据量减少情况
使用CityEngine建立三维城市模型,分析模型结构特点和三维模型存储结构,探讨三维数字城市模型综合基本方法,并在此基础上讨论此方法对CityEngine建立的三维数字城市模型进行综合的可行性。本文选择其中的简化方法进行实验,使用面平移算法实现了对三维数字城市模型的简化。从三维模型形状上分析,模型的凹凸结构、纹理、屋顶样式等都得到了有效简化,从数据量上实现了三维模型的点面数据量减少。同时,此简化算法仍存在一定的局限性,如在进行屋顶简化时,由于使用了点向下平移方法,导致整个建筑物的高度降低,这与实际不符。但从整体简化结果来看,面平移算法和点平移算法能很好地实现CityEngine 3D模型的简化。参考文献
[1] 周艳,朱庆,黄铎,等.三维城市模型中建筑物LOD模型研究[J].测绘科学,2006,31(5):74-77
[2] 王庆国,朱庆,艾廷华,等.建筑物三维表面模型简化算法探讨[J].测绘科学,2007,32(2):84-86
[3] 葛磊,武芳,朱强,等.三维建筑综合基本方法的探讨[J].测绘信息与工程,2009,34(2):15-17
[4] 葛磊,武芳,王鹏波,等.3维建筑综合中基于最小特征的面平移算法[J].测绘科学技术学报,2009,26(2):103-105
[5] Forberg A,Mayer H.Scalecale-Space Events for the Generalization of 3D-Building Data[C].Amsterdam,2000
[6] Ribelles J,Heckbertps.Finding and Removing Features from Polyhedra[C].Detc’01 Asme Design Engineering Technical Conferences,2001
[7] 杨姣,李光,罗守华,等.基于近平面合并的三角网格简化算法[J].软件,2011,32(5):14-17
[8] 曹菡,陈军.方向关系与距离关系的定性描述与推理[J].西安石油学院学报:自然科学版,2001,16(1):68-72
P208
B
1672-4623(2016)04-0010-03
10.3969/j.issn.1672-4623.2016.04.004
刘磊,硕士,主要研究方向是GIS应用与二次开发。
2015-03-06。
项目来源:国家自然科学基金资助项目(41371433,41071288)。