HI,欢迎来到起点商标网!
24小时服务QQ:2880605093

一种基于三维游戏引擎进行空间模型可视化渲染的方法与流程

2021-01-11 16:01:22|294|起点商标网
一种基于三维游戏引擎进行空间模型可视化渲染的方法与流程

本发明属于可视化技术领域,具体涉及一种基于三维游戏引擎进行空间模型可视化渲染的方法。



背景技术:

现如今gis(地理信息系统)因其高度可视化的广场,被各行来被大量应用和用于可视化展示,随着技术发展示可视化的技术已从二维向三维发展,这也对开发提出了更高要求。三维展示直接使用现成游戏引擎开发可以降低开发难度,但传统的游戏引擎如unity3d的目标是进行游戏开发展示并不是为gis而进行开发的,所以有如下问题:不自带地理坐标系统以及不自带地图底图显示功能。



技术实现要素:

针对现有技术中的上述不足,本发明提供的一种基于三维游戏引擎进行空间模型可视化渲染的方法解决了现有技术中存在的问题。

为了达到上述发明目的,本发明采用的技术方案为:一种基于三维游戏引擎进行空间模型可视化渲染的方法,包括以下步骤:

s1、根据地理坐标,将三维游戏模型进行投影,得到投影地图;

s2、定义瓦片结构,并按瓦片结构对投影地图进行划分,得到若干地图瓦片;

s3、将地图瓦片逐一进行加载,并将满足精度要求的地图瓦片加载,完成空间模型可视化渲染。

进一步地,所述步骤s1包括以下分步骤:

s11、将地理坐标的经度lon作为三维游戏引擎中坐标系的z轴,将纬度lat作为三维游戏引擎中坐标系的x轴,并将地理坐标的高度height作为三维游戏引擎中坐标系的y轴;

s12、以经度lon和纬度lat构成的平面为基础,采用web墨卡托投影将经度lon和纬度lat转换为米,得到投影地图。

进一步地,所述步骤s12中采用web墨卡托投影将经度lon和纬度lat转换为米的具体公式为:

其中,plon表示转换为米后的经度,plat表示转化为米后的纬度,pi表示圆周率,radius表示地球半径,cos表示求取余弦。

进一步地,所述步骤s2中定义瓦片结构具体方法为:

a1、将投影地图作为第0层的瓦片;

a2、并按照经度进行剖分,将第i-1层的瓦片进行四等分得到4份第i层的瓦片,i=1,2,...,n,所述n表示最终得到的层数。

进一步地,所述步骤a1中瓦片的所属层级为level、x轴编号为x以及y轴编号为y,所述瓦片表示为tlevel_x_y,level=i;

所述第0层的瓦片包括第一根节点t0_0_0和第二根节点t0_1_0。

进一步地,所述步骤s3包括以下分步骤:

s31、将第0层的瓦片放入待加载队列tileloadqueue中;

s32、判断待加载队列tileloadqueue中是否存在未加载的瓦片,若是,则将其进行加载,将加载完成的瓦片添加至存储对象quadtree和已加载瓦片列队tilecurrentshowqueue中,并将存储对象quadtree的瓦片加载状态设置为已加载,进入步骤s33,否则直接进入步骤s33;

s33、根据当前加载瓦片的层级,通过存储对象quadtree进行三维游戏模型的地图显示;

s34、从已加载瓦片列队tilecurrentshowqueue中依次取出每个瓦片,并判断当前取出瓦片tilenode的显示精度是否大于其所属层级精度,若是,则将下一层级的瓦片加入待加载队列tileloadqueue中,并将当前瓦片tilenode从已加载瓦片列队tilecurrentshowqueue中移除,并返回步骤s32,否则进入步骤s35;

s35、判断当前瓦片tilenode的显示精度是否小于其所属层级精度,若是,则将当前瓦片tilenode的上一级瓦片加入待加载队列tileloadqueue中,并将当前瓦片tilenode的下级瓦片全部移除,返回步骤s32,否则进入步骤s36;

s36、判断虚拟摄像机的高度是否发生变化,若是,获取变化后的瓦片层级,并将瓦片层级对应的瓦片加入待加载队列tileloadqueue中,返回步骤s32,否则完成空间模型可视化渲染。

进一步地,所述步骤s34中显示精度的获取步骤具体为:

b1、根据当前取出瓦片tilenode,获取其所属层级level、x轴坐标和y轴坐标;

b2、根据步骤b1中得到的所属层级level、x轴坐标xtilenode和y轴坐标ytilenode,获取当前取出瓦片tilenode的解析度resolution、经度sourcelon和纬度sourcelat为:

其中,pow(2,level)表示2的level次方。

b3、获取虚拟摄像机的位置为(xh,yh,zh),并计算当前取出瓦片tilenode与虚拟摄像机之间的距离distance为:

b4、根据距离distance,获取当前取出瓦片tilenode的显示精度accuracy为:

accuracy=(maxgeometricaccuracy*height)/distance*ssedenominator

其中,maxgeometricaccuracy表示分辨率,其通过地球赤道的周长除以屏幕像素数获取,像素数=256,ssedenominator表示虚拟摄像机可视角度的正切值的两倍,height表示显示屏幕的像素高度。

进一步地,所述步骤s3中当前取出瓦片tilenode的所属层级精度accuracy_level计算公式为:

accuracy_level=d/pow(2,level)

其中,d示第0层的最大显示精度。

本发明的有益效果为:

(1)本发明实现了一种基于三维游戏引擎进行空间模型可视化渲染的方法,为现有的游戏引擎提供了地理坐标系统和地图地图显示功能。

(2)本发明复杂度低,加快了地图渲染的速度,节约了使用人员的时间,提高了使用体验。

附图说明

图1为本发明提出的一种基于三维游戏引擎进行空间模型可视化渲染的方法流程图。

图2为本发明中第0层瓦片四分示意图。

具体实施方式

下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

下面结合附图详细说明本发明的实施例。

如图1所示,一种基于三维游戏引擎进行空间模型可视化渲染的方法,包括以下步骤:

s1、根据地理坐标,将三维游戏模型进行投影,得到投影地图;

s2、定义瓦片结构,并按瓦片结构对投影地图进行划分,得到若干地图瓦片;

s3、将地图瓦片逐一进行加载,并将满足精度要求的地图瓦片加载,完成空间模型可视化渲染。

所述步骤s1包括以下分步骤:

s11、将地理坐标的经度lon作为三维游戏引擎中坐标系的z轴,将纬度lat作为三维游戏引擎中坐标系的x轴,并将地理坐标的高度height作为三维游戏引擎中坐标系的y轴;

s12、以经度lon和纬度lat构成的平面为基础,采用web墨卡托投影将经度lon和纬度lat转换为米,得到投影地图。

所述步骤s12中采用web墨卡托投影将经度lon和纬度lat转换为米的具体公式为:

其中,plon表示转换为米后的经度,plat表示转化为米后的纬度,pi表示圆周率,radius表示地球半径,cos表示求取余弦。

所述步骤s2中定义瓦片结构具体方法为:

a1、将投影地图作为第0层的瓦片;

a2、并按照经度进行剖分,将第i-1层的瓦片进行四等分得到4份第i层的瓦片,i=1,2,...,n,所述n表示最终得到的层数。

所述步骤a1中瓦片的所属层级为level、x轴编号为x以及y轴编号为y,所述瓦片表示为tlevel_x_y,level=i;

所述第0层的瓦片包括第一根节点t0_0_0和第二根节点t0_1_0。、在本实施例中,地图采用四叉树的坐标定义,为采用web墨卡托投影定义正方形的,四叉树最大范围,x轴上的取值范围与y轴上的取值范围的值相等,均为{最小:0,最大:n},其中n为无穷大。

四叉树采用该种结构依次扩展,每下一层将上一层进行四分后得到,其中每一块称为tile,定义四叉树层级的规则如下。

层级从0开始取值,为level,瓦片x轴编号为x,y轴为y,编号为:

tlevel_x_y

因为采用的是经度进行剖分,所以第0层比较特殊,也就是说第0层有两个根节点,分别为t0_0_0,分别为t0_1_0,这样每块的大小刚好为90度。

如图2所示,在本实施例中,以t0_0_0为例,将会被分为t1_0_0、t1_1_0、t1_0_1、t1_1_1。

所述步骤s3包括以下分步骤:

s31、将第0层的瓦片放入待加载队列tileloadqueue中;

s32、判断待加载队列tileloadqueue中是否存在未加载的瓦片,若是,则将其进行加载,将加载完成的瓦片添加至存储对象quadtree和已加载瓦片列队tilecurrentshowqueue中,并将存储对象quadtree的瓦片加载状态设置为已加载,进入步骤s33,否则直接进入步骤s33;

s33、根据当前加载瓦片的层级,通过存储对象quadtree进行三维游戏模型的地图显示;

s34、从已加载瓦片列队tilecurrentshowqueue中依次取出每个瓦片,并判断当前取出瓦片tilenode的显示精度是否大于其所属层级精度,若是,则将下一层级的瓦片加入待加载队列tileloadqueue中,并将当前瓦片tilenode从已加载瓦片列队tilecurrentshowqueue中移除,并返回步骤s32,否则进入步骤s35;

s35、判断当前瓦片tilenode的显示精度是否小于其所属层级精度,若是,则将当前瓦片tilenode的上一级瓦片加入待加载队列tileloadqueue中,并将当前瓦片tilenode的下级瓦片全部移除,返回步骤s32,否则进入步骤s36;

s36、判断虚拟摄像机的高度是否发生变化,若是,获取变化后的瓦片层级,并将瓦片层级对应的瓦片加入待加载队列tileloadqueue中,返回步骤s32,否则完成空间模型可视化渲染。

所述步骤s34中显示精度的获取步骤具体为:

b1、根据当前取出瓦片tilenode,获取其所属层级level、x轴坐标和y轴坐标;

b2、根据步骤b1中得到的所属层级level、x轴坐标xtilenode和y轴坐标ytilenode,获取当前取出瓦片tilenode的解析度resolution、经度sourcelon和纬度sourcelat为:

其中,pow(2,level)表示2的level次方。

b3、获取虚拟摄像机的位置为(xh,yh,zh),并计算当前取出瓦片tilenode与虚拟摄像机之间的距离distance为:

b4、根据距离distance,获取当前取出瓦片tilenode的显示精度accuracy为:

accuracy=(maxgeometricaccuracy*height)/distance*ssedenominator

其中,maxgeometricaccuracy表示分辨率,其通过地球赤道的周长除以屏幕像素数获取,像素数=256,ssedenominator表示虚拟摄像机可视角度的正切值的两倍,height表示显示屏幕的像素高度。

在本实施例中,地球赤道的周长=2*pi*6378137,pi取3.1415926。

所述步骤s3中当前取出瓦片tilenode的所属层级精度accuracy_level计算公式为:

accuracy_level=d/pow(2,level)

其中,d示第0层的最大显示精度。

在本实施例中,d=1024。

起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。

此文章来源于网络,如有侵权,请联系删除

tips