混合数据模型在建筑物三维建模中的应用的制作方法

文档序号:12819759阅读:360来源:国知局
混合数据模型在建筑物三维建模中的应用的制作方法与工艺

本发明涉及一种混合数据模型在建筑物三维建模中的应用,属于三维建模技术领域。



背景技术:

建筑物是城市中的主要地物,建筑物三维建模是计算机图形学、地理信息系统、摄影测量学及其相关学科研究的热点,并在虚拟现实、复杂场景设计、计算机视觉和三维gis等领域得到了广泛应用,建筑物三维建模方法直接影响到城市三维可视化的速度和效果,如何快捷、逼真地构建建筑物三维模型是很多研究人员重点研究的课题。

按照模型的存储元素类型分类,三维空间数据模型可分为栅格数据模型、矢量数据模型、栅格和矢量混合模型3类。按照模型的构成元素分类,三维空间数据模型可分为基于面元的模型、基于体元的模型和面元体元混合模型3类。

基于面元的模型包括格网(grid)、不规则三角形格网(tin)、线框(wireframe)、边界表示(boundaryrepresentation)、断面(section)和参数函数表示(parameterfunction)等。

基于体元的模型包括四面体格网(ten)、八叉树(octree)、结构实体几何法(csg)、三维栅格(array)、块段(block)、六面体(hexahedral)、多面体(polyhedral)和棱柱体(prism)等。

基于面元模型的优点为数据存储量小,建模快捷,实体显示和更新的速度快,不足之处为不能描述实体的内部属性,难以进行实体的三维空间分析和查询。基于体元模型的优点为适于空间操作和分析,不足之处为数据结构复杂,存储空间大,建模速度慢。

八叉树体素分解是将空间三维物体逐级分解,最终形成八叉树体素表示的结构。八叉树的主要优点是可以方便地实现物体的并、交、差等集合运算,适用于较规则的实体的建模。

参数函数表示的指导思想是利用有限的空间数据,构造一个函数的解析式,用这个解析式来生成新的空间点,用以逼近原有物体。参数函数表示包括解析函数模型和非解析函数模型。解析函数模型的优点为数学运算简便、数据存储量小,但复杂的空间对象很难用统一的函数参数方程来表达。为了克服解析函数的局限性,人们提出了非解析函数。b样条函数是比较实用的参数函数,具有存储量小、分析运算速度快、空间几何不变性等特点,是构建三维空间实体边界曲面的有效方法。



技术实现要素:

本发明提供一种在建筑物三维建模中运用的混合数据模型,混合模型采用了八叉树作为整体描述,利用了nurbs描述实体的不规则曲面,存储结构采用扩展节点和混合式的八叉树结构,编码方法采用八进制前缀编码技术,根据混合模型设计了建筑物三维建模的数据结构。

本发明的大体思路为首先利用八叉树对建筑物实体v进行三维空间分割,当分割后的建筑物子体位于实体边界且外形不是规则立方体时,采用nurbs曲面描述该体元的表面,然后用一个属性值实现八叉树与nurbs曲面的链接,建立混合模型,根据混合模型设计建筑物三维建模的数据结构,存储结构采用扩展节点和混合式的八叉树结构,编码方法采用八进制前缀编码技术,最后进行实体的三维建模。

为了实现建筑物三维建模的问题,本发明提供了一种基于八叉树与nurbs曲面相结合的混合数据模型。该模型的具体构建过程包括:

1)输入一个建筑物实体v,利用八叉树对建筑物实体v进行三维空间分割,当分割后的建筑物子体位于实体边界且外形不是规则立方体时,采用nurbs曲面描述该体元的表面,具体步骤如下:

①通过用树结构对模型进行递归,按x、y、z,3个不同方向,将所要表示的三维空间实体v分割为8个大小相等的子立方体。然后根据每个子立方体中所含的目标来决定是否对子立方体继续进行8等分的划分。一直划分到每个子立方体被一个目标所充满,或没有目标,或其大小已成为预先定义的不可再分的体素为止。八叉树每个节点有8个子节点或者没有子节点。若立方体未被某个目标填满,则需要继续划分。当立方体被某个目标填满或者立方体中没有目标时,都不需继续划分。八叉树每个维度每划分一次,其分辨率都将增大到原来的两倍。在边界灰度节点中加入子体的面、边、顶点信息,从而形成扩展的八叉树结构。

②采用八叉树空间分解法生成曲面离散点集,根据空间曲面的大小,得到一个包围整个空间曲面的立方体包围盒,将该包围盒作为八叉树的根节点来初始化八叉树数据结构。

③将包围盒分解成8个子区域,作为大立方体的8个子节点,生成子体曲面上的空间离散点集。

④空间分割时注意采集实体不规则部分的外围散点,将不规则体元剖分成参数函数曲面,生成子体的nurbs曲面。

2)用一个属性值实现八叉树与nurbs曲面的链接,建立混合模型,若八叉树某节点编码的属性值为n,表示该节点关联一个局部的nurbs曲面。通过节点与对应的8个子节点体内的特征点相结合,形成局部nurbs曲面,实现时采用网格细化和求交切割的方法,用不规则体元填充八叉树与表面模型之间的空隙,完成模型的自适应分割。

3)根据混合模型设计建筑物三维建模的数据结构,存储结构采用扩展节点和混合式的八叉树结构,编码方法采用八进制前缀编码技术,具体步骤如下:

①在八叉树的上层使用指针式结构建立节点的索引。

②在下层按节点编码的大小排序,建立该局部空间内包含的所有非空叶节点的线性表。

③对同一父节点的8个兄弟节点,其具有最小(x,y,z)值的节点编号为0,相邻兄弟节点的编号沿x方向增加1,沿y方向增加2,沿z方向增加4,并将父节点的编码作为其8个子节点编码的前缀。为保证八叉树中每一节点编码的长度相同,在编码后增加一串区别于0~7八进制数的字符“t”,使每个节点编码的长度均为树的最大深度h。节点编码可表示为q1q2…qitt…t,其中q1,q2,…,qi∈{0,1,…,7},0≤i≤h。显然,q1q2…qn表示了空间最低层次(第n层)立方体网格单元,q1q2…qitt…t表示了空间分割至第i层时的立方体网格。

4)利用opengl实现建筑物三维建模和可视化系统。

附图说明

图1是八叉树分割方式的方法结构示意图。

图2是nurbs对曲线和曲面的模拟方式示意图。

图3是混合三维数据模型的分割及模拟方式的结构示意图。

图4是三维模型。

具体实施方式

下面结合附图和实施例对本发明进一步说明。

对弧面形状的三维空间实体进行分割,构建八叉树结构,分割方法参见图1。八叉树每个节点有8个子节点或者没有子节点。图1(c)中,小圆圈表示该立方体未被某个目标填满,需要继续划分。灰度小矩形表示该立方体被某个目标填满,空白小矩形表示该立方体中没有目标,这两种情况下都不需继续进行空间划分。将实体转换为八叉树结构时,在边界灰度节点中加入子体的面、边、顶点信息,从而形成扩展的八叉树结构。

当分割后的建筑物子体位于实体边界且外形不是规则立方体时,设置该子体的属性值为n,表示该节点关联一个局部的nurbs曲面,采用nurbs曲面描述该体元的表面。通过节点与对应的8个子节点体内的特征点相结合,形成局部nurbs曲面。图2为nurbs拟合曲线和曲面的示意图。基于八叉树和nurbs曲面建立的混合数据模型如图3所示。

根据八叉树-nurbs混合三维数据模型,采用面向对象的程序设计语言c++为建筑物设计相应的数据结构,其形式化表示如下:

classbuildingobject{//建筑物对象

private:

intbuildingid;//建筑物编号

floatlength;//建筑物主体长

floatwidth;//建筑物主体宽

floatheight;//建筑物主体高

floatroofheight;//建筑物屋顶高

floatridgelength;//建筑物屋脊长

treenodeoctree[8];//定义8个子八叉树

public:

voidinitialize();

octree*creatoctree()//八叉树生成函数

nurbs*pnurbscreatnurbs(nurbspoint**point)//nurbs曲面生成函数};

树节点的数据结构:

structtreenode{//八叉树节点

longcode;//节点编码

intsize;//节点大小

inttype;//属性

intlayer;//节点所在层

intindex;//节点在兄弟节点中的序号

structtreenode*pparent;//父节点指针

structtreenode*pchd[8];//子节点指针

boolleaf;//是否为叶子节点

boolpolygon;//节点是否关联nurbs曲面对象

nurbspoint**point;//nurbs曲面控制点,用指

针定义二维动态数组

intnnurebsctrl;//nurbs曲面控制点数

nurbs*pnurbs;//关联nurbs曲面指针

intnurbsobjectid;//曲面对象的id码

}

采用扩展节点(面、边、顶点)和混合式的八叉树结构进行存储,在八叉树的上层使用指针式结构建立节点的索引,而在下层按节点编码的大小排序,建立该局部空间内包含的所有非空叶节点的线性表。减少了存储空间,又提高了显示的精度和搜索效率。

利用opengl技术实现实体的三维建模和可视化。生成如图4所示的三维模型。

对于本例中的弧面形状的建筑物,采用混合模型对三维空间实体的分割次数远远小于八叉树模型,为八叉树模型的1/8左右。混合模型的存储量也比八叉树模型少50%以上,相应的模型显示速度提高了20%,模型的精度也有所提高。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1