三维城市模型自适应调度方法

文档序号:6544216阅读:229来源:国知局
三维城市模型自适应调度方法
【专利摘要】本发明公开了一种三维城市模型自适应调度方法,属于三维数字城市、三维地理信息系统领域。本发明实现了分级规则网格索引,采用了分级的思路,使用细粒度粗粒度两个级别,分别构建规则网格索引,解决了不同尺寸三维模型的调度混乱问题,提升了调度效率。本发明根据模型中心到当前视点、模型本身的尺寸、模型当前的状态而计算模型请求重要程度因子,提出一种自适应调度方法,充分顾及模型请求时间、模型请求次数、模型请求重要程度因子进行动态调整,从而实现了动态调度的高效性和视觉符合性。本发明与只顾及视点距离一个因素的调度方法相比,本发明的模型调度过程更快响应,更加平滑,更贴合视觉效果;同时,通过调度线程和渲染线程的异步协同,极大地提升了调度效率。
【专利说明】三维城市模型自适应调度方法
【技术领域】
[0001]本发明属于三维数字城市、三维地理信息系统领域,特别是涉及一种三维城市模型自适应调度方法。
【背景技术】
[0002]三维数字城市是以计算机技术、多媒体技术和大规模存储技术为基础,以宽带网络为纽带,运用遥感、全球定位系统、地理信息系统、遥测、仿真-虚拟等技术,对城市进行多分辨率、多尺度、多时空和多种类的三维描述,即利用信息技术手段把城市的过去、现状和未来的全部内容在网络上进行数字化虚拟实现。
[0003]通过对地形地貌、地上地下人工建筑物等基础地理信息的三维表达,反映被表达对象的三维空间位置、几何形态、纹理及属性等信息。三维城市模型主要包括地形模型、建筑模型、道路模型、水系模型、植被模型、地面模型、地下空间设施模型及其他模型等内容。
[0004]三维城市模型数据库是用于存放三维模型的数据库,模型数据是指采用三维建模软件制作的三维模型,它可以用该建模软件打开和编辑,并能进行坐标转换、格式转换、分层、分块、切片等操作,并将操作结果保存到三维城市模型数据库中。三维城市模型数据库通常以关系数据库或文件方式存储。
[0005]模型LOD技术主要用于加快虚拟现实中图形生成的速度,提供高速度、高质量的图形绘制方法。
[0006]1976年,Clark提出了 LOD (Levels of Detail,细节层次)模型的概念,认为当物体覆盖屏幕较小区域时,可以使用该物体描述较粗的模型,并给出了一个用于可见面判定算法的几何层次模型,以便对复杂场景进行快速绘制。1982年,Rubin结合光线跟踪算法,提出了复杂场景的层次表示算法及相关的绘制算法,从而使计算机能以较少的时间绘制复杂场景。
[0007]90年代初,图形学方向上派生出虚拟现实和科学计算可视化等新研究领域。虚拟现实和交互式可视化等交互式图形应用系统要求图形生成速度达到实时,而计算机所提供的计算能力往往不能满足复杂三维场景的实时绘制要求,因而研究人员提出多种图形生成加速方法,LOD模型则是其中一种主要方法。
[0008]LOD技术在不影响画面视觉效果的条件下,通过逐次简化景物的表面细节来减少场景的几何复杂性,从而提高绘制算法的效率。该技术通常对每一原始多面体模型建立几个不同逼近精度的几何模型。与原模型相比,每个模型均保留了一定层次的细节。在绘制时,根据不同的表准选择适当的层次模型来表示物体。LOD技术具有广泛的应用领域。目前在实时图像通信、交互式可视化、虚拟现实、地形表示、飞行模拟、碰撞检测、限时图形绘制等领域都得到了应用。常用的LOD生成方法有剔除法、距离标准、尺寸标准等。
[0009]格网型空间索引的基本思想是将研究区域用横竖线条划分大小相等或不等的格网,记录每一个格网所包含的空间实体。当用户进行空间查询时,首先计算出用户查询对象所在格网,然后再在该网格中快速查询所选空间实体,这样一来就大大地加速了空间索引的查询速度。
[0010]把一幅图的矩形地理范围均等地划分为m行η列,即规则地划分二维数据空间,得到mXn个小矩形网格区域。每个网格区域为一个索引项,并分配一个动态存储区,全部或部分落入该网格的空间对象的标识以及外接矩形存入该网格。
[0011]网格索引是一种多对多的索引,会导致冗余,网格划分得越细,搜索的精度就越高,当然冗余也越大,耗费的磁盘空间和搜索时间也越长。网格法由于必须预先定义好网格大小,因此它不是一种动态的数据结构,适合点数据。
[0012]综上所述,在三维数字城市数据库中,存储着海量的三维城市模型,包含着查询、检索、分析等空间操作,而且每一个三维模型存在不同精度的LOD节点。由于普通计算机的硬件有限,现有的调度三维城市模型的速度慢、效率低,因此如何高效调度海量三维城市模型,就成了比较迫切的问题。

【发明内容】

[0013]有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是提供一种能够高效调度三维城市模型的三维城市模型自适应调度方法。
[0014]为实现上述目的,本发明提供了一种三维城市模型自适应调度方法,按以下步骤进行:
[0015]步骤一、获取三维模型包围盒信息列表;
[0016]步骤二、根据所述三维模型包围盒信息列表构建细粒度网格索引和粗粒度网格索弓I ;
[0017]步骤三、构建三维场景树;
[0018]步骤四、遍历三维场景树,计算模型请求重要程度因子,触发调用请求;
[0019]步骤五、建立调用请求优先队列,按调用请求优先队列进行I/O调度并更新三维场景树。
[0020]较佳的,所述步骤一按以下步骤执行:
[0021]Al、获取三维场景的三维模型列表,获取各三维模型的几何体列表,并获取各几何体的顶点列表;
[0022]A2、根据所述几何体的顶点列表,求出所述几何体的包围盒,所述几何体的中心点为所述包围盒的中心点;
[0023]A3、将所有几何体的包围盒综合比较,获得所述三维模型的包围盒;
[0024]A4、根据所有三维模型的包围盒,获取三维模型包围盒信息列表。
[0025]较佳的,所述步骤二按以下步骤执行:
[0026]B1、对于细粒度级别和粗粒度级别,分别根据三维模型包围盒信息列表,构建规则网格列表;每个规则网格描述为四元组〈X,y, boundingbox, model-list>,其中,x是网格左下角X坐标,y是网格左下角Y坐标,boundingbox是网格的包围盒,model-list是属于该网格的模型列表;
[0027]B2、调整规则网格列表的包围盒:遍历规则网格列表,更新规则网格的包围盒;
[0028]对于细粒度级别,根据三维模型包围盒信息列表来构建规则网格列表按以下步骤执行:[0029]B201、遍历对三维模型包围盒信息列表;
[0030]B202、检查三维模型尺寸大小是否属于本级别,如果不是,则返回执行步骤B201 ;如果三维模型尺寸大小属于本级别,则执行下一个步骤;
[0031]B203、获取该三维模型所属网格的X、Y坐标标号;
[0032]B204、判断该标号的网格是否已经存在;如果该标号的网格已经存在,则将该三维模型ID加入到网格对应的model-list中,然后返回执行步骤B201 ;否则执行步骤B205 ;
[0033]B205、创建新的网格,将该三维模型ID加入到新网格对应的model-list中,将新网格加入到网格列表中,然后返回执行步骤B201 ;
[0034]对于粗粒度级别,根据三维模型包围盒信息列表来构建规则网格列表按以下步骤执行:
[0035]B211、遍历对三维模型包围盒信息列表;
[0036]B212、检查三维模型尺寸大小是否属于本级别,如果不是,则返回执行步骤B211 ;如果三维模型尺寸大小属于本级别,则执行下一个步骤;
[0037]B213、获 取该三维模型所属网格的X、Y坐标标号;
[0038]B214、判断该标号的网格是否已经存在;如果该标号的网格已经存在,则将该三维模型ID加入到网格对应的model-list中,然后返回执行步骤B211 ;否则执行步骤B215 ;
[0039]B215、创建新的网格,将该三维模型ID加入到新网格对应的model-list中,将新网格加入到网格列表中,然后返回执行步骤B211。
[0040]较佳的,所述步骤三按以下步骤执行:
[0041]Cl、根据细粒度级别规则网格索引和粗粒度级别规则网格索弓丨,构建场景块列表;
[0042]每一个场景块表不一个规则网格内的模型集合,是一个五兀组,即〈X,y, z, r, block-leaf-list> ;其中x, y, z, r是场景块中心点的X坐标、场景块中心点的Y坐标、场景块中心点的Z坐标和场景块包围球的半径,block-leaf-list是属于该场景块的所有场景块叶子的列表;
[0043]每一个场景块叶子表示一个具体的多LOD级别的模型,是一个六元组,即〈X,y, z,r, model-of-levell, model_of-level2> ;其中,x, y, z, r 是场景块叶子中心点的 X 坐标、场景块叶子中心点的Y坐标、场景块叶子中心点的Z坐标以及场景块叶子包围球的半径,model-of-levell是粗略级别的模型ID, model_of-level2是精细级别的模型ID ;
[0044]C2、根据场景块列表构建场景树。
[0045]较佳的,所述步骤四按以下步骤执行:
[0046]D1、对三维场景中的每一帧进行场景树渲染遍历;从数据集节点自上而下遍历所有场景块叶子节点;
[0047]D2、遍历到场景块叶子节点时,计算模型请求重要程度因子;设定模型请求重要程
度因子为IF,三维模型当前状态对应的调节系数为a,三维模型半径为r,三维模型到当前


a.r
视点距离为d,则由公式计算F =:得到模型请求重要程度因子;
[0048]D3、根据计算的模型请求重要程度因子,结合需要请求的模型ID,触发调度请求;
[0049]较佳的,所述步骤五按以下步骤执行:[0050]El、根据模型请求时间、模型请求次数、模型请求重要程度因子决定请求的优先权重;
[0051]E2、取出需要进行调度的模型信息,然后由I/O层加载模型,加载解析后的三维场景模型节点;
[0052]E3、对I/O层加载解析后的三维场景模型节点,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将场景模型节点结合到对应的场景块叶子节点之下,并更新场景块叶子节点的模型状态,完成动态调度。
[0053]本发明的有益效果是:
[0054]1、本发明实现了分级规则网格索引,采用了分级的思路,使用细粒度粗粒度两个级别,分别构建规则网格索引,解决了不同尺寸三维模型的调度混乱问题,提升了调度效率。
[0055]2、本发明根据模型中心到当前视点、模型本身的尺寸、模型当前的状态而计算模型请求重要程度因子,提出一种自适应调度方法,充分顾及模型请求时间、模型请求次数、模型请求重要程度因子进行动态调整,从而实现了动态调度的高效性和视觉符合性。
[0056]3、本发明与只顾及视点距离一个因素的调度方法相比,本发明的模型调度过程更快响应,更加平滑,更贴合视觉效果;同时,通过调度线程和渲染线程的异步协同,极大地提升了调度效率。
【专利附图】

【附图说明】
[0057]图1是本发明一【具体实施方式】的流程示意图。
【具体实施方式】
[0058]下面结合附图和实施例对本发明作进一步说明:
[0059]如图1所示,一种三维城市模型自适应调度方法,按以下步骤进行:
[0060]步骤一、获取三维模型包围盒信息列表;
[0061]步骤二、根据所述三维模型包围盒信息列表构建细粒度网格索引和粗粒度网格索弓I ;
[0062]步骤三、构建三维场景树;
[0063]步骤四、遍历三维场景树,计算模型请求重要程度因子,触发调用请求;
[0064]步骤五、建立调用请求优先队列,按调用请求优先队列进行I/O调度并更新三维场景树。
[0065]所述步骤一按以下步骤执行:
[0066]Al、获取三维场景的三维模型列表,针对每一个三维模型,依次执行步骤A2和A3 ;
[0067]A2、获取该三维模型的几何体列表,并针对每一个几何体,获取该几何体的顶点列表,对该几何体的顶点列表按坐标分量X、Y、Z,分别求出最大值和最小值,获得minX,minY,minZ, maxX, maxY, maxZ,然后根据这六个值构建包围盒boundingbox,即为该几何体的包围盒,并且包围盒的中心为该几何体的中心;
[0068]A3、根据该三维模型的几何体列表,获得几何体包围盒列表,将几何体包围盒列表中的几何体的包围盒按坐标分量X、Y、Z,分别求出最大值和最小值,获得minX,minY, minZ,maxX, maxY, maxZ,然后根据这六个值构建包围盒boundingbox,即为该三维模型的包围盒,并且包围盒的中心为该三维模型的中心,而包围盒的最大值、最小值、中心值即为包围盒
信息;
[0069]A4、根据三维场景的三维模型列表,获得三维模型包围盒信息列表。
[0070]所述步骤二按以下步骤执行:
[0071]B1、对于细粒度级别和粗粒度级别,分别根据三维模型包围盒列表,构建规则网格列表;每个规则网格描述为四元组〈X,y, boundingbox, model-list>,其中,x是网格左下角X坐标,y是网格左下角Y坐标,boundingbox是网格的包围盒,model-list是属于该网格的模型列表;
[0072]B2、调整规则网格列表的包围盒:遍历规则网格列表,更新规则网格的包围盒;
[0073]对于细粒度级别,根据三维模型包围盒信息列表来构建规则网格列表按以下步骤执行:
[0074]B201、遍历对三维模型包围盒信息列表;
[0075]B202、检查三维模型尺寸大小是否属于本级别,如果不是,则返回执行步骤B201 ;如果三维模型尺寸大小属于本级别,则执行下一个步骤;
[0076]B203、获取该三维模型所属网格的X、Y坐标标号;
[0077]B204、判断该标号的网格是否已经存在;如果该标号的网格已经存在,则将该三维模型ID加入到网格对应的model-list中,然后返回执行步骤B201 ;否则执行步骤B205 ;
[0078]B205、创建新的网格,将该三维模型ID加入到新网格对应的model-list中,将新网格加入到网格列表中,然后返回执行步骤B201 ;
[0079]对于粗粒度级别,根据三维模型包围盒信息列表来构建规则网格列表按以下步骤执行:
[0080]B211、遍历对三维模型包围盒信息列表;
[0081]B212、检查三维模型尺寸大小是否属于本级别,如果不是,则返回执行步骤B211 ;如果三维模型尺寸大小属于本级别,则执行下一个步骤;
[0082]B213、获取该三维模型所属网格的X、Y坐标标号;
[0083]B214、判断该标号的网格是否已经存在;如果该标号的网格已经存在,则将该三维模型ID加入到网格对应的model-list中,然后返回执行步骤B211 ;否则执行步骤B215 ;
[0084]B215、创建新的网格,将该三维模型ID加入到新网格对应的model-list中,将新网格加入到网格列表中,然后返回执行步骤B211。
[0085]本实施例取细粒度级别为500米,粗粒度级别为1000米;细粒度级别网格对应于一般尺寸模型,比如建筑物、路灯等,而粗粒度级别网格对应于大尺寸模型,比如道路、大面积的绿地等。
[0086]所述步骤三按以下步骤执行:
[0087]Cl、根据细粒度级别规则网格索引和粗粒度级别规则网格索弓丨,构建场景块列表;
[0088]每一个场景块表不一个规则网格内的模型集合,是一个五兀组,即〈X,y, z, r, block-leaf-list> ;其中x, y, z, r是场景块中心点的X坐标、场景块中心点的Y坐标、场景块中心点的Z坐标和场景块包围球的半径,block-leaf-list是属于该场景块的所有场景块叶子的列表;
[0089]每一个场景块叶子表示一个具体的多LOD级别的模型,是一个六元组,即〈X,y, z,r, model-of-levell, model_of-level2> ;其中,x, y, z, r 是场景块叶子中心点的 X 坐标、场景块叶子中心点的Y坐标、场景块叶子中心点的Z坐标以及场景块叶子包围球的半径,model-of-levell是粗略级别的模型ID, model_of-level2是精细级别的模型ID ;
[0090]C2、根据场景块列表构建场景树。
[0091]所述步骤四按以下步骤执行:
[0092]D1、对三维场景中的每一帧进行场景树渲染遍历;从数据集节点自上而下遍历所有场景块叶子节点;
[0093]D2、遍历到场景块叶子节点时,计算模型请求重要程度因子;设定模型请求重要程度因子为IF,三维模型当前状态对应的调节系数为a,三维模型半径为r,三维模型到当前
视点距离为d,则由公式计算F =$得到模型请求重要程度因子;
[0094]D3、根据计算的模型请求重要程度因子,结合需要请求的模型ID,触发调度请求;
[0095]所述步骤五按以下步骤执行:
[0096]E1、根据模型请求时间、模型请求次数、模型请求重要程度因子决定模型请求的优先权重;模型请求时间越近、模型请求重要程度因子越高则优先权重也越大,对于重复的请求,进行合并,并记录其请求次数;本实施例中,先判断模型请求时间,模型请求时间越近的优先权重大,当模型请求时间相同时,判断模型请求次数,模型请求次数多的优先权重大,当模型请求次数也相同时,判断模型请求重要程度因子,模型请求重要程度因子越高则优先权重越大。当然还可以依次判断模型请求次数、模型请求时间和模型请求重要程度因子,也可以依次判断模型请求重要程度因子、模型请求次数和模型请求时间,其均应在本发明的保护范围内。
[0097]E2、取出需要进行调度的模型信息,然后由I/O层加载模型,加载解析后的三维场景模型节点,I/O层从三维城市模型数据库或者从磁盘文件中加载模型文件和纹理文件;
[0098]E3、对I/O层加载解析后的三维场景模型节点,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将场景模型节点结合到对应的场景块叶子节点之下,并更新场景块叶子节点的模型状态,完成动态调度。
[0099]以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本【技术领域】中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
【权利要求】
1.一种三维城市模型自适应调度方法,其特征在于按以下步骤进行: 步骤一、获取三维模型包围盒信息列表; 步骤二、根据所述三维模型包围盒信息列表构建细粒度网格索引和粗粒度网格索引; 步骤三、构建三维场景树; 步骤四、遍历三维场景树,计算模型请求重要程度因子,触发调用请求; 步骤五、建立调用请求优先队列,按调用请求优先队列进行I/O调度并更新三维场景树。
2.如权利要求1所述的三维城市模型自适应调度方法,其特征是:所述步骤一按以下步骤执行: Al、获取三维场景的三维模型列表,获取各三维模型的几何体列表,并获取各几何体的顶点列表; A2、根据所述几何体的顶点列表,求出所述几何体的包围盒,所述几何体的中心点为所述包围盒的中心点; A3、将所有几何体的包围盒综合比较,获得所述三维模型的包围盒; A4、根据所有三维模型的包围盒,获取三维模型包围盒信息列表。
3.如权利要求1所述的三维城市模型自适应调度方法,其特征是:所述步骤二按以下步骤执行: B1、对于细粒度级别和粗粒度级别,分别根据三维模型包围盒信息列表,构建规则网格列表;每个规则网格描述为四元组〈X,y, boundingbox, model-list>,其中,x是网格左下角X坐标,y是网格左下角Y坐标,boundingbox是网格的包围盒,model-list是属于该网格的模型列表; B2、调整规则网格列表的包围盒:遍历规则网格列表,更新规则网格的包围盒; 对于细粒度级别,根据三维模型包围盒信息列表来构建规则网格列表按以下步骤执行: B201、遍历对三维模型包围盒信息列表; B202、检查三维模型尺寸大小是否属于本级别,如果不是,则返回执行步骤B201 ;如果三维模型尺寸大小属于本级别,则执行下一个步骤; B203、获取该三维模型所属网格的X、Y坐标标号; B204、判断该标号的网格是否已经存在;如果该标号的网格已经存在,则将该三维模型ID加入到网格对应的model-list中,然后返回执行步骤B201 ;否则执行步骤B205 ; B205、创建新的网格,将该三维模型ID加入到新网格对应的model-list中,将新网格加入到网格列表中,然后返回执行步骤B201 ; 对于粗粒度级别,根据三维模型包围盒信息列表来构建规则网格列表按以下步骤执行: B211、遍历对三维模型包围盒信息列表; B212、检查三维模型尺寸大小是否属于本级别,如果不是,则返回执行步骤B211 ;如果三维模型尺寸大小属于本级别,则执行下一个步骤; B213、获取该三维模型所属网格的X、Y坐标标号; B214、判断该标号的网格是否已经存在;如果该标号的网格已经存在,则将该三维模型ID加入到网格对应的model-list中,然后返回执行步骤B211 ;否则执行步骤B215 ; B215、创建新的网格,将该三维模型ID加入到新网格对应的model-list中,将新网格加入到网格列表中,然后返回执行步骤B211。
4.如权利要求1所述的三维城市模型自适应调度方法,其特征是:所述步骤三按以下步骤执行: Cl、根据细粒度级别规则网格索引和粗粒度级别规则网格索引,构建场景块列表; 每一个场景块表不一个规则网格内的模型集合,是一个五兀组,即〈X,y, z, r, block-leaf-list> ;其中x, y, z, r是场景块中心点的X坐标、场景块中心点的Y坐标、场景块中心点的Z坐标和场景块包围球的半径,block-leaf-list是属于该场景块的所有场景块叶子的列表; 每一个场景块叶子表示一个具体的多LOD级别的模型,是一个六元组,即〈X,y, z, r,model-of-levell, model_of-level2> ;其中,x, y, z, r是场景块叶子中心点的X坐标、场景块叶子中心点的Y坐标、场景块叶子中心点的Z坐标以及场景块叶子包围球的半径,model-of-levell是粗略级别的模型ID, model_of-level2是精细级别的模型ID ; C2、根据场景块列表构建场景树。
5.如权利要求1所述的三维城市模型自适应调度方法,其特征是:所述步骤四按以下步骤执行: D1、对三维场景中的每一帧进行场景树渲染遍历;从数据集节点自上而下遍历所有场景块叶子节点; D2、遍历到场景块叶子节点时,计算模型请求重要程度因子;设定模型请求重要程度因子为IF,三维模型当前状态对应的调节系数为a,三维模型半径为r,三维模型到当前视点距离为d,则由公式计算=$:得到模型请求重要程度因子; D3、根据计算的模型请求重要程度因子,结合需要请求的模型ID,触发调度请求。
6.如权利要求1所述的三维城市模型自适应调度方法,其特征是:所述步骤五按以下步骤执行: E1、根据模型请求时间、模型请求次数、模型请求重要程度因子决定请求的优先权重; E2、取出需要进行调度的模型信息,然后由I/O层加载模型,加载解析后的三维场景模型节点; E3、对I/O层加载解析后的三维场景模型节点,通过异步的方式,放入渲染线程中,在下一次渲染帧循环中,更新场景,将场景模型节点结合到对应的场景块叶子节点之下,并更新场景块叶子节点的模型状态,完成动态调度。
【文档编号】G06T17/05GK103942306SQ201410157366
【公开日】2014年7月23日 申请日期:2014年4月18日 优先权日:2014年4月18日
【发明者】李锋, 向泽君, 王俊勇, 王国牛, 邱月, 刘锟, 杨颖
申请人:重庆市勘测院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1