本发明属于地理信息技术领域,涉及一种实时地形修改方法,尤其涉及一种基于高度图高程的实时地形修改方法。
背景技术:
高度图(heightmap)是一种表示网格高度的栅格图片,图片中的每个像素点存储了一个高程数据,被广泛应用于地理信息系统,常用于存储地形数据,也被称为数字高程模型(digitalelevationmodels,dem)。目前三维地形渲染一般都是基于高度图(heightmap)实现的,渲染流程如下:首先cpu会将heightmap的数据读取到内存中并进行解析,然后再将解析好的数据交给gpu,最后gpu会将其转换成三维网格(3dmesh)后进行渲染。
当地形数据较为固定时,该地形渲染流程可以较好的完成地形展示工作。但是当地形数据需要频繁改动时,该方法就不太适用了。目前针对地形修改的常见方法是先更新地形数据,然后再重新制作不同层级的heightmap瓦片集合,最后再通过上述的流程进行地形渲染。但在实际使用过程中存在这样一些问题,如:不能实时修改地形,无法根据需求快速渲染出所需的地形;更新并制作地形数据费时费力,而且为了达到合适的效果还可能需要反复多次修改制作。因此亟需一种可以实时修改三维场景中地形的方法。
技术实现要素:
为了解决背景技术中存在的上述技术问题,本发明提供了一种能够根据需求实时修改三维场景中地形、避免每次修改地形后都需要花费大量时间重新制作地形数据以及可提升三维地形的展示效果和可编辑性的基于高度图高程的实时地形修改方法。
为了实现上述目的,本发明采用如下技术方案:
一种基于高度图高程的实时地形修改方法,其特征在于:所述基于高度图高程的实时地形修改方法包括以下步骤:
1)在地形上选取任意的多边形区域p,求出多边形区域p的包围矩形为r并更新该矩形区域的地形瓦片;
2)判断当前需要更新绘制的地形瓦片是否与多边形区域p的包围矩形区域r相交,若未相交,则不进行任何处理;若存在相交区域,则进行步骤3);
3)读取当前地形瓦片的heightmap数据,将heightmap中的像素位置依次映射得到与多边形区域p同坐标系下的离散位置点,依次遍历这些离散位置点,如果离散位置点的位置位于多边形区域p内,则将离散位置点的数据修改为期望的数据;如果离散位置点的位置在多边形区域p外,则进行步骤4);
4)计算离散位置点到多边形区域p的每条边的距离,选出距离离散位置点最近的一条边,记为l;
5)获取离散位置点的高度值h1以及最近边l的高度值h2,再根据该离散位置点距离l的距离d,以及过渡区域的宽度w,进行高度值融合,求出该离散位置点新的高程值h;
6)重复步骤2)到5)直至完成地形的实时修改。
上述步骤5)中离散位置点新的高程值h的具体求解方式是:
h=h2×(1-λ) h1×λ
其中:
λ=d/w,λ∈[0,1];
d是离散位置点距离l的距离;
w是过渡区域的宽度;
h1是离散位置点的高度值;
h2是最近边l的高度值。
一种用于实现如前所述的基于高度图高程的实时地形修改方法的操作系统,其特征在于:所述操作系统包括:
区域绘制模块:用于绘制多边形区域并提取多边形的范围数据;
区域相交判断模块:用于判断当前瓦片范围与绘制区域是否可能存在相交区域;
高程数据填充模块:用于修改多边形绘制区域内的地形数据;
高程数据缓冲模块:用于多边形绘制区域和原始地形区域之间过渡;
所述区域绘制模块通过区域相交判断模块以及高程数据填充模块与高程数据缓冲模块相连。
本发明的优点是:
本发明提供了一种基于高度图高程的实时地形修改方法,在地形上选取任意的多边形区域p,求出多边形区域p的包围矩形为r并更新该矩形区域的地形瓦片;判断当前需要更新绘制的地形瓦片是否与多边形区域p的包围矩形区域r相交,若未相交,则不进行任何处理;若存在相交区域,则进行下个步骤;读取当前地形瓦片的heightmap数据,将heightmap中的像素位置依次映射得到与多边形区域p同坐标系下的离散位置点,依次遍历这些离散位置点,如果离散位置点的位置位于多边形区域p内,则将离散位置点的数据修改为期望的数据;如果离散位置点的位置在多边形区域p外,则进行下个步骤;计算离散位置点到多边形区域p的每条边的距离,选出距离离散位置点最近的一条边,记为l;获取离散位置点的高度值h1以及最近边l的高度值h2,再根据该离散位置点距离l的距离d,以及过渡区域的宽度w,进行高度值融合,求出该离散位置点新的高程值h;重复前述步骤直至完成地形的实时修改。本发明提出了一种实时修改基于heightmap的地形的方法,该方法能够根据需求实时修改三维场景中地形,避免了每次修改地形后都需要花费大量时间重新制作地形数据,提升了三维地形的展示效果和可编辑性。
附图说明
图1是本发明所提供的修改系统的结构框图。
具体实施方式
本发明提供了一种基于高度图高程的实时地形修改方法,该方法包括以下步骤:
1)在地形上选取任意的多边形区域p,然后求出该区域的包围矩形为r并更新该矩形区域的地形瓦片;
2)判断当前需要更新绘制的地形瓦片是否与多边形p的包围矩形区域r相交,若未相交,则不进行任何处理,若存在相交区域,则进行下一步操作;
3)读取当前瓦片的heightmap数据,将heightmap中的像素位置依次映射得到与p同坐标系下的离散位置点,然后依次遍历这些位置点,如果该点的位置位于p内,则将该点的数据修改为我们期望的数据,如果该点在p外,则进行下一步操作
4)计算该点到多边形p的每条边的距离,选出距离该点最近的一条边,记为l;
5)获取该点的高度值h1以及最近边l的高度值h2,然后再根据该点距离l的距离d,以及过渡区域的宽度w,进行高度值融合,求出该点新的高程值h=h2×(1-λ) h1×λ,其中λ=d/w,λ∈[0,1];
6)重复步骤2)到5),即可完成地形的实时修改。
本发明在提供如上所记载的基于高度图高程的实时地形修改方法的同时,还提供了一种用于实现该方法的操作系统,参见图1,该操作系统包括:
区域绘制模块:用于绘制多边形区域,并提取多边形的范围数据。
相交判断模块:用于判断当前瓦片范围与绘制区域是否可能存在相交区域,可以减少无效的运算,提高运行效率。
高程数据填充模块:用于修改多边形绘制区域内的地形数据。
高程数据缓冲模块:用于多边形绘制区域和原始地形区域之间过渡,起到平滑地形的作用。
1.一种基于高度图高程的实时地形修改方法,其特征在于:所述基于高度图高程的实时地形修改方法包括以下步骤:
1)在地形上选取任意的多边形区域p,求出多边形区域p的包围矩形为r并更新该矩形区域的地形瓦片;
2)判断当前需要更新绘制的地形瓦片是否与多边形区域p的包围矩形区域r相交,若未相交,则不进行任何处理;若存在相交区域,则进行步骤3);
3)读取当前地形瓦片的heightmap数据,将heightmap中的像素位置依次映射得到与多边形区域p同坐标系下的离散位置点,依次遍历这些离散位置点,如果离散位置点的位置位于多边形区域p内,则将离散位置点的数据修改为期望的数据;如果离散位置点的位置在多边形区域p外,则进行步骤4);
4)计算离散位置点到多边形区域p的每条边的距离,选出距离离散位置点最近的一条边,记为l;
5)获取离散位置点的高度值h1以及最近边l的高度值h2,再根据该离散位置点距离l的距离d,以及过渡区域的宽度w,进行高度值融合,求出该离散位置点新的高程值h;
6)重复步骤2)到5)直至完成地形的实时修改。
2.根据权利要求1所述的基于高度图高程的实时地形修改方法,其特征在于:所述步骤5)中离散位置点新的高程值h的具体求解方式是:
h=h2×(1-λ) h1×λ
其中:
λ=d/w,λ∈[0,1];
d是离散位置点距离l的距离;
w是过渡区域的宽度;
h1是离散位置点的高度值;
h2是最近边l的高度值。
3.一种用于实现如权利要求1或2所述的基于高度图高程的实时地形修改方法的操作系统,其特征在于:所述操作系统包括:
区域绘制模块:用于绘制多边形区域并提取多边形的范围数据;
区域相交判断模块:用于判断当前瓦片范围与绘制区域是否可能存在相交区域;
高程数据填充模块:用于修改多边形绘制区域内的地形数据;
高程数据缓冲模块:用于多边形绘制区域和原始地形区域之间过渡;
所述区域绘制模块通过区域相交判断模块以及高程数据填充模块与高程数据缓冲模块相连。
技术总结