本发明涉及计算机技术领域,尤其涉及一种地图道路渲染方法及装置。
背景技术:
地图渲染可以展示给用户直观方便的效果,目前,通常使用开源图形库(opengraphicslibrary,opengl)来渲染地图,针对地图中有宽度的道路,由于原生的opengl对线条渲染支持很差,因此,现有技术中,一般采用三角面片来渲染有宽度的道路。
首先,中央处理器(centralprocessingunit,cpu)端建立道路模型,例如,参阅图1所示,p1p2是原始的道路的一个线段。设置道路宽度为w,则p1,p2两个端点沿着该线段垂直方向生成四个顶点,顺序依次为abcd。
这样,就可以根据道路宽度w,计算出该道路四个顶点的位置和生成三角形索引数据,例如,假设p1p2单位向量为(x,y),则p1b,p2d单位向量可以表示为(-y,x),p1a,p2c单位向量可以表示为(y,-x),四个顶点的位置分别为:a=p1+p1a*w/2.0,b=p1+p1b*w/2.0,c=p2+p2c*w/2.0,d=p2+p2d*w/2.0。建模生成的三角形索引数据为132和234。
然后,使用opengl进行渲染时,将顶点的位置、颜色、纹理坐标等数据上传到图形处理器(graphicsprocessingunit,gpu),之后上传三角形索引数据进而完成渲染。
但是,现有技术中,由于是在cpu端以道路宽度为w进行一次建模,并上传给gpu直接渲染,因此,道路宽度在gpu端不能动态修改。这样,在地图缩放时,触发一个切换动画,在不同级别的切换动画中,不同类型的道路都仅是统一进行缩放,例如,地图放大时,比例尺变成了2倍,在切换动画结束时,对于所有不同类型的道路,其道路宽度都是直接放大了2倍,没有一个渐变的过程,会出现道路宽度的突变的问题,影响用户的使用体验。
技术实现要素:
本发明实施例提供一种地图道路渲染方法及装置,以解决现有技术中地图缩放时,会出现道路宽度突变的问题。
本发明实施例提供的具体技术方案如下:
一种地图道路渲染方法,包括:
根据缩放命令获取缩放前后的级别;
分别计算在缩放过程中道路的每一帧的渲染宽度;其中,起始帧对应缩放前的级别,结束帧对应缩放后的级别;
根据所述道路的每一帧的渲染宽度,以及,道路原始顶点位置、原始顶点的法线向量,计算道路的顶点在显示屏幕上的位置;其中,所述顶点表示道路建模时建立的几何结构的顶点,所述原始顶点位置表示道路建模时顶点在预设坐标系中的坐标位置;
对所述道路进行渲染。
较佳的,分别计算在缩放过程中道路的每一帧的渲染宽度,具体包括:
确定所述道路的类型;
根据预设的级别、道路类型以及道路宽度的映射关系,分别确定所述道路缩放前后的级别对应的道路宽度;
根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度。
较佳的,根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度,具体包括:
确定在缩放过程中所需的帧的总数目;
根据所述道路缩放前后的级别对应的道路宽度,以及所述帧的总数目,基于预设的线性差值算法,分别计算所述道路的每一帧的渲染宽度。
较佳的,计算道路的顶点在显示屏幕上的位置,其中,计算在缩放过程中任意一帧对应的所述道路的顶点在显示屏幕上的位置时,具体包括:
根据所述道路的每一个原始顶点的法线向量,以及所述道路的所述任意一帧的渲染宽度,分别计算所述道路的每一个顶点在对应的法线向量方向上的偏移量;
根据所述道路的原始顶点位置,以及所述每一个顶点在对应的法线向量方向上的偏移量,分别计算所述道路的每一个顶点缩放后的新位置;
根据所述道路的每一个顶点缩放后的新位置,以及预设的mvp矩阵,分别计算所述道路的每一个顶点在显示屏幕上的位置。
较佳的,进一步包括:
基于预先建立的道路模型,分别获取所述道路的原始顶点位置、每一个原始顶点的法线向量以及构建的三角形索引数据;
所述道路模型的建模方式为:
针对道路中的任意一个线段,设置所述线段的宽度为0,生成所述线段的四个顶点,并计算所述四个顶点的原始顶点位置,其中,所述四个顶点分为两组,每组中的顶点重合,并每组中包括两个顶点;
针对所述线段的四个顶点,分别计算每一个顶点的法线向量;
基于所述线段的四个顶点,构建三角形,并生成三角形索引数据。
较佳的,对所述道路进行渲染,包括:
根据构建的三角形索引数据和预设的三角面片渲染方式,对所述道路进行渲染。
较佳的,进一步包括:
若所述道路为折线段,则将所述折线段拆分成多个线段的集合,并针对所述集合中的每个线段,分别进行道路模型的建模,并分别计算每个线段的道路的顶点在显示屏幕上的位置。
一种地图道路渲染装置,包括:
获取模块,用于根据缩放命令获取缩放前后的级别;
第一计算模块,用于分别计算在缩放过程中道路的每一帧的渲染宽度;其中,起始帧对应缩放前的级别,结束帧对应缩放后的级别;
第二计算模块,用于根据所述道路的每一帧的渲染宽度,以及,道路原始顶点位置、原始顶点的法线向量,计算道路的顶点在显示屏幕上的位置;其中,所述顶点表示道路建模时建立的几何结构的顶点,所述原始顶点位置表示道路建模时顶点在预设坐标系中的坐标位置;
渲染模块,用于对所述道路进行渲染。
较佳的,分别计算在缩放过程中道路的每一帧的渲染宽度,第一计算模块具体用于:
确定所述道路的类型;
根据预设的级别、道路类型以及道路宽度的映射关系,分别确定所述道路缩放前后的级别对应的道路宽度;
根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度。
较佳的,根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度,第一计算模块具体用于:
确定在缩放过程中所需的帧的总数目;
根据所述道路缩放前后的级别对应的道路宽度,以及所述帧的总数目,基于预设的线性差值算法,分别计算所述道路的每一帧的渲染宽度。
较佳的,计算道路的顶点在显示屏幕上的位置,其中,计算在缩放过程中任意一帧对应的所述道路的顶点在显示屏幕上的位置时,第二计算模块具体用于:
根据所述道路的每一个原始顶点的法线向量,以及所述道路的所述任意一帧的渲染宽度,分别计算所述道路的每一个顶点在对应的法线向量方向上的偏移量;
根据所述道路的原始顶点位置,以及所述每一个顶点在对应的法线向量方向上的偏移量,分别计算所述道路的每一个顶点缩放后的新位置;
根据所述道路的每一个顶点缩放后的新位置,以及预设的mvp矩阵,分别计算所述道路的每一个顶点在显示屏幕上的位置。
较佳的,第二计算模块进一步用于:
基于预先建立的道路模型,分别获取所述道路的原始顶点位置、每一个原始顶点的法线向量以及构建的三角形索引数据;
所述道路模型的建模方式为:
进一步包括:道路模型建立模块,用于针对道路中的任意一个线段,设置所述线段的宽度为0,生成所述线段的四个顶点,并计算所述四个顶点的原始顶点位置,以及针对所述线段的四个顶点,分别计算每一个顶点的法线向量,基于所述线段的四个顶点,构建三角形,并生成三角形索引数据;其中,所述四个顶点分为两组,每组中的顶点重合,并每组中包括两个顶点。
较佳的,对所述道路进行渲染,渲染模块具体用于:
根据构建的三角形索引数据和预设的三角面片渲染方式,对所述道路进行渲染。
较佳的,道路模型建立模块,进一步用于:若所述道路为折线段,则将所述折线段拆分成多个线段的集合,并针对所述集合中的每个线段,分别进行道路模型的建模,并第二计算模块进一步用于分别计算每个线段的道路的顶点在显示屏幕上的位置。
一种服务器,包括:
至少一个存储器,用于存储程序指令;
至少一个处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行上述任一种地图道路渲染方法。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种地图道路渲染方法的步骤。
本发明实施例中,根据缩放命令获取缩放前后的级别;分别计算在缩放过程中道路的每一帧的渲染宽度;其中,起始帧对应缩放前的级别,结束帧对应缩放后的级别;根据所述道路的每一帧的渲染宽度,以及,道路原始顶点位置、原始顶点的法线向量,计算道路的顶点在显示屏幕上的位置;对所述道路进行渲染,这样,在地图缩放时,根据缩放前后的级别,计算出每一帧的渲染宽度,可以获得道路的每一帧的渲染宽度,根据每一帧的渲染宽度,计算道路的顶点在显示屏幕上的位置,每一帧分别进行渲染,进而实现动态渲染,并且,可以针对不同类型道路的每一帧分别进行渲染,而不是所有类型道路都共享一个缩放量,直接切换到缩放后的道路宽度,这样使得不同类型道路都可以自适应地进行道路宽度的平滑切换,从而避免了道路突变的问题,切换动画效果更好,提升了用户的使用体验。
附图说明
图1为现有技术中,建立的道路模型的示意图;
图2为本发明实施例一提供的地图道路渲染方法的流程图;
图3为本发明实施例一提供的建立的道路模型的示意图;
图4为本发明实施例二提供的地图道路渲染方法的执行过程流程图;
图5为本发明实施例三提供的服务器架构环境示意图;
图6为本发明实施例四提供的地图道路渲染装置结构示意图;
图7为本发明实施例五提供的服务器结构示意图;
图8为本发明实施例六提供的用户终端结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为便于对本发明实施例的理解,下面先对几个概念进行简单介绍:
开源图形库(opengraphicslibrary,opengl):定义了一个跨编程语言、跨平台的专业图形程序接口,主要用于三维图形渲染。
级别:地图显示时划分了很多级别,不同级别对应不同的比例尺,即显示时屏幕上每个像素代表的现实世界的长度不一样。
道路建模:输入是道路的顶点,根据一定的规则,生成一个三角形集合,得到三角形索引数据,便于使用opengl进行渲染。
顶点着色器:运行在图形处理器(graphicsprocessingunit,gpu)上的脚本文件,格式跟c语言类似,提供了一系列关键字,开发者可以编写自己的着色器控制顶点的处理过程。
属性(attribute)变量,对应每个顶点的属性数据,opengl中自带的有位置、纹理坐标、颜色等。
uniform变量,应用程序传递给顶点着色器的一种变量,被当前渲染指令中所有的顶点和片断共享,这种变量只能读不能修改。
实施例一:
参阅图2所示,本发明实施例一提供的地图渲染方法,具体包括以下步骤:
步骤200:根据缩放命令获取缩放前后的级别。
实际中,地图渲染通常是,cpu端对道路进行建模,生成一系列三角形,然后,渲染时把这些三角形的索引数据上传到gpu端直接进行渲染,但是,现有技术中,对于不同类型道路,在缩放时,都是统一使用一个缩放量,进行缩放,会出现道路宽度突变的问题,例如,地图放大时,比例尺变成了2倍,会触发一个切换动画,现有技术中,会对地图做全局的放大,缩放因子的区间是[1,2],然后切换动画结束的时候再直接切换成新级别对应的道路宽度,但是,可能缩放前后的道路宽度往往不是2倍关系,因此,在切换动画结束的时候,道路宽度发生了突变,降低了用户的查看体验。
本发明实施例中,设计了一种新的道路模型,并在顶点着色器中能够实现动态修改道路宽度,从而可以达到动态渲染不同宽度道路的效果。
其中,缩放命令,表示缩小命令或放大命令。
例如,用户在手机中查看地图时,需要放大地图时,可以点击地图的显示界面上设置的放大按钮“+”,即发送了放大命令。
其中,获取缩放前后的级别,可以根据地图中设置的比例尺来确定。
例如,用户点击缩放按钮或手指触摸屏幕实现缩放,切换到缩放后的比例尺,可以根据缩放前后的比例尺,确定缩放前后的级别,例如,缩放前的级别为l级,缩放后的级别为s级。
步骤210:分别计算在缩放过程中道路的每一帧的渲染宽度;其中,起始帧对应缩放前的级别,结束帧对应缩放后的级别。
本发明实施例中,缩放过程可以认为是一个动画切换的过程,切换动画中包括一系列动画帧,并起始帧对应缩放前的级别,结束帧对应缩放后的级别。
执行步骤210时,具体包括:
首先,确定所述道路的类型。
其中,道路的类型,可以根据不同道路的功能等级,预先进行划分,本发明实施例中并不进行限制。
并且,不同类型道路可以设置不同的宽度和颜色,这样,在显示时,可以很容易区分不同类型道路,便于用户查看。
例如,有两种类型道路,分别为主干路和支路,可以设置主干路的宽度大于支路的宽度,并主干路的颜色为蓝色、支路的颜色为白色。
然后,根据预设的级别、道路类型以及道路宽度的映射关系,分别确定所述道路缩放前后的级别对应的道路宽度。
本发明实施例中,预先针对每一种类型道路、以及级别,分别设置相应的道路宽度,相当于根据二维因素确定道路宽度。
例如,地图中一共有n种类型道路,则第i种类型道路、l级对应的道路宽度为width[l][i],第i种类型道路、s级对应的道路宽度为width[s][i],其中,0<=i<=n,i表示第几种类型的道路。
最后,根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度。
具体地:1)确定在缩放过程中所需的帧的总数目。
2)根据所述道路缩放前后的级别对应的道路宽度,以及所述帧的总数目,基于预设的线性差值算法,分别计算所述道路的每一帧的渲染宽度。
例如,假设一共有n种类型道路,从l级切换到s级时,每一种类型道路的道路宽度的变化区间,可以表示为:width[l][i]<=width<=width[s][i]。
则例如,切换动画一共包含k帧,即所需的帧的总数目为k,则每一种类型道路的每一帧的渲染宽度,可以用以下计算公式来表示:
width[l][i]+(width[s][i]—width[l][i])*j/k。
其中,j表示第几帧,0<j<=k,0<=i<=n,i表示第几种类型的道路。
其中,上述计算公式为一种线性插值计算公式,这样,可以使得在渲染过程中,道路宽度线性渐变,当然,也可以使用其它的差值公式,本发明实施例中,并不进行限制,目的是为了得到每一帧的渲染宽度,之后可以动态修改不同类型道路的道路宽度,针对每一帧分别进行渲染。
本发明实施例中,在缩放过程中渲染每一帧时,分别针对每一种类型道路,确定缩放前后的级别对应的道路宽度,并计算得到每一种类型道路对应的每一帧的渲染宽度,实现了在地图级别切换时,不同类型道路可以分别确定相应的每一帧的渲染宽度,而不是所有类型道路都是相同的,之后将每一种类型道路的每一帧的渲染宽度,动态上传到gpu的顶点着色器中即可,实现对不同类型的道路分别进行动态渲染。
步骤220:根据所述道路的每一帧的渲染宽度,以及,道路原始顶点位置、原始顶点的法线向量,计算道路的顶点在显示屏幕上的位置;其中,所述顶点表示道路建模时建立的几何结构的顶点,所述原始顶点位置表示道路建模时顶点在预设坐标系中的坐标位置。
其中,顶点表示道路建模时建立的几何结构的顶点,例如,道路建模时,道路的几何结构为有宽度的线段,该有宽度的线段就会有四个顶点,即为本发明实施例中道路的顶点。原始顶点位置就是指道路建模时顶点在预设坐标系中的坐标位置,可以表示道路的显示位置。
执行步骤220时,计算道路的顶点在显示屏幕上的位置,具体为:分别计算在缩放过程中每一帧对应的道路的顶点在显示屏幕上的位置。
其中,计算在缩放过程中任意一帧对应的所述道路的顶点在显示屏幕上的位置时,具体包括:
首先,根据所述道路的每一个原始顶点的法线向量,以及所述道路的所述任意一帧的渲染宽度,分别计算所述道路的每一个顶点在对应的法线向量方向上的偏移量。
例如,a_normal是法线向量,u_linewidth是道路宽度的一半,delta为顶点在法线向量方向上的偏移量,则法线向量与道路宽度的一半相乘,可以得到该顶点在法线向量方向上的偏移量。
然后,根据所述道路的原始顶点位置,以及所述每一个顶点在对应的法线向量方向上的偏移量,分别计算所述道路的每一个顶点缩放后的新位置。
例如,a_pos为原始顶点位置,pos为顶点缩放后的新位置,即在场景中的新位置,则原始顶点位置加上偏移量,就可以得到顶点在场景中的新位置。
最后,根据所述道路的每一个顶点缩放后的新位置,以及预设的mvp矩阵,分别计算所述道路的每一个顶点在显示屏幕上的位置。
其中,mvp矩阵是opengl中固有变量,通过mvp变换,将计算得到的顶点的新的位置,变换到在终端的屏幕上显示时,在屏幕上的位置。
基于上述实施例中,本发明实施例中,在具体实现时,在顶点着色器中主要代码如下:
其中,gl_position为显示时,顶点在屏幕上的位置,u_mvp_matrix为mvp矩阵。计算pos时,由于a_pos传入为vec4,因此,需要先转化为vec4,然后再加上delta,得到pos。
进一步地,执行完步骤220之后,就可以得到道路的每一个顶点在屏幕上的位置,
进一步地,执行步骤220时,还包括:
基于预先建立的道路模型,分别获取所述道路的原始顶点位置、每一个原始顶点的法线向量以及构建的三角形索引数据。
其中,道路模型是在cpu端预先建立,在cpu端建模完成后,将这些数据上传到gpu的顶点着色器完成渲染。
其中,构建的三角形索引数据,表示生成的三角形对应的道路的顶点,以便在渲染时得知哪些顶点构成了三角形,例如,道路的四个顶点分别为1,2,3,4,可以构成两个三角形,三角形的索引数据可以为132、342。
本发明实施例中,在cpu端设计了一种新的道路模型,以道路宽度为0进行建模,并每一个顶点增加法线向量,进而生成三角形索引数据,具体地道路模型的建立,在下文再详细进行介绍。这样,使用opengl渲染时,cpu端就可以将道路模型的顶点的位置、法线向量以及三角形索引数据,上传到gpu,以便在gpu侧实现动态渲染。
步骤230:对所述道路进行渲染。
执行步骤230时,具体包括:
根据构建的三角形索引数据和预设的三角面片渲染方式,对所述道路进行渲染。
也就是说,本发明实施例中,可以根据顶点在屏幕上的位置和三角形索引数据,确定各个顶点在屏幕上构成的三角形,进而可以分别针对每个三角形进行渲染。
本发明实施例中,在gpu的顶点着色器中,可以修改道路宽度,想要动态修改道路宽度,在每帧渲染道路时,可以通过gluniformlf接口,将计算出的每一帧的道路宽度传入到顶点着色器中,进而顶点着色器就可以根据顶点的法线向量和输入的每一帧的道路宽度,计算道路的每一帧对应的顶点在屏幕上的位置。
这样,在gpu侧能够动态修改道路宽度,从而在地图缩放过程的切换动画中,不同类型道路可以自适应地进行道路宽度的平滑切换,道路宽度自然渐变,而不是所有类型道路共享一个全局的缩放量,从而避免了道路宽度突变的情况,提升了用户的使用体验。
进一步地,若所述道路为折线段,则将所述折线段拆分成多个线段的集合,并针对所述集合中的每个线段,分别进行道路模型的建模,并分别计算每个线段的道路的顶点在显示屏幕上的位置。
值得说明的是,上述本发明实施例中,主要针对的是为单个线段的道路的建模和渲染的方法,但是,对于多个点的折线段的道路,本发明实施例中,也是可以适用的,这时,可以将折线段拆分为多个线段的集合,分别针对每个线段,就可以使用本发明实施例中的建模和渲染方法,从而实现动态修改该道路的各顶点的位置,实现道路宽度的自然渐变。
下面简单介绍下,本发明实例中,道路模型的建模方式:
道路模型的建模方式为:
首先,针对道路中的任意一个线段,设置所述线段的宽度为0,生成所述线段的四个顶点,并计算所述四个顶点的原始顶点位置,其中,所述四个顶点分为两组,每组中的顶点重合,并每组中包括两个顶点。
例如,参阅图3所示,图中加粗的线段,表示要渲染的道路,包括四个顶点,分别为1,2,3,4,以道路宽度为0进行建模,则1,2重合,3,4重合。
然后,针对所述线段的四个顶点,分别计算每一个顶点的法线向量。
例如,针对1,2,3,4这四个顶点,分别计算其法线向量,具体分别为v11’,v22’,v33’,v44’。
其中,计算顶点的法线向量的方法,可以使用现有技术中的法线向量的计算方法,这里就不再详述了。
最后,基于所述线段的四个顶点,构建三角形,并生成三角形索引数据。
例如,基于1,2,3,4这四个顶点,可以构建两个三角形,分别为132,342。
本发明实施例中,以道路宽度为0进行道路建模,道路模型的建立在cpu端完成,在渲染时上传到gpu端的数据有:1)原始顶点位置:1,2,3,4;其中,原始顶点位置,为建模时顶点1,2,3,4在预设坐标系中的坐标位置;2)每个顶点的法线向量:v11’,v22’,v33’,v44’;3)三角形的索引数据:132,342。
这样,在cpu端设计了一种新的道路模型,以道路宽度为0进行建模,并每一个顶点增加法线向量,从而可以实现在gpu侧的道路宽度的动态修改,避免缩放过程中级别切换前的道路宽度的突变。
实施例二:
下面采用一个具体的应用场景对上述实施例作出进一步详细说明。本发明实施例二中,可以分为两部分进行描述。
1)cpu端。
在cpu端建立道路模型,每一个顶点增加法线向量,并以道路宽度为0进行建模。
2)顶点着色器。具体参阅图4所示,具体如下:
步骤400:分别获取在缩放过程中道路的每一帧的渲染宽度。
具体地,在缩放过程中,可以通过gluniformlf接口,将计算出的每一帧的道路宽度传入到顶点着色器中,顶点着色器就可以得到每一帧的渲染宽度。
步骤401:根据道路的每一个原始顶点的法线向量,以及道路的任意一帧的渲染宽度,分别计算道路的每一个顶点在对应的法线向量方向上的偏移量。
步骤402:根据所述道路的原始顶点位置,以及所述每一个顶点在对应的法线向量方向上的偏移量,分别计算所述道路的每一个顶点缩放后的新位置。
步骤403:根据所述道路的每一个顶点缩放后的新位置,以及预设的mvp矩阵,分别计算所述道路的每一个顶点在显示屏幕上的位置。
本发明实施例中,在cpu端建立道路模型,以道路宽度为0进行建模,渲染时,将道路模型的相关数据上传到顶点着色器中,在顶点着色器中修改道路宽度,在缩放过程中的每一帧,都计算出一个渲染宽度,进而顶点着色器根据每一帧的渲染宽度,动态进行计算,进而实现了在地图缩放过程中,不仅道路都可以平滑切换,而且,对于不同类型道路还可以根据自己的类型,自适应地进行道路宽度的平滑切换,从而避免了道路突变的问题。
实施例三:
本发明实施例中,参阅图5所示,本发明实施例三中,服务器架构环境示意图。
服务器与用户终端连接,用户终端中安装有地图的应用程序,例如腾讯地图等,用户对该地图进行放大或缩小,进而服务器端执行计算等操作,并根据结果渲染用户终端中的地图。
其中,用户终端可以为手机、电脑、ipad等任何智能设备,本发明实施例三中仅以手机为例进行说明。
例如,用户在手机上打开腾讯地图,查询到某个地点后,想要放大地图,以便可以更清楚地查看该地点,双击屏幕或用两个手指滑动来放大地图,服务器端计算出地图中道路的每个顶点在屏幕上的新位置,进而基于构建的三角形索引数据,实现对道路的动态渲染。
实施例四:
基于上述实施例,参阅图6所示,本发明实施例四中,地图道路渲染装置,具体包括:
获取模块60,用于根据缩放命令获取缩放前后的级别;
第一计算模块61,用于分别计算在缩放过程中道路的每一帧的渲染宽度;其中,起始帧对应缩放前的级别,结束帧对应缩放后的级别;
第二计算模块62,用于根据所述道路的每一帧的渲染宽度,以及,道路原始顶点位置、原始顶点的法线向量,计算道路的顶点在显示屏幕上的位置;其中,所述顶点表示道路建模时建立的几何结构的顶点,所述原始顶点位置表示道路建模时顶点在预设坐标系中的坐标位置;
渲染模块63,用于对所述道路进行渲染。
较佳的,分别计算在缩放过程中道路的每一帧的渲染宽度,第一计算模块61具体用于:
确定所述道路的类型;
根据预设的级别、道路类型以及道路宽度的映射关系,分别确定所述道路缩放前后的级别对应的道路宽度;
根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度。
较佳的,根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度,第一计算模块61具体用于:
确定在缩放过程中所需的帧的总数目;
根据所述道路缩放前后的级别对应的道路宽度,以及所述帧的总数目,基于预设的线性差值算法,分别计算所述道路的每一帧的渲染宽度。
较佳的,计算道路的顶点在显示屏幕上的位置,其中,计算在缩放过程中任意一帧对应的所述道路的顶点在显示屏幕上的位置时,第二计算模块62具体用于:
根据所述道路的每一个原始顶点的法线向量,以及所述道路的所述任意一帧的渲染宽度,分别计算所述道路的每一个顶点在对应的法线向量方向上的偏移量;
根据所述道路的原始顶点位置,以及所述每一个顶点在对应的法线向量方向上的偏移量,分别计算所述道路的每一个顶点缩放后的新位置;
根据所述道路的每一个顶点缩放后的新位置,以及预设的mvp矩阵,分别计算所述道路的每一个顶点在显示屏幕上的位置。
较佳的,第二计算模块62进一步用于:
基于预先建立的道路模型,分别获取所述道路的原始顶点位置、每一个原始顶点的法线向量以及构建的三角形索引数据;
所述道路模型的建模方式为:
进一步包括:道路模型建立模块64,用于针对道路中的任意一个线段,设置所述线段的宽度为0,生成所述线段的四个顶点,并计算所述四个顶点的原始顶点位置,以及针对所述线段的四个顶点,分别计算每一个顶点的法线向量,基于所述线段的四个顶点,构建三角形,并生成三角形索引数据;其中,所述四个顶点分为两组,每组中的顶点重合,并每组中包括两个顶点。
较佳的,对所述道路进行渲染,渲染模块63具体用于:
根据构建的三角形索引数据和预设的三角面片渲染方式,对所述道路进行渲染。
较佳的,道路模型建立模块64,进一步用于:若所述道路为折线段,则将所述折线段拆分成多个线段的集合,并针对所述集合中的每个线段,分别进行道路模型的建模,并第二计算模块62进一步用于分别计算每个线段的道路的顶点在显示屏幕上的位置。
本发明实施例中,在cpu端预先建立道路模型,每个顶点增加法线属性,并以道路宽度为0进行建模,在渲染时,将模型的数据上传给gpu,进而,在gpu中的顶点着色器中,根据顶点的法线属性和输入的每一帧的渲染宽度,动态计算顶点的位置,可以计算出道路的每一帧的渲染宽度,进而在缩放过程中,可以动态改变每一帧时道路的顶点的位置,实现动态渲染。
并且,还可以针对不同类型道路,分别计算不同类型道路的每一帧的渲染宽度,从而实现了在gpu侧动态改变渲染宽度,在地图缩放过程中级别切换时,不同类型道路能够自适应地进行道路宽度的平滑切换,避免了道路宽度突变的情况,切换动画效果更加舒服和自然。
实施例五:
基于上述实施例,参阅图7所示,本发明实施例五中,一种服务器的结构示意图。
本发明实施例五提供了一种服务器,该服务器可以包括处理器710(centerprocessingunit,cpu)、存储器720、输入设备730和输出设备740等,输入设备730可以包括键盘、鼠标、触摸屏等,输出设备740可以包括显示设备,如液晶显示器(liquidcrystaldisplay,lcd)、阴极射线管(cathoderaytube,crt)等。
存储器720可以包括只读存储器(rom)和随机存取存储器(ram),并向处理器710提供存储器720中存储的程序指令和数据。在本发明实施例中,存储器720可以用于存储地图道路渲染方法的程序。
处理器710通过调用存储器720存储的程序指令,处理器710用于按照获得的程序指令执行:
根据缩放命令获取缩放前后的级别;
分别计算在缩放过程中道路的每一帧的渲染宽度;其中,起始帧对应缩放前的级别,结束帧对应缩放后的级别;
根据所述道路的每一帧的渲染宽度,以及,道路原始顶点位置、原始顶点的法线向量,计算道路的顶点在显示屏幕上的位置;其中,所述顶点表示道路建模时建立的几何结构的顶点,所述原始顶点位置表示道路建模时顶点在预设坐标系中的坐标位置;
对所述道路进行渲染。
较佳的,分别计算在缩放过程中道路的每一帧的渲染宽度,处理器710具体用于:
确定所述道路的类型;
根据预设的级别、道路类型以及道路宽度的映射关系,分别确定所述道路缩放前后的级别对应的道路宽度;
根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度。
较佳的,根据所述道路缩放前后的级别对应的道路宽度,分别计算在缩放过程中道路的每一帧的渲染宽度,处理器710具体用于:
确定在缩放过程中所需的帧的总数目;
根据所述道路缩放前后的级别对应的道路宽度,以及所述帧的总数目,基于预设的线性差值算法,分别计算所述道路的每一帧的渲染宽度。
较佳的,计算道路的顶点在显示屏幕上的位置,其中,计算在缩放过程中任意一帧对应的所述道路的顶点在显示屏幕上的位置时,处理器710具体用于:
根据所述道路的每一个原始顶点的法线向量,以及所述道路的所述任意一帧的渲染宽度,分别计算所述道路的每一个顶点在对应的法线向量方向上的偏移量;
根据所述道路的原始顶点位置,以及所述每一个顶点在对应的法线向量方向上的偏移量,分别计算所述道路的每一个顶点缩放后的新位置;
根据所述道路的每一个顶点缩放后的新位置,以及预设的mvp矩阵,分别计算所述道路的每一个顶点在显示屏幕上的位置。
较佳的,处理器710进一步用于:
基于预先建立的道路模型,分别获取所述道路的原始顶点位置、每一个原始顶点的法线向量以及构建的三角形索引数据;
所述道路模型的建模方式为:
处理器710进一步用于:针对道路中的任意一个线段,设置所述线段的宽度为0,生成所述线段的四个顶点,并计算所述四个顶点的原始顶点位置,其中,所述四个顶点分为两组,每组中的顶点重合,并每组中包括两个顶点;
针对所述线段的四个顶点,分别计算每一个顶点的法线向量;
基于所述线段的四个顶点,构建三角形,并生成三角形索引数据。
较佳的,对所述道路进行渲染,处理器710具体用于:
根据构建的三角形索引数据和预设的三角面片渲染方式,对所述道路进行渲染。
较佳的,处理器710进一步用于:
若所述道路为折线段,则将所述折线段拆分成多个线段的集合,并针对所述集合中的每个线段,分别进行道路模型的建模,并分别计算每个线段的道路的顶点在显示屏幕上的位置。
实施例六:
参阅图8所示,本发明实施例六中,一种用户终端的结构示意图。
本发明实施例六提供了一种用户终端,用户终端可以为但不限于手机、平板电脑等。该用户终端可以包括:存储器810、输入模块820、发送模块830、接收模块840、输出模块850、无线通信模块860和处理器870等。具体为:
存储器810可以包括只读存储器(rom)和随机存取存储器(ram),并向处理器870提供存储器810中存储的程序指令和数据,还可以存储用户终端的操作系统、应用程序(application,app)(例如,地图app)、模块和用户终端所使用的各种数据等。
输入模块820可以包括键盘、鼠标、触摸屏等,用于接收用户输入的数字、字符信息或触摸操作,以及产生与用户终端的用户设置以及功能控制有关的键信号的输入等,例如,本发明实施例中,输入模块820可以接收用户在用户终端的地图app中执行的缩放操作等。
发送模块830可以提供用户终端与服务器之间的接口,例如,本发明实施例中,用于向服务器发送缩放命令。
接收模块840同样提供用户终端与服务器之间的接口,例如,本发明实施例中,用于接收服务器的渲染结果等。
输出模块850可以包括显示模块,如液晶显示器(liquidcrystaldisplay,lcd)、阴极射线管(cathoderaytube,crt)等,其中,显示模块可以用于显示由用户输入的信息或提供给用户的信息,或各种用户终端的地图操作界面等。例如,本发明实施例中,可以用于向用户展示地图界面。
无线通信模块860包括但不限于无线保真(wirelessfidelity,wifi)模块、蓝牙模块、红外通信模块等。例如,本发明实施例中,用户终端中接收模块840与发送模块830,向服务器发送缩放命令并接收服务器返回的渲染结果,是通过wifi模块实现了与服务器之间的通信。
处理器870是用户终端的控制中心,利用各种接口和线路连接整个用户终端的各个部分,通过运行或执行存储在存储器810内的软件程序和/或模块,以及调用存储在存储器810内的数据,执行用户终端的各种功能和处理数据,从而对用户终端进行整体监控。
当然,图8中所示的用户终端的结构,仅仅是其中一种示例,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
实施例七:
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种地图道路渲染方法的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。