一种地形LOD的生成方法与流程

文档序号:20786098发布日期:2020-05-19 21:43阅读:556来源:国知局
一种地形LOD的生成方法与流程

本申请涉及地形绘制领域,特别涉及一种地形lod的生成方法。



背景技术:

城市级别地形的实时渲染,如果直接渲染,gpu可能需要处理上亿级别的三角形数据,计算机硬件的发展远远无法满足这种巨型计算的需求。本方法提出一种分层分块预先计算lod地形数据的解决方案。采用lod技术绘制地形,在保证人眼观察效果的前提下,可以尽量减少三角形的数量,以提高图形绘制效率,实现地形的实时绘制及显示的流畅性。



技术实现要素:

本申请要解决的技术问题为提供一种地形lod的生成方法,该生成方法能够在保证人眼观察效果的前提下,可以尽量减少三角形的数量,以提高图形绘制效率,实现地形的实时绘制及显示的流畅性。

为解决上述技术问题,本申请提供一种地形lod的生成方法,所述生成方法包括如下步骤:

将网上下载或是采用雷达航拍、点云测绘等方式获取到的遥感影像和dem高程数据导入globalmapper或其他gis软件中;

将获得的高程数据通过gadl读取,并转换成网格数据,对网格数据进行网格划分,并将划分后的网格数据,转换成三角形关系网,存储三角形顶点与面的关系结构;

对于划分后的网格数据,计算每个分块的顶点二次误差序列;然后将数据作为一个整体,进行简化,并生成四叉树结构;

对多个单次处理数据的结果进行二次组织,组织成一个新的四叉树结构,以动态调度各单次处理数据;

对处理后的数据进行渲染,并根据当前视锥体,确定裁剪方式,同时结合四叉树结构的快速搜索遍历,确保城市级别数量的流畅渲染。

可选的,所述将网上下载或是采用雷达航拍、点云测绘等方式获取到的遥感影像和dem高程数据导入globalmapper或其他gis软件中之后,还包括如下步骤:

将遥感影像与高程数据对位纠偏后导出选择区域的tif格式影像及gotif格式高程数据。

可选的,所述将获得的高程数据通过gadl读取,并转换成网格数据,对网格数据进行网格划分,并将划分后的网格数据,转换成三角形关系网,存储三角形顶点与面的关系结构的步骤,包括:

对于影像数据,根据划分的网格,对影像进行分块,根据网格id,确定影像块id的映射关系,根据id的映射关系,在gpu中处理影像与顶点的映射,以正确渲染;

对于影像数据,采用mipmap技术,根据影像尺寸,计算最佳mipmap层数,生成mipmap结构的影像数据。

可选的,所述对于影像数据,采用mipmap技术,根据影像尺寸,计算最佳mipmap层数,生成mipmap结构的影像数据的步骤,之后还包括:

编制材质id,将id与上图的纹理坐标及纹理等级信息记录下来,引擎加载显示时,将材质id传到gup内处理,确定该块高程数据需要显示合并贴图中的那一部份,最终显示出来。

可选的,所述对于划分后的网格数据,计算每个分块的顶点二次误差序列;然后将数据作为一个整体,进行简化,并生成四叉树结构的步骤,包括:

步骤s11:计算每个整体块里的子块数据的顶点二次误差值,对顶点二次误差值进行修正;简化过程中,计算每个顶点坍缩的最优解,构建子块简化序列;

步骤s12:根据子块的简化序列,生成该地形数据的整块的简化序列信息,通过简化序列面与设定的目标面数进行对比,如果不满足,则根据简化序列对该部分数据进行简化,直到其满足条件为止,然后将该部分数据进行保存。

可选的,所述如果不满足,则根据简化序列对该部分数据进行简化,直到其满足条件为止的步骤包括:

对于不满足条件的整块地形数据,对其原始数据进行切割,将整体按空间分割成四块数据,对于每个分块数据,重复执行所述步骤s11和s12的内容,直到所有分块数据满足条件为止。

可选的,所述步骤s12之后还包括:

对于每一个分块数据的简化结果进行评价,计算其简化后的整体几何误差值,存储到对应的分块信息;

对于简化后的分块进行合并;

将分块简化并且合并后的数据,组织成四叉树结构,生成最终的处理结果。

可选的,所述对处理后的数据进行渲染,并根据当前视锥体,确定裁剪方式,同时结合四叉树结构的快速搜索遍历,确保城市级别数量的流畅渲染的步骤中,具体裁剪方法为:

采用视锥体裁剪的方法,将不在视椎体中的物体剔除掉不绘制,而在视椎体内部或与视椎体相交的物体绘制;

或者,采用细节裁剪的方法,将场景中某些极其微小的物体,用细节筛选特性将它们剔除。

可选的,所述具体裁剪方法还包括:

采用遮挡裁剪的方法,剔除那些被完全遮挡的对象,保留可见物体。

可选的,所述具体裁剪方法还包括:

采用聚集裁剪的方法,将多个对象组合起来进行统一的背面筛选,从而加快背面筛选的速度。

在一种实施例中,本申请提供的方法包括:将网上下载或是采用雷达航拍、点云测绘等方式获取到的遥感影像和dem高程数据导入globalmapper或其他gis软件中;

将获得的高程数据通过gadl读取,并转换成网格数据,对网格数据进行网格划分,并将划分后的网格数据,转换成三角形关系网,存储三角形顶点与面的关系结构

对于划分后的网格数据,计算每个分块的顶点二次误差序列;然后将数据作为一个整体,进行简化,并生成四叉树结构;

对多个单次处理数据的结果进行二次组织,组织成一个新的四叉树结构,以动态调度各单次处理数据;

对处理后的数据进行渲染,并根据当前视锥体,确定裁剪方式,同时结合四叉树结构的快速搜索遍历,确保城市级别数量的流畅渲染。

该生成方法能够在保证人眼观察效果的前提下,可以尽量减少三角形的数量,以提高图形绘制效率,实现地形的实时绘制及显示的流畅性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一种实施例中一种地形lod的生成方法的逻辑流程图;

图2为四叉树的数据结构图;

图3为整体四叉树的数据结构图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

在本发明的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型.

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请大体流程为:

数据预处理:对于不同格式的地形影像数据,进行预先调整,处理成统一格式,作为数据输入。

数据标准化:将地形影像数据,分离并关联,然后自动转化为标准的数据结构,作为分层分块lod数据计算的准备数据。

资源处理:动态计算生成lod数据。

分层数据的四叉树管理:对于处理的多个地形影像数据,进行二次组织,以达到城市级别数据依然流畅加载渲染。

以下介绍详细流程,请参考图1,图1为本申请一种实施例中一种地形lod的生成方法的逻辑流程图。

如图1所示,在本申请一种实施例中,该方法如下包括步骤:

步骤s101:将网上下载或是采用雷达航拍、点云测绘等方式获取到的遥感影像和dem高程数据导入globalmapper或其他gis软件中;

步骤s102:将获得的高程数据通过gadl读取,并转换成网格数据,对网格数据进行网格划分,并将划分后的网格数据,转换成三角形关系网,存储三角形顶点与面的关系结构

步骤s103:对于划分后的网格数据,计算每个分块的顶点二次误差序列;然后将数据作为一个整体,进行简化,并生成四叉树结构;

步骤s104:对多个单次处理数据的结果进行二次组织,组织成一个新的四叉树结构,以动态调度各单次处理数据;

步骤s105:对处理后的数据进行渲染,并根据当前视锥体,确定裁剪方式,同时结合四叉树结构的快速搜索遍历,确保城市级别数量的流畅渲染。

具体来说,在步骤s101中,将网上下载或是采用雷达航拍、点云测绘等方式获取到的遥感影像和dem高程数据导入globalmapper或其他gis软件中,将遥感影像与高程数据对位纠偏后导出选择区域的tif格式影像及gotif格式高程数据。

对于非dem格式数据,如dxf格式,通过globalmapper的分析功能,生成矢量数据,然后导出为gotif格式。

在步骤s102中,高程数据通过gadl读取,并转换成网格数据,对网格数据进行网格划分,并将划分后的网格数据,转换成三角形关系网,存储三角形顶点与面的关系结构。

影像数据,根据划分的网格,对影像进行分块,根据网格id,确定影像块id的映射关系,g根据id的映射关系,在gpu中处理影像与顶点的映射,以正确渲染。

对于影像数据,为加快gpu渲染速度,采用mipmap技术,根据影像尺寸,计算最佳mipmap层数,生成mipmap结构的影像数据。

编制材质id,将id与上图的纹理坐标及纹理等级信息记录下来,引擎加载显示时,将材质id传到gup内处理,确定该块高程数据需要显示合并贴图中的那一部份,最终显示出来。

在步骤s103中,对于划分后的网格数据,计算每个分块的顶点二次误差序列。然后将数据作为一个整体,进行简化,并生成四叉树结构,以提高地形数据的动态调度效率。

具体步骤如下:

步骤s11:计算每个整体块里的子块数据的顶点二次误差值,对顶点二次误差值进行修正,可以根据三角形面积,端点等,对顶点的误差值修正,以保留特征点。简化过程中,计算每个顶点坍缩的最优解,构建子块简化序列。

步骤s12:根据子块的简化序列,生成该地形数据的整块的简化序列信息,通过简化序列面与设定的目标面数进行对比,如果不满足,则根据简化序列对该部分数据进行简化,直到其满足条件为止,然后将该部分数据进行保存。

对于不满足条件的整块地形数据,对其原始数据进行切割,将整体按空间分割成四块数据,对于每个分块数据,重复执行步骤s11和步骤s12,直到所有分块数据满足条件为止。

对于每一个分块数据的简化结果进行评价,计算其简化后的整体几何误差值,存储到对应的分块信息。

对于简化后的分块进行合并,由于分块信息中可能存在大量的子分块信息,提交到gpu进行渲染时,每个子块进行一次提交,会严重的影像整体的渲染效率,所以需要对该块数据进行合并,无论该块存在多少子块,都合并为一个整体。

将分块简化并且合并后的数据,组织成四叉树结构,生成最终的处理结果。

四叉树的数据结构可以参考图2,图2为四叉树的数据结构图。

如图2所示,所有的场景组模型都只有1个lod,且都设置了距离阀值。我们首先加载了场景组sg0,它包含了场景组模型sgmodel0、sgmodel1,以及其他场景元素。sg0中的普通场景元素随之被显示在屏幕上,就比如很远处都能看见的大块模型。当相机走近sgmodel0时,若距离近于sgmodel0的lod0阀值会自动加载场景组sg2,sg2中包含了sgmodel2、sgmodel3、sgmodel4,以及其他一些场景元素。sg2的普通场景元素会立即显示在屏幕上,就比如一些中块模型。当相机走近sgmodel2时,若距离近于sgmodel2的lod0阀值会自动加载场景组sg4,sg4中的普通场景元素就会立即显示在屏幕上,就比如一些小块模型。

在步骤s104中,一般情况下,单次的数据处理,可能为一个小区,或者几公里范围内的大小,处理出来的数据即使能够流畅加载,但是加载一定数据的同等大小的数据后,硬件的承载能力依然会达到极限,为了能够达到城市级别的流畅渲染,需要对n个单次处理数据的结果进行二次组织,组织成一个新的四叉树结构,以动态调度各单次处理数据。具体请参考图3,图3为整体四叉树的数据结构图。

如图3所示,场景组模型sgmodel0包含了4个lod,每个lod分别对应场景组sg0~sg3,当相机离sgmodel0很近时,lod0有效,sg0被送入渲染管线,obj00、obj01、obj02、obj03四个模型显示在屏幕上,当相机稍远离后,lod切换到lod1,sg0被删除,sg1加载并显示,随之依然,当相机很远后,将切换到lod3,sg3将被显示,只有一个模型obj30显示在屏幕上。

若把sgmodel0想象为一片建筑物小区,则当相机离的很近时,屏幕上将会显示很多独立得模型对象,可能每个模型对应一个建筑物,cpu也对每个建筑进行单独裁剪和渲染。当相机离远后,这些单个的建筑物模型将会消失,将会用一组数量更少的模型来代替显示,当相机离得很远后,整个小区就是一个模型,cpu裁剪渲染都是以这个小区为单位了。这样,在一个有几千栋建筑物的城市场景中,我们可能只需要很少的模型数量就可以表现出整个城市了。

在步骤s105中,对于处理后的资源,渲染时,需要根据当前视锥体,判断四叉树结构中哪些数据可以被加载,从而实现动态的调度。

裁剪方法如下:

视椎体裁剪

视椎体裁剪就是将不在视椎体中的物体剔除掉不绘制,而在视椎体内部或与视椎体相交的物体绘制的方法,此举对性能的提升有着巨大的帮助。

通常,物体是不规则的,为了方便,我们用该物体的包围球与当前视锥体进行比较。

如果包围球在视锥体外,那么不需要绘制此包围球所表达的节点及其所有的子节点。如下图所示,红色方块在视锥体外,该方块将被裁剪。

视锥体裁剪包括近平面裁剪、远平面裁剪以及视锥体侧面裁剪三部分。

细节裁剪

场景中某些物体对于观察者而言可能是极其微小的,足以忽略不计,此时可以用细节筛选特性将它们剔除。

遮挡裁剪

判断场景中的物体是否有互相遮挡关系,剔除那些被完全遮挡的对象,保留可见物体。但是,完全的遮挡测试算法往往具有过高的复杂度,需要判断每个场景对象与其他对象的遮挡关系,导致计算带来的开销大于绘制带来的开销,并不实用!

聚集裁剪

这是一种类似于背面筛选的场景筛选方法,但是它可以将多个对象组合起来进行统一的背面筛选,从而加快背面筛选的速度。

其基本原理是:使用一种截断圆锥体来包含某组几何体的所有法线方向和所有点。

圆锥的顶点位于一个控制点cp,并使用法线n和半角a辅助进行定位。因此对于视点eye如果出现下面的条件:

则认为视点位于该截断圆锥的背面,应当统一剔除它所包含的多个几何体。

通过上述四种裁剪方式,结合四叉树结构的快速搜索遍历,能够保证城市级别数量的流畅渲染,同时内存也始终能够保持在特定大小。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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