一种用于unity的渲染地图方法、电子设备及可读存储介质

文档序号:170506 发布日期:2021-10-29 浏览:29次 >En<

阅读说明:本技术 一种用于unity的渲染地图方法、电子设备及可读存储介质 (Map rendering method for unity, electronic device and readable storage medium ) 是由 白启扉 于 2021-07-29 设计创作,主要内容包括:本发明公开了一种用于unity的渲染地图方法、电子设备及可读存储介质,方法步骤依次为,根据地图最大zoom等级定义地图网格的最大长宽,利用unity API创建mesh,mesh中的网格对应地图网格;根据当前zoom等级和经纬度信息,获取地图瓦片图片地址;获取地图瓦片图片,将其作为uv纹理贴到mesh上;地图缩放时,根据当前zoom等级,动态调整mesh,实现地图快速渲染。本发明可以控制地图渲染的细节,在地图层上覆盖unity内容,并且能够在编辑器上方便开发。(The invention discloses a map rendering method for unity, an electronic device and a readable storage medium, wherein the method comprises the steps of defining the maximum length and width of a map grid according to the maximum zoom level of a map, and creating a mesh by utilizing unity API, wherein the grid in the mesh corresponds to the map grid; acquiring a map tile picture address according to the current zoom grade and the longitude and latitude information; obtaining a map tile picture, and pasting the map tile picture as a uv texture to the mesh; and when the map is zoomed, dynamically adjusting the mesh according to the current zoom level, and realizing the rapid rendering of the map. The invention can control the details of map rendering, cover unity content on the map layer and can be developed conveniently on an editor.)

一种用于unity的渲染地图方法、电子设备及可读存储介质

技术领域

本发明属于unity开发领域,特别涉及了一种用于unity的渲染地图技术。

背景技术

目前,地图在外卖,导航,场景展示等互动app中有愈加广泛的应用,Unity目前集成地图的方式主要是调用封装百度高德等提供的android和ios的SDK。

现有的方法存在较多的局限性:

1、百度高德提供的SDK实现的是不同平台下的view界面,unity无法在其之上交互和覆盖更多内容;

2、百度高德只提供了移动版的SDK,unity的pc编辑器环境下无法调试,不方便开发;

3、百度高德的地图渲染SDK不开放源码,渲染效率无法优化。

发明内容

为了解决上述背景技术提到的技术问题,本发明提出了一种用于unity的渲染地图方法、电子设备及可读存储介质,可以控制地图渲染的细节,在地图层上覆盖unity内容,并且能够在编辑器上方便开发。

为了实现上述技术目的,本发明的技术方案为:

一种用于unity的渲染地图方法,包括以下步骤:

(1)根据地图最大zoom等级定义地图网格的最大长宽,利用unity API创建mesh,mesh中的网格对应地图网格;

(2)根据当前zoom等级和经纬度信息,获取地图瓦片图片地址;

(3)获取地图瓦片图片,将其作为uv纹理贴到mesh上;

(4)地图缩放时,根据当前zoom等级,动态调整mesh,实现地图快速渲染。

进一步地,在步骤(2)中,通过mapnik2 、apache2和mod_tile搭建基于OSM地图数据的瓦片地图服务。

进一步地,在步骤(3)中,通过unity的API:Resources.LoadAsync(url)获取地图瓦片图片。

进一步地,在步骤(4)中,当zoom等级由高切换至低时,合并mesh中的网格;当zoom等级由低切换至高时,拆分mesh中的网格。

进一步地,当zoom等级由a切换至b时,a>b,确定需要删除的顶点A,将与顶点A连接的所有顶点记录下来,并将这些记录的顶点与顶点A的连接线删除,最后将这些记录的顶点中与顶点A距离最远的两个顶点连接起来;

当zoom等级由b切换至a时,其操作过程是上述过程的反向操作。

一种电子设备,包括处理器和存储器,所述存储器存储有所述处理器的执行指令,所述处理器配置为执行所述执行指令来实现上述用于unity的渲染地图方法。

一种计算机可读存储介质,用于存储程序,执行所述程序以实现上述用于unity的渲染地图方法。

采用上述技术方案带来的有益效果:

1、本发明不依赖其他SDK,直接用C#渲染瓦片地图,可以快速渲染各层级瓦片地图;

2、本发明的底层渲染部分源码可控,并且可以直接在编辑器中开发调试;

3、本发明可以对地图做任意定制,并且覆盖unity内容。

附图说明

图1是本发明的方法流程图;

图2是本发明中生成mesh的示意图;

图3是本发明中zoom等级切换mesh变化示意图。

具体实施方式

以下将结合附图,对本发明的技术方案进行详细说明。

本发明设计了一种用于unity的渲染地图方法,如图1所示,步骤如下:

步骤1:根据地图最大zoom等级定义地图网格的最大长宽,利用unity API创建mesh,mesh中的网格对应地图网格。如图2所示,比如某个区域zoom为4要显示4*4的瓦片,生成的mesh需要4*4=16个网格,一共32个三角面。

步骤2:根据当前zoom等级和经纬度信息,获取地图瓦片图片地址。在本实施例中,通过mapnik2 、apache2和mod_tile搭建基于OSM地图数据的瓦片地图服务。

步骤3:获取地图瓦片图片,将其作为uv纹理贴到mesh上。在本实施例中,通过unity的API:Resources.LoadAsync(url)获取地图瓦片图片。

步骤4:地图缩放时,根据当前zoom等级,动态调整mesh,实现地图快速渲染。比如地图zoom等级从4切换到3,原图如图3中的左边图(a),这时需要找出要删除的顶点(1,1),将(1,1)连接的所有顶点记录下来:(0,1),(1,0),(1,2),(2,1),(0,2),(2,0),将所有连接线删除,得到中间图(b),最后将距离(1,1)点最远的两个点(0,2),(2,0)相连,得到右边图(c)。

用算法表示即是:

For i in 0:n:

For j in 0:n:

X = i + 1;

Y = j + 1;

i+=2;

j+=2;

Clear(X,Y); // 清除(X,Y)点处所有连接线

MakeSquareIn(X,Y); // 在(X,Y)点处创建新的两个三角形组成的正方面。

如果地图等级从3切换到4,执行上述步骤的相反操作即可。本步骤缓存了最大zoom等级的所有网格点,并且根据当前用户操作的不同zoom等级,动态的调整mesh网格,从而达到了快速渲染的效果。

本发明还设计了一种电子设备,包括处理器和存储器,所述存储器存储有所述处理器的执行指令,所述处理器配置为执行所述执行指令来实现上述用于unity的渲染地图方法。

本发明还设计了一种计算机可读存储介质,用于存储程序,执行所述程序以实现上述用于unity的渲染地图方法。

实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。

7页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:线路模型的地形自适应方法、装置、电子设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!