一种大场景中矢量地图与高分辨率数字高程模型自动叠加渲染的方法

文档序号:6367223阅读:195来源:国知局
专利名称:一种大场景中矢量地图与高分辨率数字高程模型自动叠加渲染的方法
技术领域
本发明涉及一种大场景中矢量地图与高分辨率数字高程模型实时叠加渲染的方法,属于空间信息技术领域。
背景技术
在三维空间场景中,通过矢量数字地图与三维数字高程模型的叠加,可非常直观准确的提供地形和其它地物的空间信息,并相互增强两者在空间信息表达和分析中的作用,在空间决策、虚拟现实以及地理信息系统等领域中都有重要应用价值。目前,绝大多数三维地形建模采用细节层次模型,地形表面随着视点的移动实时重构,这要求ニ维地图的 叠加渲染算法在地形重构时仍能保持与地表精确无缝的叠加;另外一方面,渲染的延迟和停顿是不能被用户接受的,而矢量地图往往包括大量的要素,因此在保证矢量精确叠加的同时,如何保持较高的渲染效率是ー个亟待解决的技术问题。目前的研究基本可分为两类,一类是基于几何的,一类是基于纹理的。前者需要求算与每个细节层次下矢量要素转折处的交点,占用了额外的存储空间;也可在渲染过程中根据当前细节层次实时计算交点,但数据量增大时,会影响显示的效果;后者主要是由矢量数据生成纹理图,纹理映射叠加到地形上,该方法的缺陷是视点拉近时会造成边界模糊,解决方法是增大纹理尺寸,或者生成多张不同分辨率的纹理图,如果矢量数据所在区域的范围很大,要想精确显示,就必须采用很大尺寸的纹理,或者生成并存储很多张纹理图,这会耗费大量纹理内存,也会影响可视化的质量。为了减少渲染所需内存开销,实现高质量大規模矢量地图数据与数字高程模型叠カロ,本发明提供了一种矢量地图与高分辨率数字高程模型实时叠加渲染的方法,该方法计算过程简单、执行效率高,能够自适应于不同的三维数字地表建模模型,可以广泛应用在大尺度的空间信息叠置分析中。

发明内容
I、目的本发明的目的是在保持矢量地图要素几何拓扑关系不变的前提下,解决大規模矢量地图数据和数字高程模型快速叠加显示的问题,提供一种动态、自适应的叠加方法,克服现有方法占用计算机内存多、叠加效率低、计算复杂等缺点,具有良好的实用价值。2、技术方案本发明涉及一种大场景中矢量地图与高分辨率数字高程模型自动叠加渲染的方法,该方法的步骤流程如图I所示,具体如下步骤ー选择矢量数据与数字高程叠加的细节层次模型由于矢量要素的形状往往是不规则的,且同一幅地图中矢量要素的长度或面积差异也较大,同一要素很可能一部分离视点近,另一部分离视点远。考虑到矢量数据与地形叠加过程中,矢量要素被分割为单调链,因此,在选择细节层次时,本发明针对的是单调链,而不是要素本身。但是,一幅地图可能包含很多要素,而每个要素又被拆分为多个单调链,依次计算这些单调链与视点的距离将耗 费一定时间,为了提高计算效率,本发明提供了子区域索引的方法。在预处理阶段,计算矢量要素的最小包围矩形框以及单调链的总个数Ilsub;
设定值navg,将最小包围矩形分割成!^ 个等大的子区域,这样,平均每个区域包含navg个单调链,对每个子区域,计算有哪些线要素完全或部分被其包含,记录下这些线要素的编号。一幅地图矢量要素的分布不可能是完全均匀的,有可能某些子区域没有任何要素落在里面,那么就删除这些子区域。给出2个距离阈值も和f2 (f: > f2),确定从0到3共4个细节层次。场景漫游时,首先判断每个子区域是否可见。如不可见,则其细节层次设为0,否则,求得其中心距视点的距离d ;如果d >も,设定其细节层次为1,若f2 < d <も,则细节层次为2,若d < f2则为
3。判断了子区域的细节层后,由此确定每个单调链的细节层次。ー个单调链可能落于ー个或多个子区域中,将包含它的子区域的最大细节层次设为本单调链的细节层次。步骤ニ 建立叠加的多分辨率模型如果ー个单调链的细节层次是3,则将其用阴影体的方法渲染在地形上;如果是2,则将其简化后的结果用阴影体的方法叠加在地形上;如果是1,则将其用三维线段的方式近似叠加在地形上;如果是0,则不予渲染。因为面要素存在邻接拓扑关系,当两个邻接的多边形分别被简化时,其公共边将被简化两次,且两次的简化结果很可能不相同,那么简化后的面要素其公共边将不再完全重合。为了避免这种情况,对于面要素,首先建立拓扑关系,根据邻接关系将其边界划分为折线段,如图2所示,再将这些折线段划分为单调链,以这些单调链为单位,进行简化和细节层次选择。对面要素来说,如果其边界划分成的单调链中,所有单调链的细节层次都等于0,则不作处理,若ー个或多个单调链的细节层次大于1,则该面要素用阴影体的方法渲染;渲染吋,由单调链再重组为多边形;如果ー单调链的细节层次为3,则该单调链本身參于重组,否则,简化后的单调链參与重组;如果单调链的细节层次有些等于0,有些等于1,则采用纹理映射方法进行渲染。步骤三利用阴影体技术实现近视点矢量要素的叠加采用阴影体技木精确叠加矢量地图首先构造每个矢量要素的阴影体。此处所构建的阴影体呈柱形,即上下底面平行于水平面且形状大小完全相同,侧面垂直于水平面。对于面要素来说,先计算其覆盖区域的最高海抜和最低海抜,将面要素向上移到最高海拔处可得到上底面,向下移到最低海拔处可得下底面;对于线要素来说,先将扩展成细条状,再按照面阴影体的构建方法,构建出上下底面以及侧面。接下去,渲染阴影体。在地形渲染完成后,关闭对顔色缓存和深度缓存的写操作,同时开启对模板测试和对模板缓存的写操作;渲染阴影体的背面,深度测试失败处的模板缓存值加I ;然后渲染阴影体的正面,设置深度测试失败处的模板缓存值减I ;最后,关闭深度测试,开启对颜色缓存的写操作,用规定的顔色重新渲染阴影体的背面,同时渲染模板值不为0的位置。步骤四叠加远视点处的矢量要素(I)利用插值算法实现远视点线要素的叠加对于大規模地形场景,渲染远处的线要素吋,将覆盖地形的高度赋予它,转化为三维线要素。在预处理阶段,对线要素进行双线性插值,求得插值点和线要素原顶点所在处的地形高度,将原来ニ维点转化为三维点,连接这些三维点即可得到线要素与数字高程模型叠加結果。为了避免“z-buffer fighting”现象,先将要素整体往上偏移ー些,其偏移量随着离视点距离的增加而逐渐增加。本发明将偏移量的大小设置在0. 5m到50m之间,这样的偏移量可有效避免“z-buffer fighting”以及线要素进入到地面以下的现象,并可保证线要素与地面间的缝隙被控制在视觉可接受的范围内。(2)用纹理映射实现远视点面要素的叠加利用顔色缓存渲染简化后的面要素到顔色缓存,读取顔色缓存至内存生成相应纹理图,面要素覆盖的地方为不透明或半透明,其它位置设为透明;用多重纹理方法将该纹理图和地形其它纹理映射到地形上。因为视点离近吋,纹理渲染的方法会产生明显的边缘模糊,近处的面要素仍需要采用阴影体的方式渲染,此时,实时更新纹理图,将纹理图上该面要素覆盖区域的透明度设为0,即设为完全透明。相反,随着视点移动,面要素距视点的距离増加,渲染方式由阴影体技术改为纹理映射技木,则需将其纹理图上的对应区域设为不透明。3、优点及功效由于矢量地图与数字高程模型的复杂性,传统的矢量数据和数字高程模型叠加方法多数为近似叠加,视点拉近时,存在明显的缝隙或模糊,且叠加效率非常低。本发明建立了矢量要素的多分辨率模型,采用阴影体、纹理映射等方法实现了大規模矢量地图与地形的快速叠加,在获得精确视觉效果的同时提高了叠加效率;本发明方法独立于地形建模的细节层次模型,是ー种适用于各种数字高程模型与大数据量矢量数据叠加的方法。


图I大数据量数字高程模型与矢量数据叠加的流程示意2 (a)原面要素图2 (b)将面要素拆分为曲线段图2(c)将曲线段拆分为单调链图2(d)重建后的面要素,其中浅灰色的面要素采用阴影体的方法渲染,深灰色的面要素采用纹理映射的方法渲染图3(a)采用本发明的水文图细节层次模型渲染结果(e = 0. 5%。,f: = I, 400m,f2 = 7, 000m)图3(b)原水文图采用Schneider-Kleni算法的叠加效果图4(a)采用本发明的土壌类型图细节层次模型渲染结果(e =0.5%。,f:=9, 000m, f2 = 4, 500m)图4(b)原土壤类型图采用Schneider-Kleni算法的叠加效果
具体实施例方式本发明涉及一种大场景中矢量地图与高分辨率数字高程模型自动叠加渲染的方 法,该方法的具体步骤如下步骤ー选择矢量数据与数字高程叠加的细节层次模型由于矢量要素的形状往往是不规则的,且同一幅地图中矢量要素的长度或面积差异也较大,同一要素很可能一部分离视点近,另一部分离视点远。考虑到矢量数据与地形叠加过程中,矢量要素被分割为单调链,因此,在选择细节层次吋,本发明针对的是单调链,而不是要素本身。但是,一幅地图可能包含很多要素,而每个要素又被拆分为多个单调链,依次计算这些单调链与视点的距离将耗费一定时间,为了提高计算效率,本发明提供了子区域索引的方法。在预处理阶段,计算矢量要素的最小包围矩形框以及单调链的总个数Ilsub;设定值navg,将最小包围矩形分割成个等大的子区域,这样,平均每个区域包含navg个单调链,对每个子区域,计算有哪些线要素完全或部分被其包含,记录下这些线要素的编号。一幅地图矢量要素的分布不可能是完全均匀的,有可能某些子区域没有任何要素落在里面,那么就删除这些子区域。给出2个距离阈值も和f2 (f: > f2),确定从0到3共4个细节层次。场景漫游时,首先判断每个子区域是否可见。如不可见,则其细节层次设为0,否则,求得其中心距视点的距离d ;如果d >も,设定其细节层次为1,若f2 < d <も,则细节层次为2,若d < f2则为 3。判断了子区域的细节层后,由此确定每个单调链的细节层次。ー个单调链可能落于ー个或多个子区域中,将包含它的子区域的最大细节层次设为本单调链的细节层次。 步骤ニ 建立叠加的多分辨率模型如果ー个单调链的细节层次是3,则将其用阴影体的方法渲染在地形上;如果是2,则将其简化后的结果用阴影体的方法叠加在地形上;如果是1,则将其用三维线段的方式近似叠加在地形上;如果是0,则不予渲染。因为面要素存在邻接拓扑关系,当两个邻接的多边形分别被简化时,其公共边将被简化两次,且两次的简化结果很可能不相同,那么简化后的面要素其公共边将不再完全重合。为了避免这种情况,对于面要素,首先建立拓扑关系,根据邻接关系将其边界划分为折线段,如图2所示,再将这些折线段划分为单调链,以这些单调链为单位,进行简化和细节层次选择。对面要素来说,如果其边界划分成的单调链中,所有单调链的细节层次都等于0,则不作处理,若ー个或多个单调链的细节层次大于1,则该面要素用阴影体的方法渲染;渲染吋,由单调链再重组为多边形;如果ー单调链的细节层次为3,则该单调链本身參于重组,否则,简化后的单调链參与重组;如果单调链的细节层次有些等于0,有些等于1,则采用纹理映射方法进行渲染。步骤三利用阴影体技术实现近视点矢量要素的叠加采用阴影体技木精确叠加矢量地图首先构造每个矢量要素的阴影体。此处所构建的阴影体呈柱形,即上下底面平行于水平面且形状大小完全相同,侧面垂直于水平面。对于面要素来说,先计算其覆盖区域的最高海抜和最低海抜,将面要素向上移到最高海拔处可得到上底面,向下移到最低海拔处可得下底面;对于线要素来说,先将扩展成细条状,再按照面阴影体的构建方法,构建出上下底面以及侧面。接下去,渲染阴影体。在地形渲染完成后,关闭对顔色缓存和深度缓存的写操作,同时开启对模板测试和对模板缓存的写操作;渲染阴影体的背面,深度测试失败处的模板缓存值加I ;然后渲染阴影体的正面,设置深度测试失败处的模板缓存值减I ;最后,关闭深度测试,开启对颜色缓存的写操作,用规定的顔色重新渲染阴影体的背面,同时渲染模板值不为0的位置。步骤四叠加远视点处的矢量要素(I)利用插值算法实现远视点线要素的叠加
对于大規模地形场景,渲染远处的线要素吋,将覆盖地形的高度赋予它,转化为三维线要素。在预处理阶段,对线要素进行双线性插值,求得插值点和线要素原顶点所在处的地形高度,将原来ニ维点转化为三维点,连接这些三维点即可得到线要素与数字高程模型叠加結果。为了避免“z-buffer fighting”现象,先将要素整体往上偏移ー些,其偏移量随着离视点距离的增加而逐渐增加。本发明将偏移量的大小设置在0. 5m到50m之间,这样的偏移量可有效避免“z-buffer fighting”以及线要素进入到地面以下的现象,并可保证线要素与地面间的缝隙被控制在视觉可接受的范围内。(2)用纹理映射实现远视点面要素的叠加利用顔色缓存渲染简化后的面要素到顔色缓存,读取顔色缓存至内存生成相应纹理图,面要素覆盖的地方为不透明或半透明,其它位置设为透明;用多重纹理方法将该纹理图和地形其它纹理映射到地形上。因为视点离近时,纹理渲染的方法会产生明显的边缘模糊,近处的面要素仍需要采用阴影体的方式渲染,此时,实时更新纹理图,将纹理图上该面要素覆盖区域的透明度设为0,即设为完全透明。相反,随着视点移动,面要素距视点的距离増加,渲染方式由阴影体技术改为纹理映射技木,则需将其纹理图上的对应区域设为不透明。实施例I :在一台配置有Intel (R) Core 2. 4GHz 2 处理器,2G 内存,ATI Radeon HD 图形显卡的计算机上进行了实施,所用的ニ维矢量地图数据位于美国夏威夷群岛,各矢量数据具体信息如表I所示。表I.实施所用的ニ维矢量地图数据信息
权利要求
1. 一种大场景中矢量地图与高分辨率数字高程模型自动叠加渲染的方法,其特征在于,包括如下步骤 步骤一选择矢量数据与地形叠加的细节层次模型 在预处理阶段,计算矢量要素的最小包围矩形框以及单调链的总个数nsub;设定值navg,将最小包围矩形分割成V^bInavgl个等大的子区域,这样平均每个区域包含navg个单调链;对每个子区域,计算有哪些线要素完全或部分被其包含,记录下这些线要素的编号,删除不包含矢量要素的子区域。
渲染时,给出2个距离阈值和f2(f\ > f2),确定从O到3共4个细节层次,场景漫游时,首先判断每个子区域是否可见,如不可见,则其细节层次设为O,否则,求得其中心距视点的距离d,如果d > ,设定其细节层次为1,若d < 且d > f2,则细节层次为2,若d < f2则为3,判断了子区域的细节层后,由此确定每个单调链的细节层次,一个单调链可能落于一个或多个子区域中,将包含它的子区域的最大细节层次设为本条单调链的细节层次。
步骤二 建立叠加的细节层次模型 线要素的显示是以单调链为基本单元,如果一个单调链的细节层次是3,则将其用阴影体的方法渲染在地形上;如果是2,则将其简化后的结果用阴影体的方法叠加在地形上;如果是1,则将其用三维线段的方式近似叠加在地形上;如果是O,则不予渲染。
对一个面要素来说,如果其边界划分成的单调链中,所有单调链的细节层次都等于O,则不作处理,若一个或多个单调链的细节层次大于1,则该面要素用阴影体的方法渲染;渲染时,由单调链再重组为多边形,如果一单调链的细节层次为3,则该单调链本身参于重组,否则,简化后的单调链参与重组;如果单调链的细节层次落于O和I之间,则采用纹理映射方法进行渲染。
步骤三利用阴影体技术实现近视点矢量要素的叠加 当矢量地图需要被精确叠加时,采用阴影体技术,首先构造每个矢量要素的阴影体,对于面要素来说,先计算其覆盖区域的最高海拔和最低海拔,将面要素向上移到最高海拔处可得到上底面,向下移到最低海拔处可得下底面;对于线要素来说,先将扩展成细条状后,再按照面阴影体的构建方法,构建出上下底面以及侧面。
接下去,渲染阴影体,在地形渲染完成后,关闭对颜色缓存和深度缓存的写操作,同时开启对模板测试和对模板缓存的写操作;渲染阴影体的背面,深度测试失败处的模板缓存值加I ;渲染阴影体的正面,设置深度测试失败处的模板缓存值减I ;最后关闭深度测试,开启对颜色缓存的写操作,用规定的颜色重新渲染阴影体的背面,同时渲染模板值不为O的位置。
步骤四远视点矢量要素的叠加 (1)利用插值算法实现远视点线要素的叠加 在预处理阶段,对线要素进行插值,求得插值点和线要素原顶点所在处的地形高度,在渲染时,将这些三维点连成线即可得到线要素与地形的叠加结果,为了避免“z-bufferfighting”现象,将要素整体往上偏移,其偏移量应随着离视点距离的增加而逐渐增加。
(2)用纹理映射实现远视点面要素的叠加 利用颜色缓存渲染简化后的面要素到颜色缓存,读取颜色缓存至内存生成相应纹理图,面要素覆盖的地方为不透明或半透明,其它位置设为透明;用多重纹理方法将该纹理图和地形的其它纹理映射到地形上;视点离近时,需要实时更新纹理图,将纹理图上该面要素 覆盖的区域的透明度设为O,将其设为完全透明;相反,随着视点移动,渲染方式由阴影体技术改为纹理映射技术,则需将其纹理图上的对应区域设为不透明。
全文摘要
本发明涉及一种矢量地图与多分辨率数字高程模型实时叠加渲染的方法。为了减少大规模数据叠加渲染所需的计算机内存开销和计算复杂度,该方法首先对矢量要素简化并建立细节层次模型,在近视点处的矢量地图要素用阴影体技术与多分辨率数字高程模型叠加渲染,在远视点处的矢量地图要素用阴影体技术叠加渲染简化后的要素,最远离视点处的矢量地图要素采用插值叠加渲染简化后的矢量线状要素,用纹理映射的方法叠加渲染面状要素。该方法提供了一种不同类型的大规模空间数据实时动态快速叠加的方法,在数字城市、空间位置服务等方面具有很好的应用前景。
文档编号G06T15/00GK102651141SQ201210089319
公开日2012年8月29日 申请日期2012年3月30日 优先权日2012年3月30日
发明者张立强, 张良, 杨玲 申请人:北京师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1