CN103984720B - 基于OpenGL的瓦片地图创建方法及装置 - Google Patents
基于OpenGL的瓦片地图创建方法及装置 Download PDFInfo
- Publication number
- CN103984720B CN103984720B CN201410201164.0A CN201410201164A CN103984720B CN 103984720 B CN103984720 B CN 103984720B CN 201410201164 A CN201410201164 A CN 201410201164A CN 103984720 B CN103984720 B CN 103984720B
- Authority
- CN
- China
- Prior art keywords
- tile
- map
- formula
- apex coordinate
- corner apex
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
- Instructional Devices (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种基于OpenGL的瓦片地图创建方法及装置,其中,一种基于OpenGL的瓦片地图创建方法包括:获取瓦片地图文件;根据所述瓦片地图文件计算各个瓦片的3D模型坐标;将所述各个瓦片的图片转化为纹理图片;计算所述各个瓦片的纹理图片的坐标;根据所述各个瓦片的3D模型坐标、纹理图片以及纹理图片的坐标,调用所述OpenGL的渲染函数分别对所述各个瓦片进行渲染,生成包含所述各个瓦片的瓦片地图。本发明提供的技术方案能够有效提高瓦片地图的可移植性。
Description
技术领域
本发明涉及瓦片地图技术领域,具体涉及一种基于OpenGL的瓦片地图创建方法及装置。
背景技术
目前,越来越多的地图服务用到瓦片地图技术,例如现在我国实行发布的天地图服务就运用了瓦片地图技术。
瓦片地图技术基于瓦片地图金字塔模型,瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变。瓦片地图金字塔模型的构建原理是:首先确定地图服务平台所要提供的缩放级别的数量N,把缩放级别最低、地图比例尺最大的地图图片作为金字塔的底层,即第0层,并对其进行切片,从地图图片的左上角开始,从左至右、从上到下进行切割,分割成相同大小(比如256x256像素)的正方形地图瓦片,形成第0层瓦片矩阵;在第0层地图图片的基础上,按每2x2像素合成为一个像素的方法生成第1层地图图片,并对其进行切片,分割成与下一层相同大小的正方形地图瓦片,形成第1层瓦片矩阵;采用同样的方法生成第2层瓦片矩阵;以此类推,直到第N一1层,构成整个瓦片金字塔。
目前,利用传统技术开发的瓦片地图的移植性较差,不支持跨平台运行,比如,例如,一些经典的瓦片地图游戏(例如超级玛丽、魂斗罗等)只能运行在红白机上,无法移植到智能设备(例如手机、平板电脑等)运行。
发明内容
本发明提供一种基于OpenGL的瓦片地图创建方法及装置,用于提高瓦片地图的可移植性。
本发明第一方面提供一种基于OpenGL的瓦片地图创建方法,包括:
获取瓦片地图文件;
根据所述瓦片地图文件计算各个瓦片的3D模型坐标;
将所述各个瓦片的图片转化为纹理图片;
计算所述各个瓦片的纹理图片的坐标;
根据所述各个瓦片的3D模型坐标、纹理图片以及纹理图片的坐标,调用所述OpenGL的渲染函数分别对所述各个瓦片进行渲染,生成包含所述各个瓦片的瓦片地图。
本发明第二方面提供一种基于OpenGL的瓦片地图创建装置,包括:
获取单元,用于获取瓦片地图文件;
第一计算单元,用于根据所述获取单元获取的瓦片地图文件计算各个瓦片的3D模型坐标;
转化单元,用于将所述各个瓦片的图片转化为纹理图片;
第二计算单元,用于计算所述各个瓦片的纹理图片的坐标;
渲染单元,用于根据所述第一计算单元计算得到的各个瓦片的3D模型坐标、所述转化单元转化得到的各个瓦片的纹理图片以及所述第二计算单元计算得到的所述各个瓦片的纹理图片的坐标,调用所述OpenGL的渲染函数分别对所述各个瓦片进行渲染,生成包含所述各个瓦片的瓦片地图。
由上可见,本发明通过获取瓦片地图文件,根据瓦片地图文件生成OpenGL渲染所需要的3D模型坐标、纹理图片和纹理图片坐标,最后通过OpenGL渲染接口生成包含各个瓦片的瓦片地图,由于主流的智能设备均支持OpenGL,而OpenGL提供了跨编程语言、跨平台的编程接口,因此,通过本发明技术方案生成的瓦片地图能够在支持OpenGL的所有智能设备上运行,极大提高了瓦片地图的可移植性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1-a为本发明实施例提供的一种基于OpenGL的瓦片地图创建方法流程示意图;
图1-b为本发明实施例提供的一种瓦片地图文件数据结构图;
图1-c为本发明实施例提供的一种计算瓦片3D模型坐标方案的流程示意图;
图2为本发明实施例提供的一种基于OpenGL的瓦片地图创建装置结构示意图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种基于OpenGL的瓦片地图创建方法,包括:获取瓦片地图文件;根据所述瓦片地图文件计算各个瓦片的3D模型坐标;将所述各个瓦片的图片转化为纹理图片;计算所述各个瓦片的纹理图片的坐标;根据所述各个瓦片的3D模型坐标、纹理图片以及纹理图片的坐标,调用所述OpenGL的渲染函数分别对所述各个瓦片进行渲染,生成包含所述各个瓦片的瓦片地图。相应的,本发明实施例还提供了一种基于OpenGL的瓦片地图创建装置。以下分别进行详细说明。
如图1-a所示,本发明实施例中的一种基于OpenGL的瓦片地图创建方法包括:
步骤101、获取瓦片地图文件;
本发明实施例中,瓦片地图文件预先通过瓦片地图创建工具(例如TiledMapEdit)创建,具体的,瓦片地图文件的创建方式可以参照现有的瓦片地图文件的创建方案实现,此处不再赘述。
通常情况下,瓦片地图文件为一种针对Unicode的可变宽度字符编码(例如UTF-8)的明码文件,瓦片地图文件的文件后缀为TMX,因此,瓦片地图文件通常也被称为TMX文件。具体的,本发明实施例中的瓦片地图文件的数据结构可以参照图1-b所示,在图1-b中,“Title”用于描述瓦片地图文件的基本属性,包括:orientation(即瓦片的朝向信息)、width(即瓦片地图的宽度信息,用于表示瓦片地图在宽度方向上的瓦片个数,即表示瓦片地图每行存在的瓦片个数)、height(即瓦片地图的高度信息,用于表示瓦片地图在高度方向上的瓦片个数,即表示瓦片地图每列存在的瓦片个数)、tilewidth(即相邻瓦片的中心点在宽度方向的间距信息)、tileheight(即相邻瓦片的中心点在高度方向的间距信息);[N]tileset用于分别描述N个瓦片集的属性信息(其中,N大于或等于1),包括:firstgid(即瓦片集中第一个瓦片的全局标识量)、name(即瓦片集的名称)、tilewidth(即瓦片集中瓦片的宽度信息)、tileheight(即瓦片集中瓦片的高度信息)、margin(即相邻瓦片之间的间隔信息)、image(即瓦片集的图片信息,包括描述图片路径的source属性、描述图片原始宽度的width属性、描述图片原始高度的height属性);[M]layer用于分别描述M个层的属性信息(其中,M大于或等于1),包括:name(即层的名称)、width(即层的宽度信息)、height(即层的高度信息)、data(即层的所有瓦片的数据信息,包括encoding(即编码方式)、compression(即压缩方式)、数据(主要记录层中所有瓦片依次对应的全局标识量))。
下面对瓦片的全局标识量进行说明,瓦片的全局标识量又称为瓦片的GID,通常,GID的范围从正整数1开始,到瓦片地图中瓦片的总量,举例说明,假设如果瓦片地图有5个不同的瓦片,那么,瓦片0的GID为1,瓦片1的GID为2,瓦片3的GID为3,以此类推,瓦片的GID为0被用来表示此瓦片为空。
需要说明的是,图1-b所示的瓦片地图文件的数据结构只是一种示例,本发明实施例中的瓦片地图文件的数据结构不限于图1-b所示的数据结构。
本发明实施例中,预先创建好的瓦片地图文件可以存储于服务器、个人计算机(PC,personal computer)或智能终端(如手机、智能电视、平板电脑)等设备中,瓦片地图创建装置通过有线方式或无线方式从上述设备中获取预先创建好的瓦片地图文件。
步骤102、根据上述瓦片地图文件计算各个瓦片的3D模型坐标;
在获取瓦片地图文件后,瓦片地图创建装置通过对瓦片地图文件进行解析可以得到瓦片地图文件的数据结构(例如图1-b所示的数据结构),之后根据上述瓦片地图文件计算各个瓦片的3D模型坐标(即三维“3Dimensions”模型坐标)。
可选的,上述瓦片地图文件包括如下信息:瓦片的朝向信息(如图1-b所示的Title→orientation)、瓦片地图的宽度信息(如图1-b所示的Title→width)、瓦片地图的高度信息(如图1-b所示的Title→height)、瓦片地图包含的所有瓦片集的属性信息(如图1-b所示的[N]tileset),瓦片地图包含的所有层的属性信息(如图1-b所示的[M]tileset)。则如图1-c所示,本发明实施例中根据上述瓦片地图文件计算各个瓦片的3D模型坐标包括以下步骤:
步骤A1、根据上述瓦片的朝向信息,确定本层的第一块瓦片的左下角顶点坐标;
本发明实施例中,瓦片存在两种可能朝向,一种是正交布局,一种是45度斜视角布局,结合图1-b所示的数据结构,上述根据上述瓦片的朝向信息,确定本层的第一块瓦片的左上角顶点坐标的方式如下:
1、若Title→orientation为“orthogonal”,则表示瓦片的朝向为正交布局,此时将第一块瓦片的左上角顶点坐标设置为屏幕左上角的坐标,即(0,0),左下角顶点坐标为(0,tileset→tileheight)。
2、若Title→orientation为“isometric”,则表示瓦片的朝向为45度斜视角布局,此时将第一块瓦片左上角顶点坐标设置到屏幕顶端的中间位置,即(w/2,0),w为显示区域的宽,左下角顶点坐标为(w/2,tileset→tileheight)。
步骤A2、根据上述瓦片的朝向信息、上述瓦片地图的宽度信息、上述瓦片地图的高度信息,以及上述第一块瓦片的左下角顶点坐标,计算本层中其它瓦片的左下角顶点坐标;
本发明实施例中,瓦片存在两种可能朝向,一种是正交布局,一种是45度斜视角布局,结合图1-b所示的数据结构,上述根据上述瓦片的朝向信息、上述瓦片地图的宽度信息、上述瓦片地图的高度信息,以及上述第一块瓦片的左下角顶点坐标,计算本层中其它瓦片的左下角顶点坐标的方式如下:
1、若Title→orientation为“orthogonal”,则表示瓦片的朝向为正交布局,此时第m块瓦片的左下角顶点坐标为:
(x1,0+(m%TLW)*TTW,y1,0+(m/TLW)*TTH)。
2、若Title→orientation为“isometric”,则表示瓦片的朝向为45度斜视角布局,此时第m块瓦片的左下角顶点坐标为:
(x1,0+((m%TLH)-m/TLW)*TTW/2,y1,0+(m%TLH)+m/TLW)*TTH/2)
其中,x1,0和y1,0分别表示上述第一块瓦片的左下角顶点横坐标和左下角顶点纵坐标,TLW表示上述瓦片地图在宽度方向上的瓦片个数(即Title→width),TLH表示上述瓦片地图在高度方向上的瓦片个数(即Title→height),TTW表示相邻瓦片的中心点在宽度方向的间距(即Title→tilewidth),TTH表示相邻瓦片的中心点在高度方向的间距(即Title→tileheight)。
对本层中的每块瓦片执行步骤A3、A4和A5,得到本层中的每块瓦片的3D模型坐标:
步骤A3、根据确定的瓦片i的左下角顶点坐标、上述瓦片地图的宽度信息以及瓦片地图的高度信息,确定上述瓦片i的左上角顶点坐标、右上角顶点坐标和右下角顶点坐标;
本发明实施例中,当确定瓦片i的左下角顶点坐标,根据上述瓦片地图的宽度信息以及瓦片地图的高度信息,即可确定上述瓦片i的左上角顶点坐标、右上角顶点坐标和右下角顶点坐标。
步骤A4、根据2D转3D公式,计算瓦片i的4个顶点在3D环境中的绝对位置;
可选的,瓦片地图创建装置根据第一公式和第二公式,分别计算瓦片i的4个顶点在3D环境中的绝对位置;
其中,上述第一公式为:pos=((2*Xi,a-(vx+vw))/vw,(vy+vh-2*Yi,a)/vh,Z,1);
上述第二公式为:P3d,i,a=(V-1*P-1*pos).getPosition();
式中P3d,i,a表示瓦片i的顶点a在3D环境中的绝对位置,vx、vy、vw和vh分别为视窗中瓦片地图可绘区域的左上角顶点坐标、宽度和高度,Xi,a和Yi,a分别为瓦片i的顶点a的横坐标和纵坐标,Z为预设值,P表示投影矩阵,V表示view矩阵,其中,P和V在上述OpenGL初始化时设定。
可选的,上述Z取0,当然,上述Z也可以取其它值。需要说明的是,在计算不同瓦片的4个顶点在3D环境中的绝对位置,使用同一个Z值。
步骤A5、将瓦片i的4个顶点在3D环境中的绝对位置减去瓦片i的模型位置,得到瓦片i的3D模型坐标,其中,上述瓦片i的模型位置等于上述瓦片i的4个顶点的平均坐标,即上述瓦片i的模型位置等于上述瓦片i的4个顶点的位置之后除以4。
本发明实施例中,瓦片地图创建装置针对瓦片地图的每层,执行步骤A1至A5,即可得到每层中的各个瓦片的3D模型坐标。
步骤103、将上述各个瓦片的图片转化为纹理图片;
本发明实施例中,瓦片地图创建装置根据瓦片地图文件中获取到图片路径(例如,根据图1-b所示的[N]tileset→image→source),根据图片路径获取各个瓦片的图片后利用OpenGL接口生成与图片对应的纹理图片。
步骤104、计算上述各个瓦片的纹理图片的坐标;
可选地,瓦片地图创建装置根据上述瓦片地图包含的所有瓦片集的属性信息、第三公式、第四公式、第五公式和第六公式计算上述各个瓦片的纹理图片的坐标;
其中,上述第三公式为:ts,j,0=((n/C*TW)/IW,(n%C*TH)/IH);
上述第四公式为:ts,j,1=((n/C*TW)/IW,(n%C*TH+TH)/IH);
上述第五公式为:ts,j,2=((n/C*TW+TW)/IW,(n%C*TH)/IH);
上述第六公式为:ts,j,3=((n/C*TW+TW)/IW,(n%C*TH+TH)/IH);
其中,ts,j,0表示s层中瓦片j的纹理图片的左上角顶点坐标,ts,j,1表示s层中瓦片j的纹理图片的左下角顶点坐标,ts,j,2表示s层中瓦片j的纹理图片的右上角顶点坐标,ts,j,3表示s层中瓦片j的纹理图片的右下角顶点坐标,TW为s层中瓦片j对应的瓦片集的瓦片宽度,TH为s层中瓦片j对应的瓦片集的瓦片高度,IW为s层中瓦片j对应的瓦片集的图片宽度,IH为s层中瓦片j对应的瓦片集的图片高度,n为s层中瓦片j的全局标识量(即瓦片j的GID)减去s层中瓦片j对应的瓦片集中第一个瓦片的全局标识量。其中,C=IW/TW,R=IH/TH。假设s层中瓦片j对应的瓦片集为第2个瓦片集,则参照图1-b,s层中瓦片j对应的瓦片集中第一个瓦片的全局标识量可以从[2]tileset→firstgid中获得。
步骤105、根据上述各个瓦片的3D模型坐标、纹理图片以及纹理图片的坐标,调用上述OpenGL的渲染函数分别对上述各个瓦片进行渲染,生成包含上述各个瓦片的瓦片地图;
本发明实施例中,在通过步骤102~104得到瓦片地图各层中各个瓦片的3D模型坐标、纹理图片以及纹理图片的坐标之后,调用上述OpenGL的渲染函数分别对上述各个瓦片进行渲染,生成包含上述各个瓦片的瓦片地图。
可选的,在调用上述OpenGL的渲染函数分别对上述各个瓦片进行渲染时,将投影设置为正交投影,将混合方式设置为glBlendFunc,根据瓦片地图各层中各个瓦片的3D模型坐标、纹理图片以及纹理图片的坐标,按照层从小到大、瓦片从小到大的顺序逐一进行渲染,最终便可得到一张包含上述各个瓦片的完整的瓦片地图。
需要说明的是,在本发明实施例中,“→”用于表示子参数,例如“Title→orientation”表示的是Title下的orientation参数,“Title→tilewidth”表示的是Title下的tilewidth参数,以此类推。
需要说明的是,本发明实施例中的“瓦片”为瓦片地图中的最小可视单元,瓦片地图由多个瓦片构成。
需要说明的是,本发明实施例中的OpenGL为专业的图形程序接口,目前,OpenGL存在多个版本,例如:OpenGL3.0、OpenGL3.1和OpenGL-es等,本发明实施例的技术方案适用于OpenGL的多个版本。
需要说明的是,本发明实施例通过瓦片地图创建装置执行本发明实施例中的瓦片地图创建方法,瓦片地图创建装置可以是独立装置,也可以集成在PC、智能设备(例如手机、智能电视、平板电脑等)中。
由上可见,本发明通过获取瓦片地图文件,根据瓦片地图文件生成OpenGL渲染所需要的3D模型坐标、纹理图片和纹理图片坐标,最后通过OpenGL渲染接口生成包含各个瓦片的瓦片地图,由于主流的智能设备均支持OpenGL,而OpenGL提供了跨编程语言、跨平台的编程接口,因此,通过本发明技术方案生成的瓦片地图能够在支持OpenGL的所有智能设备上运行,极大提高了瓦片地图的可移植性。
本发明实施例还提供一种基于OpenGL的瓦片地图创建装置,如图2所示,本发明实施例中的瓦片地图创建装置200,包括:
获取单元201,用于获取瓦片地图文件;
第一计算单元202,用于根据获取单元201获取的瓦片地图文件计算各个瓦片的3D模型坐标;
转化单元203,用于将上述各个瓦片的图片转化为纹理图片;
第二计算单元204,用于计算上述各个瓦片的纹理图片的坐标;
渲染单元205,用于根据第一计算单元201计算得到的各个瓦片的3D模型坐标、转化单元转化得到的各个瓦片的纹理图片以及第二计算单元204计算得到的上述各个瓦片的纹理图片的坐标,调用上述OpenGL的渲染函数分别对上述各个瓦片进行渲染,生成包含上述各个瓦片的瓦片地图。
可选的,上述瓦片地图文件包括如下信息:瓦片的朝向信息(如图1-b所示的Title→orientation)、瓦片地图的宽度信息(如图1-b所示的Title→width)、瓦片地图的高度信息(如图1-b所示的Title→height)、瓦片地图包含的所有瓦片集的属性信息(如图1-b所示的[N]tileset),瓦片地图包含的所有层的属性信息(如图1-b所示的[M]tileset)。
其中,第一计算单202元包括:确定单元、第一子计算单元和第二子计算单元,上述第一计算单元分别针对瓦片地图的每层,调用上述确定单元、上述第一子计算单元和上述第二子计算单元进行计算;上述确定单元用于:根据上述瓦片的朝向信息,确定本层的第一块瓦片的左下角顶点坐标;上述第一子计算单元用于根据上述瓦片的朝向信息、上述瓦片地图的宽度信息、上述瓦片地图的高度信息,以及上述第一块瓦片的左下角顶点坐标,计算本层中其它瓦片的左下角顶点坐标;上述第二子计算单元用于对本层中的每块瓦片进行如下计算,得到本层中的每块瓦片的3D模型坐标:根据确定的瓦片i的左下角顶点坐标、上述瓦片地图的宽度信息以及瓦片地图的高度信息,确定瓦片i的左上角顶点坐标、右上角顶点坐标和右下角顶点坐标;根据2D转3D公式,计算上述瓦片i的4个顶点在3D环境中的绝对位置;将瓦片i的4个顶点在3D环境中的绝对位置减去瓦片i的模型位置,得到瓦片i的3D模型坐标,其中,瓦片i的模型位置等于瓦片i的4个顶点的平均坐标。
可选的,上述第一子计算单元具体用于:
若本层中瓦片的朝向为正交布局,则通过公式(x1,0+(m%TLW)*TTW,y1,0+(m/TLW)*TTH)计算第m块瓦片的左下角顶点坐标;
若本层中瓦片的朝向为45度斜视角布局,则,通过公式(x1,0+((m%TLH)-m/TLW)*TTW/2,y1,0+(m%TLH)+m/TLW)*TTH/2)计算第m块瓦片的左下角顶点坐标;
其中,x1,0和y1,0分别表示上述第一块瓦片的左下角顶点横坐标和左下角顶点纵坐标,TLW表示上述瓦片地图在宽度方向上的瓦片个数,TLH表示上述瓦片地图在高度方向上的瓦片个数,TTW表示相邻瓦片的中心点在宽度方向的间距,TTH表示相邻瓦片的中心点在高度方向的间距。
可选地,上述第二子计算单元具体用于:根据第一公式和第二公式,分别计算瓦片i的4个顶点在3D环境中的绝对位置;
其中,上述第一公式为:pos=((2*Xi,a-(vx+vw))/vw,(vy+vh-2*Yi,a)/vh,Z,1);
上述第二公式为:P3d,i,a=(V-1*P-1*pos).getPosition();
式中P3d,i,a表示瓦片i的顶点a在3D环境中的绝对位置,vx、vy、vw和vh分别为视窗中瓦片地图可绘区域的左上角顶点坐标、宽度和高度,Xi,a和Yi,a分别为瓦片i的顶点a的横坐标和纵坐标,Z为预设值,P表示投影矩阵,V表示view矩阵,其中,P和V在上述OpenGL初始化时设定。
可选的,上述Z取0,当然,上述Z也可以取其它值。需要说明的是,在计算不同瓦片的4个顶点在3D环境中的绝对位置,使用同一个Z值。
可选的,第二计算单元204具体用于:根据上述瓦片地图包含的所有瓦片集的属性信息、第三公式、第四公式、第五公式和第六公式计算上述各个瓦片的纹理图片的坐标;
其中,上述第三公式为:ts,j,0=((n/C*TW)/IW,(n%C*TH)/IH);
上述第四公式为:ts,j,1=((n/C*TW)/IW,(n%C*TH+TH)/IH);
上述第五公式为:ts,j,2=((n/C*TW+TW)/IW,(n%C*TH)/IH);
上述第六公式为:ts,j,3=((n/C*TW+TW)/IW,(n%C*TH+TH)/IH);
其中,ts,j,0表示s层中瓦片j的纹理图片的左上角顶点坐标,ts,j,1表示s层中瓦片j的纹理图片的左下角顶点坐标,ts,j,2表示s层中瓦片j的纹理图片的右上角顶点坐标,ts,j,3表示s层中瓦片j的纹理图片的右下角顶点坐标,TW为s层中瓦片j对应的瓦片集的瓦片宽度,TH为s层中瓦片j对应的瓦片集的瓦片高度,IW为s层中瓦片j对应的瓦片集的图片宽度,IH为s层中瓦片j对应的瓦片集的图片高度,n为s层中瓦片j的全局标识量减去s层中瓦片j对应的瓦片集中第一个瓦片的全局标识量;其中,C=IW/TW,R=IH/TH。
可选的,渲染单元205在调用上述OpenGL的渲染函数分别对上述各个瓦片进行渲染时,将投影设置为正交投影,将混合方式设置为glBlendFunc,渲染单元205根据瓦片地图各层中各个瓦片的3D模型坐标、纹理图片以及纹理图片的坐标,按照层从小到大、瓦片从小到大的顺序逐一进行渲染,最终便可得到一张包含上述各个瓦片的完整的瓦片地图。
需要说明的是,在本发明实施例中,“→”用于表示子参数,例如“Title→orientation”表示的是Title下的orientation参数,“Title→tilewidth”表示的是Title下的tilewidth参数,以此类推。
需要说明的是,本发明实施例中的“瓦片”为瓦片地图中的最小可视单元,瓦片地图由多个瓦片构成。
需要说明的是,本发明实施例中的OpenGL为专业的图形程序接口,目前,OpenGL存在多个版本,例如:OpenGL3.0、OpenGL3.1和OpenGL-es等,本发明实施例的技术方案适用于OpenGL的多个版本。
需要说明的是,本发明实施例中的瓦片地图创建装置可以是独立装置,也可以集成在PC、智能设备(例如手机、智能电视、平板电脑等)中,此处不作限定。本发明实施例中的瓦片地图创建装置可以如上述方法实施例中的瓦片地图创建装置,可以用于实现上述方法实施例中的全部技术方案,其具体实现过程可参照上述方法实施例中的相关描述,此处不再赘述。
由上可见,本发明瓦片地图创建装置通过获取瓦片地图文件,根据瓦片地图文件生成OpenGL渲染所需要的3D模型坐标、纹理图片和纹理图片坐标,最后通过OpenGL渲染接口生成包含各个瓦片的瓦片地图,由于主流的智能设备均支持OpenGL,而OpenGL提供了跨编程语言、跨平台的编程接口,因此,通过本发明技术方案生成的瓦片地图能够在支持OpenGL的所有智能设备上运行,极大提高了瓦片地图的可移植性。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上为对本发明所提供的一种基于OpenGL的瓦片地图创建方法及装置的描述,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种基于OpenGL的瓦片地图创建方法,其特征在于,包括:
获取瓦片地图文件;
根据所述瓦片地图文件计算各个瓦片的3D模型坐标;
将所述各个瓦片的图片转化为纹理图片;
计算所述各个瓦片的纹理图片的坐标;
根据所述各个瓦片的3D模型坐标、纹理图片以及纹理图片的坐标,调用所述OpenGL的渲染函数分别对所述各个瓦片进行渲染,生成包含所述各个瓦片的瓦片地图;
所述瓦片地图文件包括如下信息:瓦片的朝向信息、瓦片地图的宽度信息、瓦片地图的高度信息、瓦片地图包含的所有瓦片集的属性信息,瓦片地图包含的所有层的属性信息;
所述根据所述瓦片地图文件计算各个瓦片的3D模型坐标包括:
针对瓦片地图的每层,进行如下计算:
根据所述瓦片的朝向信息,确定本层的第一块瓦片的左下角顶点坐标;
根据所述瓦片的朝向信息、所述瓦片地图的宽度信息、所述瓦片地图的高度信息,以及所述第一块瓦片的左下角顶点坐标,计算本层中其它瓦片的左下角顶点坐标;
对本层中的每块瓦片进行如下计算,得到本层中的每块瓦片的3D模型坐标:根据确定的瓦片i的左下角顶点坐标、所述瓦片地图的宽度信息以及瓦片地图的高度信息,确定所述瓦片i的左上角顶点坐标、右上角顶点坐标和右下角顶点坐标;根据2D转3D公式,计算所述瓦片i的4个顶点在3D环境中的绝对位置;将所述瓦片i的4个顶点在3D环境中的绝对位置减去所述瓦片i的模型位置,得到所述瓦片i的3D模型坐标,其中,所述瓦片i的模型位置等于所述瓦片i的4个顶点的平均坐标。
2.根据权利要求1所述的方法,其特征在于,所述根据所述瓦片的朝向信息、所述瓦片地图的宽度信息、所述瓦片地图的高度信息,以及所述第一块瓦片的左下角顶点坐标,计算本层中其它瓦片的左上角顶点坐标,包括:
若本层中瓦片的朝向为正交布局,则第m块瓦片的左下角顶点坐标为(x1,0+(m%TLW)*TTW,y1,0+(m/TLW)*TTH);
若本层中瓦片的朝向为45度斜视角布局,则第m块瓦片的左下角顶点坐标为(x1,0+((m%TLH)-m/TLW)*TTW/2,y1,0+(m%TLH)+m/TLW)*TTH/2);
其中,x1,0和y1,0分别表示所述第一块瓦片的左下角顶点横坐标和左下角顶点纵坐标,TLW表示所述瓦片地图在宽度方向上的瓦片个数,TLH表示所述瓦片地图在高度方向上的瓦片个数,TTW表示相邻瓦片的中心点在宽度方向的间距,TTH表示相邻瓦片的中心点在高度方向的间距。
3.根据权利要求1或2所述的方法,其特征在于,所述根据2D转3D公式,计算所述瓦片i的4个顶点在3D环境中的绝对位置包括:
根据第一公式和第二公式,分别计算所述瓦片i的4个顶点在3D环境中的绝对位置;
其中,所述第一公式为:pos=((2*Xi,a-(vx+vw))/vw,(vy+vh-2*Yi,a)/vh,Z,1);
所述第二公式为:P3d,i,a=(V-1*P-1*pos).getPosition();
式中P3d,i,a表示瓦片i的顶点a在3D环境中的绝对位置,vx、vy、vw和vh分别为视窗中瓦片地图可绘区域的左上角顶点坐标、宽度和高度,Xi,a和Yi,a分别为所述瓦片i的顶点a的横坐标和纵坐标,Z为预设值,P表示投影矩阵,V表示view矩阵,其中,P和V在所述OpenGL初始化时设定。
4.根据权利要求1或2所述的方法,其特征在于,所述计算所述各个瓦片的纹理图片的坐标包括:
根据所述瓦片地图包含的所有瓦片集的属性信息、第三公式、第四公式、第五公式和第六公式计算所述各个瓦片的纹理图片的坐标;
其中,所述第三公式为:ts,j,0=((n/C*TW)/IW,(n%C*TH)/IH);
所述第四公式为:ts,j,1=((n/C*TW)/IW,(n%C*TH+TH)/IH);
所述第五公式为:ts,j,2=((n/C*TW+TW)/IW,(n%C*TH)/IH);
所述第六公式为:ts,j,3=((n/C*TW+TW)/IW,(n%C*TH+TH)/IH);
其中,ts,j,0表示s层中瓦片j的纹理图片的左上角顶点坐标,ts,j,1表示s层中瓦片j的纹理图片的左下角顶点坐标,ts,j,2表示s层中瓦片j的纹理图片的右上角顶点坐标,ts,j,3表示s层中瓦片j的纹理图片的右下角顶点坐标,TW为s层中瓦片j对应的瓦片集的瓦片宽度,TH为s层中瓦片j对应的瓦片集的瓦片高度,IW为s层中瓦片j对应的瓦片集的图片宽度,IH为s层中瓦片j对应的瓦片集的图片高度,n为s层中瓦片j的全局标识量减去s层中瓦片j对应的瓦片集中第一个瓦片的全局标识量;
其中,C=IW/TW,R=IH/TH。
5.一种基于OpenGL的瓦片地图创建装置,其特征在于,包括:
获取单元,用于获取瓦片地图文件;
第一计算单元,用于根据所述获取单元获取的瓦片地图文件计算各个瓦片的3D模型坐标;
转化单元,用于将所述各个瓦片的图片转化为纹理图片;
第二计算单元,用于计算所述各个瓦片的纹理图片的坐标;
渲染单元,用于根据所述第一计算单元计算得到的各个瓦片的3D模型坐标、所述转化单元转化得到的各个瓦片的纹理图片以及所述第二计算单元计算得到的所述各个瓦片的纹理图片的坐标,调用所述OpenGL的渲染函数分别对所述各个瓦片进行渲染,生成包含所述各个瓦片的瓦片地图;
所述瓦片地图文件包括如下信息:瓦片的朝向信息、瓦片地图的宽度信息、瓦片地图的高度信息、瓦片地图包含的所有瓦片集的属性信息,瓦片地图包含的所有层的属性信息;
所述第一计算单元包括:确定单元、第一子计算单元和第二子计算单元,所述第一计算单元分别针对瓦片地图的每层,调用所述确定单元、所述第一子计算单元和所述第二子计算单元进行计算;
其中,所述确定单元用于:根据所述瓦片的朝向信息,确定本层的第一块瓦片的左下角顶点坐标;
所述第一子计算单元用于根据所述瓦片的朝向信息、所述瓦片地图的宽度信息、所述瓦片地图的高度信息,以及所述第一块瓦片的左下角顶点坐标,计算本层中其它瓦片的左下角顶点坐标;
所述第二子计算单元用于对本层中的每块瓦片进行如下计算,得到本层中的每块瓦片的3D模型坐标:根据确定的瓦片i的左下角顶点坐标、所述瓦片地图的宽度信息以及瓦片地图的高度信息,确定所述瓦片i的左上角顶点坐标、右上角顶点坐标和右下角顶点坐标;根据2D转3D公式,计算所述瓦片i的4个顶点在3D环境中的绝对位置;将所述瓦片i的4个顶点在3D环境中的绝对位置减去所述瓦片i的模型位置,得到所述瓦片i的3D模型坐标,其中,所述瓦片i的模型位置等于所述瓦片i的4个顶点的平均坐标。
6.根据权利要求5所述的装置,其特征在于,
所述第一子计算单元具体用于:
若本层中瓦片的朝向为正交布局,则通过公式(x1,0+(m%TLW)*TTW,y1,0+(m/TLW)*TTH)计算第m块瓦片的左下角顶点坐标;
若本层中瓦片的朝向为45度斜视角布局,则,通过公式(x1,0+((m%TLH)-m/TLW)*TTW/2,y1,0+(m%TLH)+m/TLW)*TTH/2)计算第m块瓦片的左下角顶点坐标;
其中,x1,0和y1,0分别表示所述第一块瓦片的左下角顶点横坐标和左下角顶点纵坐标,TLW表示所述瓦片地图在宽度方向上的瓦片个数,TLH表示所述瓦片地图在高度方向上的瓦片个数,TTW表示相邻瓦片的中心点在宽度方向的间距,TTH表示相邻瓦片的中心点在高度方向的间距。
7.根据权利要求5或6所述的装置,其特征在于,所述第二子计算单元具体用于:根据第一公式和第二公式,分别计算所述瓦片i的4个顶点在3D环境中的绝对位置;
其中,所述第一公式为:pos=((2*Xi,a-(vx+vw))/vw,(vy+vh-2*Yi,a)/vh,Z,1);
所述第二公式为:P3d,i,a=(V-1*P-1*pos).getPosition();
式中P3d,i,a表示瓦片i的顶点a在3D环境中的绝对位置,vx、vy、vw和vh分别为视窗中瓦片地图可绘区域的左上角顶点坐标、宽度和高度,Xi,a和Yi,a分别为所述瓦片i的顶点a的横坐标和纵坐标,Z为预设值,P表示投影矩阵,V表示view矩阵,其中,P和V在所述OpenGL初始化时设定。
8.根据权利要求5或6所述的装置,其特征在于,所述第二计算单元具体用于:根据所述瓦片地图包含的所有瓦片集的属性信息、第三公式、第四公式、第五公式和第六公式计算所述各个瓦片的纹理图片的坐标;
其中,所述第三公式为:ts,j,0=((n/C*TW)/IW,(n%C*TH)/IH);
所述第四公式为:ts,j,1=((n/C*TW)/IW,(n%C*TH+TH)/IH);
所述第五公式为:ts,j,2=((n/C*TW+TW)/IW,(n%C*TH)/IH);
所述第六公式为:ts,j,3=((n/C*TW+TW)/IW,(n%C*TH+TH)/IH);
其中,ts,j,0表示s层中瓦片j的纹理图片的左上角顶点坐标,ts,j,1表示s层中瓦片j的纹理图片的左下角顶点坐标,ts,j,2表示s层中瓦片j的纹理图片的右上角顶点坐标,ts,j,3表示s层中瓦片j的纹理图片的右下角顶点坐标,TW为s层中瓦片j对应的瓦片集的瓦片宽度,TH为s层中瓦片j对应的瓦片集的瓦片高度,IW为s层中瓦片j对应的瓦片集的图片宽度,IH为s层中瓦片j对应的瓦片集的图片高度,n为s层中瓦片j的全局标识量减去s层中瓦片j对应的瓦片集中第一个瓦片的全局标识量;
其中,C=IW/TW,R=IH/TH。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410201164.0A CN103984720B (zh) | 2014-05-13 | 2014-05-13 | 基于OpenGL的瓦片地图创建方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410201164.0A CN103984720B (zh) | 2014-05-13 | 2014-05-13 | 基于OpenGL的瓦片地图创建方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103984720A CN103984720A (zh) | 2014-08-13 |
CN103984720B true CN103984720B (zh) | 2018-01-26 |
Family
ID=51276693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410201164.0A Active CN103984720B (zh) | 2014-05-13 | 2014-05-13 | 基于OpenGL的瓦片地图创建方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103984720B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104252713B (zh) * | 2014-09-04 | 2017-07-07 | 百度在线网络技术(北京)有限公司 | 一种地图渲染方法和装置 |
CN105740256A (zh) * | 2014-12-09 | 2016-07-06 | 高德信息技术有限公司 | 一种三维地图的生成方法及装置 |
CN104537068B (zh) * | 2014-12-29 | 2018-11-13 | 浙江宇视科技有限公司 | 一种电子地图接入方法和装置 |
CN107016924B (zh) * | 2016-12-20 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 虚拟地图中的瓦片地图生成方法、更新方法和装置 |
CN108052642A (zh) * | 2017-12-22 | 2018-05-18 | 重庆邮电大学 | 基于瓦片技术的电子海图显示方法 |
CN109584366B (zh) * | 2018-12-10 | 2023-05-16 | 浙江科澜信息技术有限公司 | 一种地形渲染方法、装置、设备及可读存储介质 |
CN113744396A (zh) * | 2020-05-29 | 2021-12-03 | 奇安信科技集团股份有限公司 | 基于三维地图建立模型的方法、装置、设备和存储介质 |
CN111861890A (zh) * | 2020-08-03 | 2020-10-30 | 北京庚图科技有限公司 | 三维地图生成方法和装置 |
EP4241230A1 (en) * | 2020-11-09 | 2023-09-13 | Qualcomm Incorporated | Methods and apparatus for rasterization of compute workloads |
CN112614221A (zh) * | 2020-12-29 | 2021-04-06 | 北京百度网讯科技有限公司 | 高精地图渲染方法、装置、电子设备及自动驾驶车辆 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102750180A (zh) * | 2012-05-28 | 2012-10-24 | 中国科学院遥感应用研究所 | 一种二维地图瓦片的多线程显示机制 |
CN102819530A (zh) * | 2011-06-10 | 2012-12-12 | 中兴通讯股份有限公司 | 电子地图的显示方法及装置 |
CN103208225A (zh) * | 2012-01-12 | 2013-07-17 | 中国科学院遥感应用研究所 | 一种瓦片地图制作方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130283318A1 (en) * | 2012-04-23 | 2013-10-24 | Comcast Cable Communications, LLC. | Dynamic Mosaic for Creation of Video Rich User Interfaces |
-
2014
- 2014-05-13 CN CN201410201164.0A patent/CN103984720B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819530A (zh) * | 2011-06-10 | 2012-12-12 | 中兴通讯股份有限公司 | 电子地图的显示方法及装置 |
CN103208225A (zh) * | 2012-01-12 | 2013-07-17 | 中国科学院遥感应用研究所 | 一种瓦片地图制作方法及系统 |
CN102750180A (zh) * | 2012-05-28 | 2012-10-24 | 中国科学院遥感应用研究所 | 一种二维地图瓦片的多线程显示机制 |
Non-Patent Citations (1)
Title |
---|
基于OpenGL ES的二三维地图可视化客户端设计与实现;王亚美等;《计算机应用与软件》;20130930;第30卷(第9期);第78-80页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103984720A (zh) | 2014-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103984720B (zh) | 基于OpenGL的瓦片地图创建方法及装置 | |
CN103606188B (zh) | 基于影像点云的地理信息按需采集方法 | |
CN103208225B (zh) | 一种瓦片地图制作方法及系统 | |
CN103984513B (zh) | 海量gis信息的超高分辨显示方法 | |
CN103729610B (zh) | 一种二维码聚焦显示方法及系统 | |
CN106663330A (zh) | 用于三维重建在网络上的大量分发的系统和方法 | |
CN106204735B (zh) | Unity3D地形数据在Direct3D 11环境中的使用方法 | |
JP2010504560A (ja) | デジタル地図上にグラフィック・オブジェクトを表示する方法およびシステム | |
JP6096634B2 (ja) | 仮想現実を用いた3次元地図表示システム | |
KR101591427B1 (ko) | 3차원 지형 영상 가시화에서의 적응형 렌더링 방법 | |
CN102110280A (zh) | 空间数据处理方法及装置 | |
CN109584366A (zh) | 一种地形渲染方法、装置、设备及可读存储介质 | |
CN105894551A (zh) | 图像绘制方法及装置 | |
CN105741340B (zh) | 一种用于网页展示的输电线路三维场景仿真方法和系统 | |
JP4688309B2 (ja) | 3次元コンピュータグラフィックス作成支援装置、3次元コンピュータグラフィックス作成支援方法、及び3次元コンピュータグラフィックス作成支援プログラム | |
US20240125613A1 (en) | Map generation method and map generation apparatus | |
CN108961406A (zh) | 地理信息可视化方法、装置及用户终端 | |
CN108830929A (zh) | 基于数据库的多分辨率地形金字塔模型生成方法及系统 | |
CN107562886A (zh) | 一种生成相片地图的方法及装置 | |
CN104346771B (zh) | 一种电子地图分层管理方法 | |
CN115761166A (zh) | 基于矢量瓦片的地图构建方法及其应用 | |
CN105474268A (zh) | 图像显示系统 | |
CN115496829A (zh) | 一种基于网页的局部高清影像地图快速制作方法及装置 | |
KR100943451B1 (ko) | Tiff 포맷을 이용한 dem―tiff정사영상 제작 시스템 및 그 방법 | |
CN102243767A (zh) | 一种基于局部图像扭曲的手机动漫人物创作方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |