1.本发明涉及地理信息技术领域,具体而言,本发明涉及一种地形瓦片数据的渲染方法、装置、电子设备及存储介质。
背景技术:2.近年来,三维数据可视化技术已经愈发成熟,此技术以可控性强、安全性高、成本低廉、显示信息直观丰富等特点受到国内外研究机构的青睐。但受到软硬件条件等诸多因素的限制,目前的实时三维显示平台难以满足实际应用要求,且目前对相关技术的研究不足。因此,目前使用底层图形渲染技术及相关算法实现的自主可控的三维显示平台仍然是主流方案,取决于实现形式和所利用的底层技术的不同,三维显示平台在性能表现上也可能有较大的差别。
3.地理信息的显示是整个三维显示平台的基础,地理信息从渲染方式层面上可以划分为两大类数据:栅格化数据和矢量数据。其中栅格化数据又可以分为影像数据和高程数据。对于三维显示平台来说,其所需要的细节等级范围变化之大,对栅格化数据的管理和显示带来了巨大的挑战。例如,对于全球地理信息、某个国家的地理信息或不同地区的地理信息的显示,显示距离维度可达到数千公里乃至上万公里级别;而对于局部或单个雷达站周边的近距离观察场景,显示维度可能缩小至几公里甚至数百米。在如此大的维度变化之下,适当管理并优化显示数据是三维显示平台进行地理信息显示的基础。
4.现有技术中,对于地理信息的三维显示,通常基于瓦片存储方式实现对地理信息的三维显示,每个地形瓦片对应的位置数据范围不同,越高层级的地形瓦片对应的经纬度范围(显示距离维度)就越小,在渲染时,每个地形瓦片对应一个纹理对象,针对不同的地形瓦片的渲染需求,需要不断切换地形瓦片所对应的纹理对象,这样在渲染时难以达到较高的速率,导致渲染的流畅度不佳,并且会影响图形处理器gpu的性能。
技术实现要素:5.本发明所要解决的技术问题是提供一种地形瓦片数据的渲染方法、装置、电子设备及存储介质,旨在解决如何提高gpu处理效率和性能的问题。
6.本发明解决上述技术问题的技术方案如下:一种地形瓦片数据的渲染方法,该方法包括:
7.获取针对待渲染地形瓦片的渲染请求,渲染请求中包括待渲染地形瓦片的瓦片标识;
8.根据瓦片标识,获取瓦片标识对应的瓦片数据,瓦片数据包括位置数据和图像数据;
9.将瓦片标识对应的图像数据作为预先创建的三维目标纹理的纹理数据;
10.根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理渲染纹理数据,上述第一对应关系为各位置数据和各纹理坐标之间的对应关系。
11.本发明的有益效果是:在想要渲染待渲染地形瓦片时,可基于瓦片标识获取该瓦片标识对应的瓦片数据,然后将该瓦片标识对应的图像数据作为预先创建的三维目标纹理的纹理数据,并根据瓦片标识对应的位置数据与三维目标纹理的纹理坐标之间的对应关系,通过三维目标纹理渲染纹理数据,实现对待渲染地形瓦片的渲染,通过本发明的方案,由于可将瓦片标识对应的图像数据作为三维目标纹理的纹理数据,将地形瓦片的位置数据与三维目标纹理的纹理坐标相关联,则可通过一个三维目标纹理实现对多个地形瓦片的渲染,在渲染不同的地形瓦片时,无需切换纹理对象,不但保证了渲染的流畅性,还可提高渲染效率和gpu的性能。
12.在上述技术方案的基础上,本发明还可以做如下改进。
13.进一步,上述根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理渲染纹理数据,包括:
14.根据瓦片标识对应的位置数据和第一对应关系,确定瓦片标识对应的纹理坐标;
15.根据瓦片标识对应的纹理坐标,通过三维目标纹理渲染纹理数据。
16.采用上述进一步方案的有益效果是,在根据瓦片标识对应的位置数据进行渲染时,需要让三维目标纹理知道渲染到什么位置,则可基于第一对应关系和瓦片标识对应的位置数据,确定出三维目标纹理将纹理数据所渲染的位置在哪,即瓦片标识对应的纹理坐标,这样可更加准确的渲染出待渲染地形瓦片。
17.进一步,上述位置数据包括地理坐标和层级数,纹理坐标包括位置纹理坐标和层级数纹理坐标;上述第一对应关系包括各地理坐标和各位置纹理坐标之间的第二对应关系,以及各层级数和各层级数纹理坐标之间的第三对应关系;
18.上述根据瓦片标识对应的位置数据和第一对应关系,确定瓦片标识对应的纹理坐标,包括:
19.根据瓦片标识对应的地理坐标和第二对应关系,确定瓦片标识对应的位置纹理坐标;
20.根据瓦片标识对应的层级数和第三对应关系,确定瓦片标识对应的层级数纹理坐标,瓦片标识对应的纹理坐标包括位置纹理坐标和层级数纹理坐标。
21.采用上述进一步方案的有益效果是,由于对于地形瓦片的位置数据,包括了层级数和地理位置两方面的信息,则在确定三维目标纹理的纹理坐标时,可基于对应的对应关系确定出与地形瓦片的位置数据相对应的纹理坐标,以使得不同的地形瓦片均可通过一个三维目标纹理进行渲染。
22.进一步,上述瓦片标识对应的瓦片数据存储于中央处理器cpu中,若渲染请求中包括多个瓦片标识,根据瓦片标识,获取瓦片标识对应的瓦片数据,包括:
23.对于每个瓦片标识,根据瓦片标识,从cpu中获取瓦片标识对应的瓦片数据;
24.将各瓦片标识对应的瓦片数据存储至图形处理器gpu的缓存区中;
25.上述根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理渲染纹理数据,包括:
26.依次从缓存区读取三维目标纹理对应的纹理数据;
27.根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理对读取的纹理数据进行渲染。
28.采用上述进一步方案的有益效果是,在一次需要渲染多个地形瓦片时,可先从cpu中获取各个瓦片标识对应的瓦片数据,将这些瓦片数据一次性存储在gpu的缓存区中,这样在对各个地形瓦片进行渲染时,无需每个地形瓦片都要向cpu请求所需要的瓦片数据,从而可提升处理效率,并且提升gpu的性能。
29.进一步,上述每个地形瓦片还对应一个空间标识,空间标识表征了存储该地形瓦片对应的瓦片数据所占的存储空间大小;上述将各瓦片标识对应的瓦片数据存储至gpu的缓存区中,包括:
30.根据各瓦片标识对应的地形瓦片的空间标识,确定存储每个地形瓦片对应的瓦片数据所占的存储空间大小;
31.确定gpu的缓存区中是否有空闲存储空间;
32.若缓存区中有空闲存储空间,则确定空闲存储空间的空间大小,根据各地形瓦片对应的存储空间大小和空闲存储空间的空间大小,将目标数量的地形瓦片对应的瓦片数据存储至空闲存储空间中,目标数量的地形瓦片对应的存储空间大小不大于空闲存储空间的空间大小。
33.采用上述进一步方案的有益效果是,由于gpu的存储资源有限,且如果gpu中存储过多的数据,会影响gpu的性能,因此,在将各瓦片标识对应的瓦片数据存储至gpu的缓存区中时,需要考虑缓存区中是否有存储这些瓦片数据的空闲存储空间,如果有空闲存储空间,则可将目标数据的地形瓦片对应的瓦片数据存储至空闲存储空间中,在存储瓦片数据时考虑gpu的存储空间,可保证gpu运行顺畅。
34.进一步,若上述缓存区中没有空闲存储空间,该方法还包括:
35.确定缓存区中是否存在已渲染完的地形瓦片;
36.若存在已渲染完的地形瓦片,删除已渲染完的地形瓦片对应的瓦片数据。
37.采用上述进一步方案的有益效果是,如果缓存区中没有空闲存储空间,则可确定缓存区中是否有可以释放的存储空间,如果有则释放缓存区中的空间,从而可以充分利用gpu的存储资源。
38.进一步,上述缓存区包括多个子存储空间,每个子存储空间对应一个存储标识,各存储标识对应一个基于栈的索引表;
39.上述确定缓存区中是否有空闲存储空间,包括:
40.确定索引表中是否存在未出栈的存储标识;
41.若索引表中存在未出栈的存储标识,则确定缓存区中存在空闲存储空间;
42.若索引表中不存在未出栈的存储标识,则确定缓存区中不存在空闲存储空间。
43.采用上述进一步方案的有益效果是,采用基于栈的索引表来管理缓存区的存储空间,存储标识出栈表示该存储标识对应的子存储空间已被占利用,存储标识入栈表示该存储标识对应的子存储空间没有被利用,则可基于索引表中是否存在未出栈的存储标识,确定缓存区中是否存在空闲存储空间,通过基于栈的索引表来管理各存储标识,便于对缓存区进行管理。
附图说明
44.为了更清楚地说明本发明实施例中的技术方案,下面将对本发明实施例描述中所
需要使用的附图作简单地介绍。
45.图1为本发明一个实施例提供的一种地形瓦片数据的渲染方法的流程示意图;
46.图2为本发明又一个实施例提供的一种地形瓦片数据的渲染方法的流程示意图;
47.图3为本发明一个实施例提供的一种地形瓦片数据的渲染装置的结构示意图;
48.图4为本发明一个实施例提供的一种电子设备的结构示意图。
具体实施方式
49.以下对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
50.下面以具体实施例对本发明的技术方案以及本发明的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
51.本发明实施例所提供的方案可以适用于任何需要对地形瓦片进行渲染的应用场景中。本发明实施例提供了一种可能的实现方式,如图1所示,提供了一种地形瓦片数据的渲染方法的流程图,该方案可以由任一电子设备执行,例如,可以是gpu(graphics processing unit,图形处理器),或者由gpu和cpu(central processing unit/processor,中央处理器)共同执行。为描述方便,下面将以gpu作为执行主体为例对本发明实施例提供的方法进行说明,如图1中所示的流程图,该方法可以包括以下步骤:
52.步骤s110,获取针对待渲染地形瓦片的渲染请求,渲染请求中包括待渲染地形瓦片的瓦片标识。
53.步骤s120,根据瓦片标识,获取瓦片标识对应的瓦片数据,瓦片数据包括位置数据和图像数据。
54.步骤s130,将瓦片标识对应的图像数据作为预先创建的三维目标纹理的纹理数据。
55.步骤s140,根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理渲染纹理数据,上述第一对应关系为各位置数据和各纹理坐标之间的对应关系。
56.通过本发明的方法,在想要渲染待渲染地形瓦片时,可基于瓦片标识获取该瓦片标识对应的瓦片数据,然后将该瓦片标识对应的图像数据作为预先创建的三维目标纹理的纹理数据,并根据瓦片标识对应的位置数据与三维目标纹理的纹理坐标之间的对应关系,通过三维目标纹理渲染纹理数据,实现对待渲染地形瓦片的渲染,通过本发明的方案,由于可将瓦片标识对应的图像数据作为三维目标纹理的纹理数据,将地形瓦片的位置数据与三维目标纹理的纹理坐标相关联,则可通过一个三维目标纹理实现对多个地形瓦片的渲染,在渲染不同的地形瓦片时,无需切换纹理对象,不但保证了渲染的流畅性,还可提高渲染效率和gpu的性能。
57.下面结合以下具体的实施例,对本发明的方案进行进一步的说明,在该实施例中,一种地形瓦片数据的渲染方法可以包括以下步骤:
58.步骤s110,获取针对待渲染地形瓦片的渲染请求,渲染请求中包括待渲染地形瓦片的瓦片标识。
59.其中,上述渲染请求指的是想对待渲染地形瓦片进行渲染的请求,该请求可以是
基于用户对终端设备的客户端界面的触发操作生成的请求,该触发操作的具体形式根据需要配置,例如,可以是用户在终端设备的应用程序的界面上特定操作位置的触发动作,在实际用中,触发操作可以是针对相关触发标识的触发选择操作。其中,触发标识的具体形式可以根据实际需要配置,比如,可以是客户端界面上的指定虚拟按钮或输入框,具体的,例如,可以是在客户端界面上显示的“xxx”的虚拟按钮,用户点击该虚拟按钮的操作即表示用户想要查看“xxx”对应的地理信息。
60.其中,瓦片标识用来标识地形瓦片的身份,即用来表示地形瓦片是哪个地理位置对应的瓦片,为描述方便,下文将地形瓦片称为瓦片,每个瓦片对应唯一一个瓦片标识,瓦片标识可以为数字、字符或文字中的至少一项,本发明中不限定瓦片标识的具体表现形式,均在本发明的保护范围内。
61.上述待渲染地形瓦片可以是地图数据对应的瓦片,比如,某个国家的地图,某个省的地图,或者世界地图。
62.步骤s120,根据瓦片标识,获取瓦片标识对应的瓦片数据,瓦片数据包括位置数据和图像数据。
63.其中,不同的瓦片标识对应不同的瓦片数据,位置数据包括瓦片的地理坐标和层级数,地理坐标表征了瓦片的地理位置,比如,地理坐标可以为经纬度坐标;层级数表征了瓦片对应的经纬度范围,层级数越大,表明经纬度范围越小,通过不同的层级数区分瓦片所对应的经纬度范围,层级数可以通过数字、字符或文字中的至少一项,本发明中不限定层级数的具体表现形式。图像数据即为每个瓦片对应的图像,不同瓦片对应的图像数据不同。
64.上述渲染请求是gpu端接收的请求,瓦片数据通常存储在cpu中,则可基于该渲染请求,向cpu获取瓦片标识对应的瓦片数据,并将该瓦片数据存储在gpu的缓存区。
65.上述瓦片标识对应的位置数据和图像数据可以分开获取,也可以一起获取,比如,可先获取位置数据再获取图像数据,或者,也可以同时获取位置数据和图像数据。
66.如果渲染请求中包括多个瓦片标识,即用户想同时查看多个瓦片,则上述根据瓦片标识,获取瓦片标识对应的瓦片数据,可以包括:
67.对于每个瓦片标识,根据瓦片标识,从cpu中获取瓦片标识对应的瓦片数据;
68.将各瓦片标识对应的瓦片数据存储至图形处理器gpu的缓存区中;
69.上述根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理渲染纹理数据,包括:
70.依次从缓存区读取三维目标纹理对应的纹理数据;
71.根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理对读取的纹理数据进行渲染。
72.其中,在渲染请求中包括多个瓦片标识时,可向cpu获取每个瓦片标识对应的瓦片数据,并将各个瓦片标识对应的瓦片数据一次性存储至gpu的缓存区中,在需要渲染时,可从gpu的缓存区中依次读取瓦片数据,将读取的瓦片数据中的图像数据作为纹理数据,根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理对读取的纹理数据进行渲染,这样可以不需要每次渲染都向cpu请求瓦片数据,减少gpu与cpu之间的交互,提升处理效率。
73.可以理解的是,在将各瓦片标识对应的瓦片数据存储至缓冲区后,将瓦片标识对
应的图像数据作为三维目标纹理的纹理数据的一种可实现方式可以是:依次将缓冲区中的每个瓦片标识对应的图像数据作为三维目标纹理的纹理数据。
74.上述读取的纹理数据即为图像数据,在实际应用中,在渲染时,可以读取一个瓦片对应的纹理数据,渲染一次,也可以在读取多个瓦片对应的纹理数据后,对读取的多个瓦片对应的纹理数据同时进行渲染,在本发明的方案不做限定,可基于实际需求进行设置。
75.对于三维目标纹理而言,渲染的时候所渲染的就是三维目标纹理中存储的数据,因此,上述将瓦片标识对应的图像数据作为三维目标纹理的纹理数据的一种可实现方式为,将瓦片标识对应的图像数据存储至三维目标纹理,这样在渲染时,三维目标纹理直接渲染其存储的数据即可。在实际应用中,三维目标纹理通常运行在gpu上。
76.上述图像数据和位置数据可以分开存储在gpu中的不同存储空间,比如,将位置数据存储在gpu的顶点存储空间,将图像数据存储在gpu的图像存储空间,以方便对图像数据和位置数据的管理。
77.由于考虑到gpu的存储空间有限,在有多个瓦片同时需要被渲染时,要先判断一下gpu的缓存区中是否有空闲存储空间,以保证渲染的正常进行。基于此,上述每个地形瓦片还对应一个空间标识,空间标识表征了存储该地形瓦片对应的瓦片数据所占的存储空间大小;上述将各瓦片标识对应的瓦片数据存储至gpu的缓存区中,包括:
78.根据各瓦片标识对应的地形瓦片的空间标识,确定存储每个地形瓦片对应的瓦片数据所占的存储空间大小;
79.确定gpu的缓存区中是否有空闲存储空间;
80.若缓存区中有空闲存储空间,则确定空闲存储空间的空间大小,根据各地形瓦片对应的存储空间大小和空闲存储空间的空间大小,将目标数量的地形瓦片对应的瓦片数据存储至空闲存储空间中,目标数量的地形瓦片对应的存储空间大小不大于空闲存储空间的空间大小。
81.由于gpu的存储资源有限,且如果gpu中存储过多的数据,会影响gpu的性能,因此,在将各瓦片标识对应的瓦片数据存储至gpu的缓存区中时,需要考虑缓存区中是否有存储这些瓦片数据的空闲存储空间,如果有空闲存储空间,则可将目标数据的地形瓦片对应的瓦片数据存储至空闲存储空间中,在存储瓦片数据时考虑gpu的存储空间,可保证gpu运行顺畅。
82.其中,目标数量指的是存储至空闲存储空间中的地形瓦片的数量,目标数量为不小于1的整数。可以理解的是,如果所请求渲染的地形瓦片的数量大于目标数量,则可先将所请求的地形瓦片中靠前的目标数量的地形瓦片先存储至空闲存储空间,在目标数量的地形瓦片被渲染完成后,可将被渲染完成后的地形瓦片的瓦片数据删除,再将所请求的地形瓦片中靠后的地形瓦片存储至空间存储空间。或者,也可以一边渲染一边删除已渲染完的瓦片数据,已释放缓存区的存储空间。其中,靠后的地形瓦片的数量可以不大于目标数量。其中,靠前和靠口指的是渲染时序上的先后。
83.上述空间标识可以通过文字、字符或数据中的至少一项进行表征,本发明方案中不限定空间标识的具体表现形式,均在本发明的保护范围内。
84.如果缓存区中没有空闲存储空间,则该方法还可以包括:
85.确定缓存区中是否存在已渲染完的地形瓦片;
86.若存在已渲染完的地形瓦片,删除已渲染完的地形瓦片对应的瓦片数据。
87.如果缓存区中没有空闲存储空间,则可确定缓存区中是否有可以释放的存储空间,如果有则释放缓存区中的空间,从而可以充分利用gpu的存储资源。
88.其中,在将已渲染完的地形瓦片对应的瓦片数据后,可将需要渲染的瓦片的瓦片数据存储至缓存区,比如,前文描述的所请求的地形瓦片中靠后的地形瓦片。通过这种方式,可以一边渲染一边释放缓存区的存储空间,以确保gpu运行顺畅。
89.可选的,每个地形瓦片还可对应一个时间标识,该时间标识表征了该地形瓦片的渲染时间,则在确定缓存区中是否存在已渲染完的地形瓦片时,具体可以基于缓存区中存储的各个瓦片的时间标识确定哪些瓦片是已渲染完的瓦片。瓦片对应的渲染时间越早,表明该瓦片是已渲染完的瓦片的概率越大。
90.在本发明的可选实施例中,上述缓存区包括多个子存储空间,每个子存储空间对应一个存储标识,各存储标识对应一个基于栈的索引表;
91.确定缓存区中是否有空闲存储空间,包括:
92.确定索引表中是否存在未出栈的存储标识;
93.若索引表中存在未出栈的存储标识,则确定缓存区中存在空闲存储空间;
94.若索引表中不存在未出栈的存储标识,则确定缓存区中不存在空闲存储空间。
95.其中,基于栈的索引表遵循后进先出的原则,受后进先出的原则限制,在使用前,就将缓存区的存储空间划分好了,每个子存储空间对应存储一个瓦片的瓦片数据,因此,在初始化时,需要指明栈的节点最大个数,即可以存储的瓦片的数量,也就是子存储空间的数量。如果三维目标纹理在渲染时,一次性可以渲染多个瓦片,则在创建三维目标纹理时,需要预先确定好对应的层级数,也就是一次性可以渲染瓦片的数量。
96.基于后进先出的原则,后进栈的存储标识对应存储先渲染的瓦片的瓦片数据,先进栈的存储标识对应存储后渲染的瓦片的瓦片数据,这样,对于渲染完的瓦片,可先出栈,也可先将栈顶的瓦片数据删除。在渲染时,按照渲染顺序,对应出栈一个存储标识,通过该存储标识的出栈,表征该存储标识对应的存储空间已经被利用,即已存储对应的瓦片数据。
97.可选的,如果有新的瓦片需要被渲,则可将出栈的存储标识对应的子存储空间中的数据删除,并将该出栈的存储标识入栈,此时,存储标识的入栈表示该存储标识对应的子存储空间没有被利用,已经被释放,可以存储其他瓦片的瓦片数据,并且,由于后进先出的原则,可将先渲染完的瓦片对应的存储标识先出栈,该存储标识再次入栈时仍在栈顶,基于栈的后进先出原则可以保证各瓦片的渲染顺序与瓦片的排列顺序一致。
98.作为一个示例,基于栈的索引表可表示为[1~n],n表示可存储的瓦片的数量,1~n表示各个瓦片对应的存储标识,按照渲染顺序,先渲染存储标识1对应的图像数据,再依次渲染存储标识2以及存储标识2之后的存储标识对应的图像数据。在渲染时,先将存储标识1出栈,此时,表示存储标识1对应的子存储空间已被利用,在对存储标识1对应的图像数据渲染后,可将该存储标识1对应的瓦片数据删除,释放存储标识1对应的子存储空间,此时,可将该存储标识1入栈,表示现在存储标识1对应的子存储空间没有被利用,可存储其他瓦片的瓦片数据。
[0099]
步骤s130,将瓦片标识对应的图像数据作为预先创建的三维目标纹理的纹理数据。
0);而后将该正方形区域四等分为四个子方形区域,每一个子区域对应的图像为下一个细节等级(lod 1);其中,lod表示地理坐标,而后以此类推,不断地切分每一个层级的方形区域,生成更高细节等级的区域。以上过程中,每一个方形区域对应的图像被称为一个瓦片。每个瓦片的原始数据分辨率通常是相同的,但其对应的地理坐标范围不同,越高细节层级的瓦片对应的经纬度范围就越小。
[0114]
上述渲染的过程为确定三维目标纹理后,设置着色器参数,然后基于设置的着色器参数进行渲染。
[0115]
可选的,上述瓦片的位置数据可以包括三个数据成员,一个vec4类型(由x,y,z,w四个浮点数组成的四元组)的mcrange(地理坐标)表示瓦片对应的墨卡托投影坐标起始和终止值,一个vec4类型的texrange(纹理坐标)代表瓦片对应的纹理坐标的前两个分量(u,v)(位置纹理坐标)的起始值和结束值,一个float类型的layerindex(层级数)代表瓦片对应的纹理坐标的第三个分量w(层级数纹理坐标)。
[0116]
为了更好的说明及理解本发明所提供的方法的原理,下面结合一个可选的具体实施例对本发明的方案进行说明。需要说明的是,该具体实施例中的各步骤的具体实现方式并不应当理解为对于本发明方案的限定,在本发明所提供的方案的原理的基础上,本领域技术人员能够想到的其他实现方式也应视为本发明的保护范围之内。
[0117]
参见图2所示的渲染流程示例图,在本实施例中,先通过墨卡托投影得到多个瓦片,每个瓦片的位置数据可表示为:(x,y,z),其中,(x,y)表示地理坐标,z表示层级数。
[0118]
在初始化时,创建一个3d纹理(三维目标纹理),该三维目标纹理可表示为:(u,v,w),其中,(u,v)是与地理坐标对应的位置纹理坐标,w为与层级数z对应的层级数纹理坐标,根据瓦片的位置数据和纹理坐标,建立第一对应关系,第一对应关系包括各地理坐标和各位置纹理坐标之间的第二对应关系,以及各层级数和各层级数纹理坐标之间的第三对应关系。
[0119]
将所有瓦片数据加载到cpu的本地缓存中,确定上述瓦片数据对应的各瓦片中是否存在未渲染的瓦片(瓦片对象)。
[0120]
如果存在未处理瓦片对象,gpu向cpu发送渲染请求,且渲染请求中包括多个瓦片标识,对于每个瓦片标识,从cpu中获取瓦片标识对应的位置数据(x,y,z),根据第一对应关系和瓦片标识对应的层级数z,获取瓦片标识对应的图像数据。
[0121]
gpu的缓存区包括多个子存储空间,每个子存储空间对应一个存储标识,各存储标识对应一个基于栈的索引表。确定索引表中是否存在未出栈的存储标识;若索引表中存在未出栈的存储标识,则确定缓存区中存在空闲存储空间;若索引表中不存在未出栈的存储标识,则确定缓存区中不存在空闲存储空间,在缓存区中存在空闲存储空间时,确定空闲存储空间的空间大小,根据各瓦片标识对应的地形瓦片的空间标识,确定存储每个地形瓦片对应的瓦片数据所占存储空间大小,根据各地形瓦片对应的存储空间大小和空闲存储空间的空间大小,将目标数量的地形瓦片对应的瓦片数据存储至空闲存储空间中(对应图2中所示的cpu:将瓦片的顶点坐标(位置数据)和纹理坐标记录到本地buffer(缓存区)),其中,目标数量的地形瓦片对应的存储空间大小不大于空闲存储空间的空间大小。
[0122]
如果缓存区中没有空闲存储空间,还可以确定缓存区中是否存在已渲染完的地形瓦片;若存在已渲染完的地形瓦片,删除已渲染完的地形瓦片对应的瓦片数据,释放缓存区
的存储资源来存储瓦片数据。
[0123]
在将目标数量的地形瓦片对应的瓦片数据存储至空闲存储空间中之后,根据瓦片标识对应的地理坐标和第二对应关系,确定瓦片标识对应的位置纹理坐标;根据瓦片标识对应的层级数和第三对应关系,确定瓦片标识对应的层级数纹理坐标,瓦片标识对应的纹理坐标包括位置纹理坐标和层级数纹理坐标。
[0124]
对于每个瓦片,将该瓦片对应的图像数据作为三维目标纹理的纹理数据,在渲染时,从空闲存储空间中读取各个瓦片对应的纹理数据,根据每个瓦片对应的纹理坐标,通过三维目标纹理对读取的纹理数据进行渲染。
[0125]
如果不存在未处理瓦片对象,则cpu更新本地缓存中的瓦片数据,并将更新后的瓦片数据通过上述方式存储到gpu的缓存区(对应图2中所示的cpu-》gpu:更新本地buffer到gpu实例化顶点缓冲区(缓存区))。然后将瓦片数据与3d纹理绑定,即将更新后的图像数据作为三维目标纹理的纹理数据,将更新后的位置数据与三维目标纹理的纹理坐标进行关联(对应图2中所示的cpu-》gpu:绑定3d纹理),将更新后的位置数据存储至gpu的缓冲区(对应图2中所示的gpu:绑定实例化顶点缓冲区),gpu根据位置数据,通过三维目标纹理对纹理数据进行渲染(对应图2中所示的gpu:实例化绘制)。
[0126]
基于上述实施例中的方案,通过三维显示平台对该方案进行性能测试,在720p分辨率下达到稳定60fps(垂直同步开)、最高71.2fps(垂直同步关)的刷新率;在同样条件下,使用常规的瓦片渲染方式,720p分辨率下最高帧率为47.2fps,最低帧率为36.8fps,平均帧率为44.1fps,相比于本发明的方案,渲染效率低。上述在三维平台上进行测试时所对应的硬件参数为,处理器为intel core(tm)i3-2120,内存为4gb 1333mhz,显卡为nvidia geforce gt420。上述硬件参数仅是示例,不对本发明方案产生限定。
[0127]
本发明方法将地形瓦片的渲染性能综合提升了约60%,可以将本发明的方法以可接受的帧速率运行在装备硬件平台上,降低了三维软件对于硬件性能的要求,使得在装备显控软件中引入三维态势变得可行。
[0128]
通过本发明的方案,在想要渲染待渲染地形瓦片时,可基于瓦片标识获取该瓦片标识对应的瓦片数据,然后将该瓦片标识对应的图像数据作为预先创建的三维目标纹理的纹理数据,并根据瓦片标识对应的位置数据与三维目标纹理的纹理坐标之间的对应关系,通过三维目标纹理渲染纹理数据,实现对待渲染地形瓦片的渲染,通过本发明的方案,由于可将瓦片标识对应的图像数据可作为三维目标纹理的纹理数据,将地形瓦片的位置数据与三维目标纹理的纹理坐标相关联,则可通过一个三维目标纹理实现对多个地形瓦片的渲染,在渲染不同的地形瓦片时,无需切换纹理对象,不但保证了渲染的流畅性,还可提高渲染效率和gpu的性能。另一方面,通过基于栈的索引表对缓存区的存储空间进行管理,可充分利用缓存区的存储空间。
[0129]
基于与图1中所示的方法相同的原理,本发明实施例还提供了一种地形瓦片数据的渲染装置20,如图3中所示,该地形瓦片数据的渲染装置20可以包括请求获取模块210、数据获取模块220、纹理数据确定模块230和渲染模块240,其中:
[0130]
请求获取模块210,用于获取针对待渲染地形瓦片的渲染请求,渲染请求中包括待渲染地形瓦片的瓦片标识;
[0131]
数据获取模块220,用于根据瓦片标识,获取瓦片标识对应的瓦片数据,瓦片数据
包括位置数据和图像数据;
[0132]
纹理数据确定模块230,用于将瓦片标识对应的图像数据作为预先创建的三维目标纹理的纹理数据;
[0133]
渲染模块240,用于根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理渲染纹理数据,第一对应关系为各位置数据和各纹理坐标之间的对应关系。
[0134]
可选的,上述渲染模块240在根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理渲染纹理数据时,具体用于:
[0135]
根据瓦片标识对应的位置数据和第一对应关系,确定瓦片标识对应的纹理坐标;
[0136]
根据瓦片标识对应的纹理坐标,通过三维目标纹理渲染纹理数据。
[0137]
可选的,上述位置数据包括地理坐标和层级数,纹理坐标包括位置纹理坐标和层级数纹理坐标;第一对应关系包括各地理坐标和各位置纹理坐标之间的第二对应关系,以及各层级数和各层级数纹理坐标之间的第三对应关系;
[0138]
上述渲染模块240在根据瓦片标识对应的位置数据和第一对应关系,确定瓦片标识对应的纹理坐标时,具体用于:
[0139]
根据瓦片标识对应的地理坐标和第二对应关系,确定瓦片标识对应的位置纹理坐标;
[0140]
根据瓦片标识对应的层级数和第三对应关系,确定瓦片标识对应的层级数纹理坐标,瓦片标识对应的纹理坐标包括位置纹理坐标和层级数纹理坐标。
[0141]
可选的,上述瓦片标识对应的瓦片数据存储于中央处理器cpu中,若渲染请求中包括多个瓦片标识,上述数据获取模块220在根据瓦片标识,获取瓦片标识对应的瓦片数据时,具体用于:
[0142]
对于每个瓦片标识,根据瓦片标识,从cpu中获取瓦片标识对应的瓦片数据;
[0143]
将各瓦片标识对应的瓦片数据存储至图形处理器gpu的缓存区中;
[0144]
根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理渲染纹理数据,包括:
[0145]
依次从缓存区读取三维目标纹理对应的纹理数据;
[0146]
根据瓦片标识对应的位置数据和第一对应关系,通过三维目标纹理对读取的纹理数据进行渲染。
[0147]
可选的,每个地形瓦片还对应一个空间标识,空间标识表征了存储该地形瓦片对应的瓦片数据所占的存储空间大小;
[0148]
上述数据获取模块220在将各瓦片标识对应的瓦片数据存储至gpu的缓存区中时,具体用于:
[0149]
根据各瓦片标识对应的地形瓦片的空间标识,确定存储每个地形瓦片对应的瓦片数据所占存储空间大小;
[0150]
确定gpu的缓存区中是否有空闲存储空间;
[0151]
若缓存区中有空闲存储空间,则确定空闲存储空间的空间大小,根据各地形瓦片对应的存储空间大小和空闲存储空间的空间大小,将目标数量的地形瓦片对应的瓦片数据存储至空闲存储空间中,目标数量的地形瓦片对应的存储空间大小不大于空闲存储空间的空间大小。
[0152]
可选的,若缓存区中没有空闲存储空间,该装置还包括:
[0153]
存储空间释放模块,用于确定缓存区中是否存在已渲染完的地形瓦片;若存在已渲染完的地形瓦片,删除已渲染完的地形瓦片对应的瓦片数据。
[0154]
可选的,上述缓存区包括多个子存储空间,每个子存储空间对应一个存储标识,各存储标识对应一个基于栈的索引表;
[0155]
上述数据获取模块220在确定缓存区中是否有空闲存储空间时,具体用于:
[0156]
确定索引表中是否存在未出栈的存储标识;
[0157]
若索引表中存在未出栈的存储标识,则确定缓存区中存在空闲存储空间;
[0158]
若索引表中不存在未出栈的存储标识,则确定缓存区中不存在空闲存储空间。
[0159]
本发明实施例的地形瓦片数据的渲染装置可执行本发明实施例所提供的地形瓦片数据的渲染方法,其实现原理相类似,本发明各实施例中的地形瓦片数据的渲染装置中的各模块、单元所执行的动作是与本发明各实施例中的地形瓦片数据的渲染方法中的步骤相对应的,对于地形瓦片数据的渲染装置的各模块的详细功能描述具体可以参见前文中所示的对应的地形瓦片数据的渲染方法中的描述,此处不再赘述。
[0160]
其中,上述地形瓦片数据的渲染装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该地形瓦片数据的渲染装置为一个应用软件;该装置可以用于执行本发明实施例提供的方法中的相应步骤。
[0161]
在一些实施例中,本发明实施例提供的地形瓦片数据的渲染装置可以采用软硬件结合的方式实现,作为示例,本发明实施例提供的地形瓦片数据的渲染装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本发明实施例提供的地形瓦片数据的渲染方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(asic,application specific integrated circuit)、dsp、可编程逻辑器件(pld,programmable logic device)、复杂可编程逻辑器件(cpld,complex programmable logic device)、现场可编程门阵列(fpga,field-programmable gate array)或其他电子元件。
[0162]
在另一些实施例中,本发明实施例提供的地形瓦片数据的渲染装置可以采用软件方式实现,图3示出了存储在存储器中的地形瓦片数据的渲染装置,其可以是程序和插件等形式的软件,并包括一系列的模块,包括请求获取模块210、数据获取模块220、纹理数据确定模块230和渲染模块240,用于实现本发明实施例提供的地形瓦片数据的渲染方法。
[0163]
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定。
[0164]
基于与本发明的实施例中所示的方法相同的原理,本发明的实施例中还提供了一种电子设备,该电子设备可以包括但不限于:处理器和存储器;存储器,用于存储计算机程序;处理器,用于通过调用计算机程序执行本发明任一实施例所示的方法。
[0165]
在一个可选实施例中提供了一种电子设备,如图4所示,图4所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本发明实施例的限定。
[0166]
处理器4001可以是cpu(central processing unit,中央处理器),通用处理器,
dsp(digital signal processor,数据信号处理器),asic(application specific integrated circuit,专用集成电路),fpga(field programmable gate array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。
[0167]
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0168]
存储器4003可以是rom(read only memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,ram(random access memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是eeprom(electrically erasable programmable read only memory,电可擦可编程只读存储器)、cd-rom(compact disc read only memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
[0169]
存储器4003用于存储执行本发明方案的应用程序代码(计算机程序),并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述方法实施例所示的内容。
[0170]
其中,电子设备也可以是终端设备,图4示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0171]
本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。
[0172]
根据本发明的另一个方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种实施例实现方式中提供的方法。
[0173]
可以以一种或多种程序设计语言或其组合来编写用于执行本发明的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0174]
应该理解的是,附图中的流程图和框图,图示了按照本发明各种实施例的方法和
计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0175]
本发明实施例提供的计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0176]
上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述实施例所示的方法。
[0177]
以上描述仅为本发明的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本发明中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本发明中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。