虚幻引擎内构建坐标系统的方法、电子设备和存储介质转让专利

申请号 : CN202210845598.9

文献号 : CN115409962B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 崔婵婕任宇鹏任增辉李乾坤黄积晟

申请人 : 浙江大华技术股份有限公司

摘要 :

本申请公开了一种虚幻引擎内构建坐标系统的方法、电子设备和存储介质,该方法包括:在虚幻引擎中导入地理坐标系和投影坐标系;在虚幻引擎中创建一个地理全局对象,基于地理全局对象在地理坐标系中的位置,得到虚幻引擎的引擎原点,将引擎原点从地理坐标系转换至投影坐标系中,得到引擎原点的原点坐标;基于原点坐标建立引擎全局坐标系和引擎局部坐标系;其中,引擎全局坐标系以原点坐标为坐标原点,引擎局部坐标以虚幻引擎中的对象在引擎全局坐标系中的引擎全局坐标为坐标原点;确定任意两种坐标系之间的转换关系,得到虚幻引擎内的坐标系统。上述方案,能够减轻虚幻引擎的处理负担提高坐标转换的便捷度。

权利要求 :

1.一种虚幻引擎内构建坐标系统的方法,其特征在于,所述方法包括:

在虚幻引擎中导入地理坐标系和投影坐标系;其中,所述地理坐标系和所述投影坐标系与全球定位系统相关;

在所述虚幻引擎中创建一个地理全局对象,基于所述地理全局对象在所述地理坐标系中的位置,得到所述虚幻引擎的引擎原点,将所述引擎原点从所述地理坐标系转换至所述投影坐标系中,得到所述引擎原点的原点坐标;

基于所述原点坐标建立引擎全局坐标系和引擎局部坐标系;其中,所述引擎全局坐标系以所述原点坐标为坐标原点,所述引擎局部坐标以所述虚幻引擎中的对象在所述引擎全局坐标系中的引擎全局坐标为坐标原点;

确定所述地理坐标系、所述投影坐标系、所述引擎全局坐标系和所述引擎局部坐标系中任意两种坐标系之间的转换关系,得到所述虚幻引擎内的坐标系统;

将所述引擎原点以及所述坐标系统中任意两种坐标系之间的转换关系与所述地理全局对象绑定,以基于所述引擎原点和所述转换关系在所述引擎全局坐标系中定位与所述地理全局对象关联的对象;其中,所述地理全局对象以及与所述地理全局对象关联的对象与遥感图像相关。

2.根据权利要求1所述的虚幻引擎内构建坐标系统的方法,其特征在于,所述在所述虚幻引擎中创建一个地理全局对象,基于所述地理全局对象在所述地理坐标系中的位置,得到所述虚幻引擎的引擎原点,将所述引擎原点从所述地理坐标系转换至所述投影坐标系中,得到所述引擎原点的原点坐标,包括:在所述虚幻引擎中创建一个地理全局对象;其中,所述地理全局对象在所述地理坐标系中对应有地理坐标;

将所述地理全局对象在所述地理坐标系中的地理坐标所对应的位置,作为所述虚幻引擎的引擎原点;

利用空间数据转换库将所述引擎原点的地理坐标从所述地理坐标系中转换至所述投影坐标系中,将所述引擎原点在所述投影坐标系中的投影坐标作为所述原点坐标。

3.根据权利要求2所述的虚幻引擎内构建坐标系统的方法,其特征在于,所述利用空间数据转换库将所述引擎原点的地理坐标从所述地理坐标系中转换至所述投影坐标系中,将所述引擎原点在所述投影坐标系中的投影坐标作为所述原点坐标之后,还包括:在所述地理坐标系中确定所述引擎原点对应的地理位置属性,在所述投影坐标系中确定所述引擎原点对应的引擎位置属性;

其中,所述地理位置属性包括所述引擎原点在所述地理坐标系中对应的经度、纬度和海拔,所述引擎位置属性包括与所述引擎原点在所述地理坐标系中对应的经度、纬度和海拔分别匹配的横坐标、纵坐标和竖坐标,且所述地理位置属性和所述引擎位置属性利用浮点型数表示。

4.根据权利要求3所述的虚幻引擎内构建坐标系统的方法,其特征在于,所述确定所述地理坐标系、所述投影坐标系、所述引擎全局坐标系和所述引擎局部坐标系中任意两种坐标系之间的转换关系,得到所述虚幻引擎内的坐标系统,包括:生成所述地理坐标系、所述投影坐标系、所述引擎全局坐标系和所述引擎局部坐标系中任意两种坐标系之间对应的转换函数;

将所述地理位置属性、所述引擎位置属性、所述引擎原点和任意两种坐标系之间对应的转换函数与所述地理全局对象绑定,得到所述虚幻引擎内与所述地理全局对象相关的坐标系统。

5.根据权利要求4所述的虚幻引擎内构建坐标系统的方法,其特征在于,所述生成所述地理坐标系、所述投影坐标系、所述引擎全局坐标系和所述引擎局部坐标系中任意两种坐标系之间对应的转换函数,包括:将所述地理坐标系、所述投影坐标系、所述引擎全局坐标系和所述引擎局部坐标系中任意两种坐标系,作为第一坐标系和第二坐标系;

确定所述第一坐标系和所述第二坐标系对应的坐标类型和转换类型,基于所述坐标类型和所述转换类型,生成所述第一坐标系和所述第二坐标系之间的转换函数。

6.根据权利要求5所述的虚幻引擎内构建坐标系统的方法,其特征在于,所述地理坐标系和所述投影坐标系之间对应第一转换函数,所述第一转换函数用于调用所述空间数据转换库,实现所述地理坐标系和所述投影坐标系之间的转换;

所述投影坐标系和所述引擎全局坐标系之间对应第二转换函数,所述第二转换函数用于调用所述原点坐标,将所述投影坐标系中的投影坐标减去所述原点坐标,得到所述引擎全局坐标系中的引擎全局坐标,将所述引擎全局坐标系中的引擎坐标加上所述原点坐标,得到所述投影坐标系中的投影坐标;

所述引擎全局坐标系和所述引擎局部坐标系之间对应第三转换函数,所述第三转换函数用于调用所述虚幻引擎中的当前对象在所述引擎全局坐标系中的引擎全局坐标,利用所述当前对象上的顶点在所述引擎全局坐标系中的引擎全局坐标,减去所述当前对象对应的引擎全局坐标,得到所述当前对象上的顶点在所述引擎局部坐标中的引擎局部坐标,利用所述当前对象上的顶点在所述引擎局部坐标系中的引擎局部坐标,加上所述当前对象对应的引擎全局坐标,得到所述当前对象上的顶点在所述引擎全局坐标中的引擎全局坐标;

所述引擎全局坐标系和所述地理坐标系之间对应第四转换函数,所述第四转换函数用于调用所述第一转换函数和所述第二转换函数,实现所述引擎全局坐标系和所述地理坐标系之间的转换;

所述引擎局部坐标系和所述投影坐标系之间对应第五转换函数,所述第五转换函数用于调用所述第二转换函数和所述第三转换函数,实现所述引擎局部坐标系和所述投影坐标系之间的转换;

所述引擎局部坐标系和所述地理坐标系之间对应第六转换函数,所述第六转换函数用于调用所述第一转换函数、所述第二转换函数和所述第三转换函数,实现所述引擎局部坐标系和所述地理坐标系之间的转换。

7.根据权利要求1所述的虚幻引擎内构建坐标系统的方法,其特征在于,所述基于所述原点坐标建立引擎全局坐标系和引擎局部坐标系,包括:将所述原点坐标作为坐标原点,建立所述引擎全局坐标系;将所述虚幻引擎中的对象在所述引擎全局坐标系中对应的全局坐标作为坐标原点,建立所述虚幻引擎中的对象所对应的引擎局部坐标系;

其中,所述虚幻引擎中的当前对象在所述引擎全局坐标系中的引擎全局坐标,包括所述当前对象相对所述原点坐标的偏移值;所述当前对象上的顶点在对应的引擎局部坐标系中的引擎局部坐标,包括所述当前对象上的顶点相对所述当前对象的引擎全局坐标的偏移值。

8.根据权利要求1所述的虚幻引擎内构建坐标系统的方法,其特征在于,所述地理坐标系包括WGS84坐标系,所述投影坐标系包括所述WGS84坐标系对应的墨卡托投影坐标系。

9.一种电子设备,其特征在于,包括:相互耦接的存储器和处理器,其中,所述存储器存储有程序数据,所述处理器调用所述程序数据以执行如权利要求1‑8中任一项所述的方法。

10.一种计算机可读存储介质,其上存储有程序数据,其特征在于,所述程序数据被处理器执行时实现如权利要求1‑8中任一项所述的方法。

说明书 :

虚幻引擎内构建坐标系统的方法、电子设备和存储介质

技术领域

[0001] 本申请涉及虚拟现实技术领域,特别是涉及一种虚幻引擎内构建坐标系统的方法、电子设备和存储介质。

背景技术

[0002] 随着虚拟现实技术的不断发展,数字孪生方面的应用也愈发得到重视,利用数字孪生技术能够将现实世界向虚拟世界进行映射,从而在虚拟世界中构建与现实世界对应的虚拟模型,以便基于虚拟模型对实现世界存在的问题进行分析。但现有技术中,虚幻引擎中创建的虚拟模型难以与现实世界中的位置精确对应,基于虚幻引擎中现有的坐标系统进行定位时处理负担大,且不同坐标系之间转换不便。有鉴于此,如何减轻虚幻引擎的处理负担提高坐标转换的便捷度成为亟待解决的问题。

发明内容

[0003] 本申请主要解决的技术问题是提供一种虚幻引擎内构建坐标系统的方法、电子设备和存储介质,能够减轻虚幻引擎的处理负担提高坐标转换的便捷度。
[0004] 为解决上述技术问题,本申请第一方面提供一种虚幻引擎内构建坐标系统的方法,包括:在虚幻引擎中导入地理坐标系和投影坐标系;其中,所述地理坐标系和所述投影坐标系与全球定位系统相关;在所述虚幻引擎中创建一个地理全局对象,基于所述地理全局对象在所述地理坐标系中的位置,得到所述虚幻引擎的引擎原点,将所述引擎原点从所述地理坐标系转换至所述投影坐标系中,得到所述引擎原点的原点坐标;基于所述原点坐标建立引擎全局坐标系和引擎局部坐标系;其中,所述引擎全局坐标系以所述原点坐标为坐标原点,所述引擎局部坐标以所述虚幻引擎中的对象在所述引擎全局坐标系中的引擎全局坐标为坐标原点;确定所述地理坐标系、所述投影坐标系、所述引擎全局坐标系和所述引擎局部坐标系中任意两种坐标系之间的转换关系,得到所述虚幻引擎内的坐标系统。
[0005] 为解决上述技术问题,本申请第二方面提供一种电子设备,该电子设备包括:相互耦接的存储器和处理器,其中,所述存储器存储有程序数据,所述处理器调用所述程序数据以执行上述第一方面所述的方法。
[0006] 为解决上述技术问题,本申请第三方面提供一种计算机可读存储介质,其上存储有程序数据,所述程序数据被处理器执行时实现上述第一方面所述的方法。
[0007] 上述方案,在虚幻引擎中构建包括地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标系的坐标系统,其中,地理坐标系与投影坐标系与全球定位系统相关,能够降低虚幻引擎与现实世界进行位置匹配的难度,在虚幻引擎中创建一个地理全局对象,将地理全局对象在投影坐标系中的坐标作为原点坐标,基于原点坐标建立引擎全局坐标系和引擎局部坐标系,其中,引擎全局坐标系以原点坐标为坐标原点,引擎局部坐标以虚幻引擎中的对象在引擎全局坐标系中的引擎全局坐标为坐标原点,从而引擎全局坐标系用于定位虚幻引擎中的任一对象,引擎局部坐标系用于定位虚幻引擎中任一对象的顶点,且至少部分对象对应的引擎全局坐标的数值较小,引擎局部坐标系中的引擎局部坐标对应的数值较小,能够有效减轻虚幻引擎的处理负担并提高计算效率,确定任意两种坐标系之间的转换关系,以便任一对象在坐标系统中的坐标能够相互转换,提高坐标转换的便捷度。

附图说明

[0008] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。其中:
[0009] 图1是本申请基于虚幻引擎的模型构建方法一实施方式的流程示意图;
[0010] 图2是本申请虚幻引擎内构建坐标系统的方法一实施方式的流程示意图;
[0011] 图3是本申请基于虚幻引擎的地形构建方法一实施方式的流程示意图;
[0012] 图4是本申请基于虚幻引擎的地形构建方法一实施方式的应用场景示意图;
[0013] 图5是本申请基于虚幻引擎的地图构建方法一实施方式的流程示意图;
[0014] 图6是本申请基于虚幻引擎的平面构建方法一实施方式的流程示意图;
[0015] 图7是本申请基于虚幻引擎的立体构建方法一实施方式的流程示意图;
[0016] 图8是本申请基于虚幻引擎的立体构建方法一实施方式的应用场景示意图;
[0017] 图9是本申请基于虚幻引擎的图标构建方法一实施方式的流程示意图;
[0018] 图10是本申请基于虚幻引擎的热力图构建方法一实施方式的流程示意图;
[0019] 图11是本申请电子设备一实施方式的结构示意图;
[0020] 图12是本申请计算机可读存储介质一实施方式的结构示意图。

具体实施方式

[0021] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性的劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0022] 本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。此外,本文中的“多”表示两个或者多于两个。
[0023] 本文中所引用的虚幻引擎(Unreal Engine)是一款用于能够构建虚拟世界的游戏开发引擎,本文中所提供的各种方法所对应的执行主体为虚幻引擎对应的服务器或处理终端。
[0024] 请参阅图1,图1是本申请基于虚幻引擎的模型构建方法一实施方式的流程示意图,该方法包括:
[0025] S101:在虚幻引擎中构建坐标系统。
[0026] 具体地,在虚幻引擎中构建坐标系统,以使虚幻引擎中的位置能够通过坐标系统与现实世界相关联。
[0027] 在一应用方式中,在虚幻引擎中构建坐标系统并确定引擎原点,坐标系统包括地理坐标系、投影坐标系和引擎全局坐标系,其中,地理坐标系和投影坐标系与全球定位系统相关,引擎全局坐标系用于定位虚幻引擎中的任一对象,引擎原点在投影坐标系中对应有原点坐标,引擎全局坐标系中的引擎全局坐标基于投影坐标系中的投影坐标减去原点坐标后获得。
[0028] 在另一应用方式中,在虚幻引擎中创建地理全局对象并构建坐标系统,坐标系统包括地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标,地理全局对象包括引擎原点以及坐标系统中任意两种坐标系之间的转换关系,其中,地理坐标系和投影坐标系与全球定位系统相关,引擎全局坐标系用于定位虚幻引擎中的任一对象,引擎原点在投影坐标系中对应有原点坐标,引擎全局坐标系中的引擎全局坐标基于投影坐标系中的投影坐标减去原点坐标后获得,引擎局部坐标系中的引擎局部坐标基于当前对象上的顶点相对当前对象的引擎全局坐标的偏移值确定。
[0029] S102:获得基于遥感图像得到的DEM影像、栅格数据和矢量数据,将DEM影像、栅格数据和矢量数据导入虚幻引擎中,生成与DEM影像对应的地形、与栅格数据对应的地图、与矢量数据对应的平面和立体。
[0030] 具体地,遥感图像是以象元为单位的栅格结构,基于遥感图像即可获得栅格数据,对遥感图像中的栅格结构进行矢量提取即可获得矢量数据,获得基于遥感图像进行算法提取后得到的数字高程模型(Digital Elevation Model,DEM),从数字高程模型中得到DEM影像,其中,栅格数据包括遥感图像的图像信息,DEM影像包括遥感图像中的高度信息,矢量数据包括从遥感图像中提取的矢量线和矢量面。
[0031] 在一应用方式中,获取基于遥感图像得到的DEM影像,读取遥感图像,提取遥感图像中的图像信息得到栅格数据,对遥感图像中的栅格结构进行矢量提取得到矢量数据,将DEM影像导入虚幻引擎中得到DEM影像对应的地形,将栅格数据导入虚幻引擎中得到栅格数据对应的地图,将矢量数据导入虚幻引擎得到矢量数据对应的平面和立体,其中,平面对应矢量线或矢量面,立体对应矢量面,将矢量线拓宽后能够在虚幻引擎中生成平面,基于矢量面能够在虚幻引擎中生成平面,将矢量面拉高后能够在虚幻引擎中生成立体。
[0032] 在另一应用方式中,获得基于遥感图像得到的DEM影像,将DEM影像导入虚幻引擎,在虚幻引擎中生成与DEM影像对应的地形;以及,获得基于遥感图像得到的栅格数据,将栅格数据导入虚幻引擎,在虚幻引擎中生成与栅格数据对应的地图;以及,获得基于遥感图像得到的矢量数据,将矢量数据中的矢量线或矢量面导入虚幻引擎,在虚幻引擎中生成与矢量数据对应的平面;以及,获得基于遥感图像得到的矢量数据,将矢量数据中的矢量面导入虚幻引擎,在虚幻引擎中生成与矢量数据对应的立体。
[0033] 具体地,利用空间数据转换库读取遥感图像,以使虚幻引擎能够兼容遥感图像,将遥感图像作为构建虚拟模型的源数据,并且遥感图像能够作为虚拟模型在现实世界中的参照,在虚幻引擎中生成与DEM影像对应的地形、与栅格数据对应的地图和与矢量数据对应的平面和立体,以便降低在虚幻引擎中构建虚拟模型的难度。
[0034] 在一应用场景中,空间数据转换库为在X/MIT许可协议下的开源栅格空间数据转换库(Geospatial Data Abstraction Library,GDAL),以使虚幻引擎能够兼容以象元为单位的栅格结构的遥感图像。
[0035] S103:基于地形、地图、平面和立体在坐标系统中的位置,在虚幻引擎中生成与遥感图像对应的虚拟模型。
[0036] 具体地,确定地形、地图、平面和立体在虚幻引擎的坐标系统中的坐标,在虚幻引擎中按地形、地图、平面和立体对应的坐标处,生成虚拟的地形、虚拟的地图、虚拟的平面和虚拟的立体,在虚幻引擎中生成与遥感图像对应的虚拟模型。
[0037] 在一应用方式中,坐标系统包括地理坐标系、投影坐标系和引擎全局坐标系,基于地形、地图、平面和立体在引擎全局坐标系中的引擎全局坐标,在虚幻引擎中按地形、地图、平面和立体的引擎全局坐标分别生成虚拟的地形、虚拟的地图、虚拟的平面和虚拟的立体,从而在虚幻引擎中构建出与遥感图像对应的虚拟模型,提高虚拟模型的逼真度。
[0038] 在另一应用方式中,坐标系统包括地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标,基于地形、地图、平面和立体在引擎全局坐标系中的引擎全局坐标,以及地形、地图、平面和立体对应的顶点在引擎局部坐标系中的引擎局部坐标,在虚幻引擎中按地形、地图、平面和立体的引擎全局坐标分别生成虚拟的地形、虚拟的地图、虚拟的平面和虚拟的立体,从而在虚幻引擎中构建出与遥感图像对应的虚拟模型,提高虚拟模型的逼真度以及定位的精准度。
[0039] 上述方案,在虚幻引擎中构建坐标系统,以便将现实世界与虚拟世界进行精确对应,获得基于遥感图像得到的DEM影像、栅格数据和矢量数据,从而将遥感图像作为构建虚拟模型的源数据,将DEM影像导入虚幻引擎中得到DEM影像对应的地形,将栅格数据导入虚幻引擎中得到栅格数据对应的地图,将矢量数据导入虚幻引擎得到矢量数据对应的平面和立体,基于地形、地图、平面和立体在所述坐标系统中的位置,在虚幻引擎中生成与遥感图像对应的虚拟模型。故此,虚幻引擎能够兼容遥感图像并将遥感图像作为生成虚拟模型的源数据,并且遥感图像能够作为虚拟模型在现实世界中的参照,以便降低在虚幻引擎中构建虚拟模型的难度,此外,地形、地图、平面和立体均基于遥感图像在虚幻引擎中构建,且在虚幻引擎的坐标系统中能够与现实世界中的位置相对应,从而提高虚拟模型的逼真度。
[0040] 在一些实施例中,请参阅图2,图2是本申请虚幻引擎内构建坐标系统的方法一实施方式的流程示意图,在虚幻引擎中构建坐标系统的过程具体包括:
[0041] S201:在虚幻引擎中导入地理坐标系和投影坐标系,其中,地理坐标系和投影坐标系与全球定位系统相关。
[0042] 具体地,在虚幻引擎中导入地理坐标系和投影坐标系,地理坐标系和投影坐标系均与全球定位系统相关,地理坐标系是基于经度、纬度和海拔确定位置的球面坐标系,投影坐标系是基于地理坐标系将球体投影到圆柱体上并展开成平面的坐标系。
[0043] 在一应用方式中,利用空间数据转换库将地理坐标系和投影坐标系导入虚幻引擎,在虚幻引擎中确定地理坐标系以及地理坐标系对应的投影坐标系。
[0044] 在另一应用方式中,基于虚幻引擎中定义的行星类型,利用虚幻引擎中的地理配准插件导入与行星类型相匹配的地理坐标系和投影坐标系,其中,行星类型包括扁平行星和圆形行星,在扁平行星上,以一个平面近似,按照投影模式建模,所有坐标在投影坐标系中使用转移偏移量来定义,在圆形行星上当原点在行星中心时可以使用地心坐标系建模,也可以将原点设置在行星表面上的任意点,利用地理坐标系或投影坐标系建模。
[0045] 在一应用场景中,地理坐标系包括WGS84坐标系,投影坐标系包括WGS84坐标系对应的墨卡托投影坐标系。
[0046] 具体地,WGS84坐标系是为GPS全球定位系统使用而建立的坐标系统,墨卡托投影坐标系是假设一个与地轴方向一致的圆柱切或割于地球,按等角条件,将经纬网投影到圆柱面上,将圆柱面展为平面后得到,通用墨卡托投影将北纬84度和南纬80度之间的地球表面,按经度6度划分为南北纵带,得到通用墨卡托投影坐标系。通过将地理坐标系和投影坐标系设置为常用的坐标系,从而提高虚幻引擎中坐标系统的兼容性,降低虚幻引擎与现实世界进行位置匹配的难度。
[0047] S202:在虚幻引擎中创建一个地理全局对象,基于地理全局对象在地理坐标系中的位置,得到虚幻引擎的引擎原点,将引擎原点从地理坐标系转换至投影坐标系中,得到引擎原点的原点坐标。
[0048] 具体地,在虚幻引擎中创建一个地理全局对象,利用地理全局对象来定义虚幻引擎中的引擎原点,将地理全局对象在地理坐标系中的地理坐标转换至投影坐标系中,得到引擎原点在投影坐标系中的原点坐标。
[0049] 在一应用场景中,在虚幻引擎中创建一个地理全局对象,其中,地理全局对象为AGeoActor,AGeoActor用于定义虚幻引擎中的引擎原点,确定地理全局对象在地理坐标系中的地理坐标,利用空间数据转换库将地理全局对象对应的地理坐标转换至投影坐标系中,得到地理全局对象对应的投影坐标,将地理全局对象对应的投影坐标作为引擎原点在投影坐标系中的原点坐标。
[0050] S203:基于原点坐标建立引擎全局坐标系和引擎局部坐标系,其中,引擎全局坐标系以原点坐标为坐标原点,引擎局部坐标以虚幻引擎中的对象在引擎全局坐标系中的引擎全局坐标为坐标原点。
[0051] 具体地,将原点坐标作为引擎全局坐标系的坐标原点建立引擎全局坐标系,将虚幻引擎中的对象在引擎全局坐标系中的引擎全局坐标作为坐标原点,建立对应的对象的引擎局部坐标系,从而引擎全局坐标系用于定位虚幻引擎中的任一对象,引擎局部坐标系用于定位虚幻引擎中任一对象的顶点。
[0052] 在一应用方式中,将原点坐标作为引擎全局坐标系的坐标原点建立引擎全局坐标系,将当前对象在引擎全局坐标系中的位置作为坐标原点,建立当前对象对应的引擎局部坐标系。
[0053] 在另一应用方式中,将原点坐标作为引擎全局坐标系的坐标原点建立引擎全局坐标系,指定当前对象上预设部位的顶点在引擎全局坐标系中的位置作为坐标原点,建立当前对象对应的引擎局部坐标系。
[0054] 具体地,任一对象在引擎全局坐标系中的引擎全局坐标,即为当前对象相对引擎原点的位置偏移,因此,任一对象在引擎全局坐标系中的引擎全局坐标均是与原点坐标的偏移值,而非与地理坐标系的偏移值,当虚幻引擎中的对象与引擎原点的距离越近,则对应的引擎全局坐标的数值越小,当虚幻引擎中包括多个对象时,至少部分对象对应的引擎全局坐标的数值较小,从而在调用对象的引擎全局坐标或基于引擎全局坐标进行计算时,能够有效减轻虚幻引擎的处理负担并提高计算效率,对于任一对象上的顶点可基于引擎局部坐标系进行定位,引擎局部坐标系以对应的对象在引擎全局坐标系中的引擎全局坐标为原点构建,因此,引擎局部坐标系中的引擎局部坐标对应的数值较小,能够有效减轻虚幻引擎的处理负担并提高计算效率。
[0055] S204:确定地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标系中任意两种坐标系之间的转换关系,得到虚幻引擎内的坐标系统。
[0056] 具体地,地理坐标系统中任意两种坐标系之间具备转换关系,确定地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标系中任意两种坐标系之间的转换关系,确定最终的坐标系统。
[0057] 可选地,将引擎原点以及坐标系统中任意两种坐标系之间的转换关系与地理全局对象绑定,以便任一继承于地理全局对象的对象均能够获得引擎原点和转换关系。
[0058] 在一应用方式中,从坐标系统中任意提取两种坐标系,基于坐标系统中各个坐标系的构建方式,确定坐标系统中任意两种坐标系之间的转换关系,将引擎原点以及坐标系统中任意两种坐标系之间的转换关系与地理全局对象绑定,以便任一继承于地理全局对象的对象均能够获得引擎原点和转换关系。
[0059] 在另一应用方式中,将引擎全局坐标系作为坐标系统的核心,确定地理坐标系、投影坐标系以及引擎局部坐标系各自与引擎全局坐标系的转换关系,利用空间数据转换库确定地理坐标系与投影坐标系之间的转换关系,基于地理坐标系与投影坐标系之间的转换关系,以及地理坐标系、投影坐标系以及引擎局部坐标系各自与引擎全局坐标系的转换关系,确定地理坐标系与引擎局部坐标系之间的转换关系和投影坐标系与引擎局部坐标系之间的转换关系。
[0060] 在本实施例中,在虚幻引擎中构建包括地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标系的坐标系统,其中,地理坐标系与投影坐标系与全球定位系统相关,能够降低虚幻引擎与现实世界进行位置匹配的难度,在虚幻引擎中创建一个地理全局对象,将地理全局对象在投影坐标系中的坐标作为原点坐标,基于原点坐标建立引擎全局坐标系和引擎局部坐标系,其中,引擎全局坐标系以原点坐标为坐标原点,引擎局部坐标以虚幻引擎中的对象在引擎全局坐标系中的引擎全局坐标为坐标原点,从而引擎全局坐标系用于定位虚幻引擎中的任一对象,引擎局部坐标系用于定位虚幻引擎中任一对象的顶点,且至少部分对象对应的引擎全局坐标的数值较小,引擎局部坐标系中的引擎局部坐标对应的数值较小,能够有效减轻虚幻引擎的处理负担并提高计算效率,确定任意两种坐标系之间的转换关系,以便任一对象在坐标系统中的坐标能够相互转换,提高坐标转换的便捷度。
[0061] 在一些实施场景中,上述步骤S202具体包括:在虚幻引擎中创建一个地理全局对象;其中,地理全局对象在地理坐标系中对应有地理坐标;将地理全局对象在地理坐标系中的地理坐标所对应的位置,作为虚幻引擎的引擎原点;利用空间数据转换库将引擎原点的地理坐标从地理坐标系中转换至投影坐标系中,将引擎原点在投影坐标系中的投影坐标作为原点坐标。
[0062] 具体地,在虚幻引擎中创建一个地理全局对象用于定义虚幻引擎中的引擎原点,地理全局对象在地理坐标系中对应有地理坐标,基于地理全局对象的地理坐标确定地理全局对象在地理坐标系中的位置,将地理全局对象在地理坐标系中的位置作为虚幻引擎的引擎原点,利用空间转换库将引擎原点的地理坐标从地理坐标系中转换至投影坐标系中,得到引擎原点在投影坐标系中的投影坐标,将引擎原点在投影坐标系中的投影坐标作为原点坐标。其中,地理全局对象能够用来定义引擎原点,确定引擎原点后获得引擎原点在投影坐标系中的投影坐标作为原点坐标,以便于构建引擎全局坐标系。
[0063] 进一步地,利用空间数据转换库将引擎原点的地理坐标从地理坐标系中转换至投影坐标系中,将引擎原点在投影坐标系中的投影坐标作为原点坐标之后,还包括:在地理坐标系中确定引擎原点对应的地理位置属性,在投影坐标系中确定引擎原点对应的引擎位置属性;其中,地理位置属性包括引擎原点在地理坐标系中对应的经度、纬度和海拔,引擎位置属性包括与引擎原点在地理坐标系中对应的经度、纬度和海拔分别匹配的横坐标、纵坐标和竖坐标,且地理位置属性和引擎位置属性利用浮点型数表示。
[0064] 具体地,在地理坐标系中确定引擎原点对应的经度、纬度和海拔,从而得到引擎原点对应的地理位置属性,在投影坐标系中确定与引擎原点在地理坐标系中对应的经度相匹配的横坐标、与纬度相匹配的纵坐标以及与海拔相匹配的竖坐标,从而得到引擎原点对应的引擎位置属性,并且引擎原点对应的地理位置属性和引擎位置属性均利用浮点型数表示,以提高地理位置属性和引擎位置属性的精度。
[0065] 进一步地,地理位置属性以浮点型分别定义经度、纬度和海拔,表示地理全局对象位于真实世界中的位置,引擎位置属性以浮点型横坐标、纵坐标和竖坐标,表示地理全局对象位于虚幻引擎中的位置。
[0066] 在一具体应用场景中,地理位置属性以浮点型分别定义经度、纬度和海拔,在虚幻引擎中以GeoCoordinate表示,引擎位置属性以浮点型横坐标、纵坐标和竖坐标,横坐标、纵坐标和竖坐标分别对应X、Y、Z,在虚幻引擎中以EngineCoordinate表示。
[0067] 在一应用方式中,上述步骤S203具体包括:将原点坐标作为坐标原点,建立引擎全局坐标系;将虚幻引擎中的对象在引擎全局坐标系中对应的全局坐标作为坐标原点,建立虚幻引擎中的对象所对应的引擎局部坐标系;其中,虚幻引擎中的当前对象在引擎全局坐标系中的引擎全局坐标,包括当前对象相对原点坐标的偏移值;当前对象上的顶点在对应的引擎局部坐标系中的引擎局部坐标,包括当前对象上的顶点相对当前对象的引擎全局坐标的偏移值。
[0068] 具体地,将原点坐标作为坐标原点,在虚幻引擎中建立引擎全局坐标系,以使引擎全局坐标系能够定位虚幻引擎中任一对象的位置,虚幻引擎中的当前对象在引擎全局坐标系中的引擎全局坐标,表示当前对象相对原点坐标的偏移值。
[0069] 进一步地,将虚幻引擎中的对象在引擎全局坐标系中对应的全局坐标作为坐标原点,建立虚幻引擎中的对象所对应的引擎局部坐标系,以使引擎局部坐标系能够定位虚幻引擎中任一对象上的顶点,当前对象上的顶点在对应的引擎局部坐标系中的引擎局部坐标,表示当前对象上的顶点相对当前对象的引擎全局坐标的偏移值。
[0070] 可以理解的是,当虚幻引擎中的对象与引擎原点的距离越近,则对应的引擎全局坐标的数值越小,当虚幻引擎中包括多个对象时,至少部分对象对应的引擎全局坐标的数值较小,从而在调用对象的引擎全局坐标或基于引擎全局坐标进行计算时,能够有效减轻虚幻引擎的处理负担并提高计算效率,对于任一对象上的顶点可基于引擎局部坐标系进行定位,且引擎局部坐标表示当前对象上的顶点相对当前对象的引擎全局坐标的偏移值,因此,引擎局部坐标系中的引擎局部坐标对应的数值较小,从而在调用对象的引擎局部坐标或基于引擎局部坐标进行计算时,能够有效减轻虚幻引擎的处理负担并提高计算效率。
[0071] 在一应用方式中,上述步骤S204具体包括:生成地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标系中任意两种坐标系之间对应的转换函数;将地理位置属性、引擎位置属性、引擎原点和任意两种坐标系之间对应的转换函数与地理全局对象绑定,得到虚幻引擎内与地理全局对象相关的坐标系统。
[0072] 具体地,为坐标系统中任意两种坐标系之间生成转换函数,将地理位置属性、引擎位置属性、引擎原点和任意两种坐标系之间对应的转换函数与地理全局对象绑定,以便任一继承于地理全局对象的其他对象能够获得地理位置属性、引擎位置属性、引擎原点和任意两种坐标系之间对应的转换函数,便于新生成的对象能够获取和利用相应的位置属性和转换函数。
[0073] 进一步地,生成地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标系中任意两种坐标系之间对应的转换函数,包括:将地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标系中任意两种坐标系,作为第一坐标系和第二坐标系;确定第一坐标系和第二坐标系对应的坐标类型和转换类型,基于坐标类型和转换类型,生成第一坐标系和第二坐标系之间的转换函数。
[0074] 具体地,从地理坐标系中提取任意两种坐标系分别作为第一坐标系和第二坐标系,确定第一坐标系和第二坐标系各自对应的坐标类型,以及第一坐标系和第二坐标系之间的转换类型,其中,地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标系各自对应有坐标类型且相互区别,转换类型包括正值和负值,当转换类型为正值则表示第一坐标系向第二坐标系转换,当转换类型为负值则表示第二坐标系向第一坐标系转换,基于坐标类型和转换类型,生成第一坐标系和第二坐标系之间的转换函数,得到最终确定的坐标系统,以使坐标系统中包括任意两种坐标系之间的转换函数。
[0075] 进一步地,在使用坐标系统的过程中,通过调用转换函数即可实现坐标系之间的转换,提高任意两种坐标系之间的转换效率。
[0076] 在一具体应用场景中,地理坐标系和投影坐标系之间对应第一转换函数,第一转换函数用于调用空间数据转换库,实现地理坐标系和投影坐标系之间的转换;投影坐标系和引擎全局坐标系之间对应第二转换函数,第二转换函数用于调用原点坐标,将投影坐标系中的投影坐标减去原点坐标,得到引擎全局坐标系中的引擎全局坐标,将引擎全局坐标系中的引擎坐标加上原点坐标,得到投影坐标系中的投影坐标;引擎全局坐标系和引擎局部坐标系之间对应第三转换函数,第三转换函数用于调用虚幻引擎中的当前对象在引擎全局坐标系中的引擎全局坐标,利用当前对象上的顶点在引擎全局坐标系中的引擎全局坐标,减去当前对象对应的引擎全局坐标,得到当前对象上的顶点在引擎局部坐标中的引擎局部坐标,利用当前对象上的顶点在引擎局部坐标系中的引擎局部坐标,加上当前对象对应的引擎全局坐标,得到当前对象上的顶点在引擎全局坐标中的引擎全局坐标;引擎全局坐标系和地理坐标系之间对应第四转换函数,第四转换函数用于调用第一转换函数和第二转换函数,实现引擎全局坐标系和地理坐标系之间的转换;引擎局部坐标系和投影坐标系之间对应第五转换函数,第五转换函数用于调用第二转换函数和第三转换函数,实现引擎局部坐标系和投影坐标系之间的转换;引擎局部坐标系和地理坐标系之间对应第六转换函数,第六转换函数用于调用第一转换函数、第二转换函数和第三转换函数,实现引擎局部坐标系和地理坐标系之间的转换。
[0077] 具体地,第一转换函数定义为bool Geo_Projection_convert(FVector Point,bool Geo2Pro),地理坐标与投影坐标的转换藉由GDAL库实现。
[0078] 进一步地,引擎全局坐标与投影坐标的单位和数量级一致,引擎全局坐标为当前点相对于引擎原点的投影坐标的差值,第二转换函数定义为bool Projection_EngineGlobal_convert(FVector Point,bool Pro2Engine),第二转换函数的实现步骤为:
首先,使用Geo_Projection_convert函数计算出引擎原点AGeoActor的投影坐标,然后,投影坐标转引擎全局坐标的实现为:投影坐标减去AGeoAactor的投影坐标的差值,引擎全局坐标转投影坐标的实现为:引擎全局坐标加上AGeoAactor的投影坐标的和。
[0079] 进一步地,引擎全局坐标实际为当前对象在引擎中的位置,引擎局部坐标用于定义当前对象的静态网格体的顶点坐标,引擎局部坐标为当前顶点相对于当前对象在引擎中位置坐标的差值,第三转换函数定义为bool EngineGlobal_Local_convert(FVector Point,bool Global2Local),引擎全局坐标转引擎局部坐标的实现为:当前点的坐标减去引擎全局坐标的差值,引擎局部坐标转引擎全局坐标的实现为:当前点的坐标加上引擎全局坐标的总和。
[0080] 进一步地,引擎全局坐标系和地理坐标系之间对应的第四转换函数定义为bool Geo_EngineGlobal_convert(FVector Point,bool Geo2Engine),地理坐标转换成引擎全局坐标的具体实现步骤为:首先调用第一转换函数将地理坐标转为投影坐标,然后调用第二转换函数将投影坐标转为引擎全局坐标,引擎全局坐标转地理坐标的实现步骤与之相反。
[0081] 进一步地,引擎局部坐标系和投影坐标系之间对应的第五转换函数定义为bool Pro_EngineLocal_convert(FVector Point,bool Pro2Engine),其中,投影坐标转换成引擎局部坐标的具体实现步骤为:首先调用第二转换函数将投影坐标转为引擎全局坐标,然后调用第三转换函数将引擎全局坐标转为引擎局部坐标,引擎局部坐标转投影坐标的实现步骤与之相反。
[0082] 进一步地,引擎局部坐标系与地理坐标系之间对应的第六转换函数定义为bool Geo_EngineLocal_convert(FVector Point,bool Geo2Engine),地理坐标转引擎局部坐标的实现步骤为:首先调用第一转换函数将地理坐标转为投影坐标,然后调用第二转换函数将投影坐标转为引擎全局坐标,最后调用第三转换函数将引擎全局坐标转为引擎局部坐标,引擎局部坐标转地理坐标的实现步骤与之相反。
[0083] 需要说明的是,各个转换函数中,Point表示待转换点的坐标,FVetcor表示坐标类型,若是地理坐标,则表示经度、纬度和海拔,若是投影坐标、引擎全局坐标或引擎局部坐标,则表示X、Y和Z,Geo2Pro表示坐标转换类型,转换类型对应有true和flase,true代表第一坐标系转第二坐标系,flase表示第二坐标系转第一坐标系。通过上述六种转换函数,能够分别实现任意两种坐标系之间的转换,当需要对其中两种坐标系进行转换时,调用对应的转换函数即可,提高转换效率。
[0084] 需要说明的是,当坐标系统构建完成后,虚幻引擎对应有坐标系统和引擎原点,坐标系统包括地理坐标系、投影坐标系和引擎全局坐标系;其中,地理坐标系和投影坐标系与全球定位系统相关,引擎全局坐标系用于定位虚幻引擎中的任一对象,引擎原点在投影坐标系中对应有原点坐标,引擎全局坐标系中的引擎全局坐标基于投影坐标系中的投影坐标减去原点坐标后获得。
[0085] 在一些实施例中,请参阅图3,图3是本申请基于虚幻引擎的地形构建方法一实施方式的流程示意图,获得基于遥感图像得到的DEM影像,将DEM影像导入虚幻引擎,在虚幻引擎中生成与DEM影像对应的地形的过程,具体包括:
[0086] S301:获得基于遥感图像得到的DEM影像,并确定DEM影像的影像尺寸。
[0087] 具体地,获得基于遥感图像进行算法提取后得到的数字高程模型(Digital Elevation Model,DEM),从数字高程模型中得到DEM影像,确定DEM影像的影像尺寸。
[0088] 在一应用方式中,利用空间数据转换库提取遥感图像对应的DEM影像,获得DEM影像对应的数据尺寸,基于DEM影像的数据尺寸以及虚幻引擎的单位长度对DEM影像进行插值,得到DEM影像对应的影像尺寸。
[0089] 在另一应用方式中,利用空间数据转换库读取数字高程模型,得到DEM影像以及DEM影像对应的数据尺寸,利用数据尺寸计算得到DEM影像的数据范围,基于DEM影像的数据范围对DEM影像进行插值,得到DEM影像对应的影像尺寸,以使DEM影像对应的影像尺寸与虚幻引擎的单位长度相匹配。
[0090] S302:基于影像尺寸与虚幻引擎中的影像尺寸阈值,将DEM影像划分为至少一个影像块,并确定各个影像块的影像子尺寸。
[0091] 具体地,虚幻引擎中单个地形对象对应有影像尺寸阈值,影像尺寸阈值限制了构建地形的尺寸范围,在跨区域构建地形或者地形对应的原始尺寸较大时会导致DEM影像中对应的实际尺寸较大,则DEM影像的影像尺寸较大且超过影像尺寸阈值,以致难以在虚幻引擎中构建与实际尺寸相匹配的地形。
[0092] 进一步地,当影像尺寸小于或等于影像尺寸阈值时,基于影像尺寸与虚幻引擎中的影像尺寸阈值,将DEM影像划分为一个影像块,当影像尺寸大于影像尺寸阈值时,需要将DEM影像进行分割,基于影像尺寸与虚幻引擎中的影像尺寸阈值,将DEM影像划分为多个影像块,确定各个影像块的影像子尺寸。
[0093] 在一应用方式中,DEM影像对应有影像长度和影像宽度,影像尺寸阈值对应有面积上限,基于影像长度和影像宽度的乘积与影像尺寸阈值的比值,确定DEM影像所分成的影像块的数量并得到各个影像块的影像子尺寸。
[0094] 在另一应用方式中,DEM影像对应有像素尺寸,影像尺寸阈值对应有像素尺寸上限,DEM影像对应的像素尺寸与像素尺寸上限的比值,确定DEM影像所分成的影像块的数量并得到各个影像块的影像子尺寸。
[0095] S303:针对每个影像块,基于该影像块对应的影像子尺寸,生成与影像块对应的地形尺寸、地形高度和地形坐标,在虚幻引擎的地形坐标处,生成与地形尺寸和地形高度相匹配的地形对象。
[0096] 具体地,基于影像块对应的影像子尺寸确定地形对象对应的地形尺寸,基于影像块对应的高度信息和位置信息分别得到地形对象对应的地形高度和地形坐标。
[0097] 进一步地,在虚幻引擎中地形对象的地形尺寸基于分段像素尺寸、分段和组件定义,各个地形对象包括多个组件,各个组件对应组件像素尺寸,组件像素尺寸与组件中分段的数量以及分段像素尺寸相关,组件采用统一的组件像素尺寸。
[0098] 在一应用方式中,影像块对应有高度信息和位置信息,组件对应最大数量的分段且每个分段采用最大分段像素尺寸,基于影像块的影像子尺寸和组件像素尺寸,确定地形对象中组件的数量,基于地形对象中组件的数量得到地形对象对应的地形尺寸,基于影像块对应的高度信息和位置信息分别得到地形对象对应的地形高度和地形坐标。
[0099] 在另一应用方式中,影像块对应有高度信息和位置信息,组件对应最大数量的分段且每个分段采用指定分段像素尺寸,基于影像块的影像子尺寸和组件像素尺寸,确定地形对象中组件的数量,基于地形对象中组件的数量得到地形对象对应的地形尺寸,基于影像块对应的高度信息和位置信息分别得到地形对象对应的地形高度和地形坐标。
[0100] S304:基于所有影像块生成的地形对象,在虚幻引擎中生成与DEM影像对应的地形。
[0101] 具体地,在虚幻引擎中确定地形坐标对应的位置,在地形坐标处生成与地形尺寸和地形高度相匹配的地形对象,以便地形对象与现实世界的位置相对应,直至遍历所有影像块对应的地形对象,在虚幻引擎中生成与DEM影像对应的地形。
[0102] 在本实施例中,获得基于遥感图像得到的DEM影像,确定DEM影像的影像尺寸,基于影像尺寸与虚幻引擎的影像尺寸阈值,对DEM影像进行分割,得到至少一个影像块,对于各个影像块,基于该影像块对应的影像子尺寸,生成与影像块对应的地形尺寸、地形高度和地形坐标,在地形坐标处生成与地形尺寸和地形高度相匹配的地形对象,以便地形对象与现实世界的位置相对应,直至遍历所有影像块对应的地形对象,在虚幻引擎中生成与DEM影像对应的地形,当DEM影像分成至少一个影像块后,能够在虚幻引擎中生成任意尺寸的地形,提高虚幻引擎中生成地形的自由度。
[0103] 在一些实施场景中,上述步骤S301具体包括:利用空间数据转换库读取遥感图像对应的DEM影像,得到DEM影像及其对应的数据尺寸和仿射矩阵,基于仿射矩阵确定DEM影像的空间分辨率;基于DEM影像的数据尺寸和空间分辨率,确定DEM影像的数据范围;基于数据范围和虚幻引擎的单位长度,对DEM影像中的像素进行插值,得到影像尺寸与虚幻引擎的单位长度相匹配的DEM影像。
[0104] 具体地,利用空间数据转换库读取遥感图像对应的DEM影像,得到DEM影像以及DEM影像对应的数据尺寸和仿射矩阵,从仿射矩阵中确定DEM影像的空间分辨率,基于仿射矩阵中所存储的空间分辨率和数据尺寸的乘积,得到DEM影像的数据范围,基于DEM影像的数据范围与虚幻引擎的单位长度,对DEM影像中的像素进行插值,得到影像尺寸与虚幻引擎的单位长度相匹配的DEM影像,将插值后的DEM影像的影像长度和影像宽度作为DEM影像的影像尺寸,从而便于虚幻引擎兼容DEM影像并利用DEM影像构建地形,其中,空间分辨率包括DEM影像的像素尺寸,数据尺寸包括单个像素对应的长度。
[0105] 在一具体应用场景中,利用GDAL读取DEM影像,获得DEM影像中存储的数据、数据的最大最小值、数据尺寸、数据格式、仿射矩阵和坐标系统信息,其中,数据尺寸为单个像素对应的长度且单位为米,根据仿射矩阵中所存储的空间分辨率值和数据尺寸计算得出DEM影像的数据范围,即DEM影像的长和宽且单位均为米,根据数据范围和虚幻引擎的单位长度对DEM影像进行插值,以使DEM影像的影像尺寸与虚幻引擎的单位长度相匹配,得到DEM影像的影像尺寸,将DEM影像的影像尺寸存储为16位无符号整型,其中,虚幻引擎的单位长度为一米,在其他应用场景中虚幻引擎的单位长度也可以是其他数值,本申请对此不做具体限制。
[0106] 在一些实施场景中,上述步骤S302具体包括:将影像尺寸对应的影像长度和影像宽度分别与虚幻引擎的影像尺寸阈值求取比值并向上取整,得到影像块对应的横向数量和纵向数量;基于横向数量和纵向数量的乘积,确定DEM影像对应的影像块的数量为第一数值;基于影像尺寸分别与横向数量和纵向数量的比值,确定各个影像块在横向上对应的横向像素数量,以及在纵向上对应的纵向像素数量;其中,各个影像块的影像子尺寸包括各个影像块对应的横向像素数量和纵向像素数量。
[0107] 具体地,DEM影像对应有影像长度和影像宽度,将影像长度与影像尺寸阈值求取比值并向上取整,得到影像块对应的横向数量,将影像宽度与影像尺寸阈值求取比值并向上取整,得到影像块对应的纵向数量,将横向数量与纵向数量相乘得到第一数值,从而确定DEM影像对应的影像块的数量为第一数值,以使DEM影像能够被分成多个影像块,从而在虚幻引擎中能够构建任意尺寸的地形。
[0108] 进一步地,将DEM影像对应的影像长度与横向数量相除,得到影像块在横向上对应的横向像素数量,将DEM影像对应的影像宽度与纵向数量相除,得到地形对象在纵向上对应的纵向像素数量,基于横向像素数量和纵向像素数量确定影像块的影像子尺寸。
[0109] 在一具体应用场景中,影像尺寸阈值基于虚幻引擎中的最大分段像素尺寸、最大分段数和最大组件数确定,将DEM影像对应的影像长度和影像宽度分别除以影像尺寸阈值,得到DEM影像在分割后水平方向上影像块对应的横向数量为num_landscape_x,垂直方向上影像块对应的纵向数量为num_landscape_y。计算num_landscape_x和num_landscape_y的乘积,得到需要创建的地形对象的总数,以使无论任何尺寸的DEM影像能够分割为至少一个影像块,得到DEM影像对应的需要创建的地形对象的数量,记为第一数值,以便在虚幻引擎中能够构建任意尺寸的地形,突破虚幻引擎中构建地形的尺寸限制。
[0110] 进一步地,将DEM影像对应的影像长度与横向数量num_landscape_x相除并向上取整,得到影像块在横向上对应的横向像素数量pixels_per_landscape_x,将DEM影对应的影像宽度与纵向数量num_landscape_y相除并向上取整,得到影像块在纵向上对应的纵向像素数量pixels_per_landscape_y。
[0111] 在一些实施场景中,地形对象的地形尺寸基于分段像素尺寸、分段和组件定义,各个地形对象包括多个组件,各个组件对应组件像素尺寸,组件像素尺寸与组件中分段的数量以及分段像素尺寸相关。
[0112] 进一步地,基于该影像块对应的影像子尺寸,生成与影像块对应的地形尺寸、地形高度和地形坐标,在虚幻引擎的地形坐标处,生成与地形尺寸和地形高度相匹配的地形对象,包括:基于当前的影像块对应的影像子尺寸与组件像素尺寸的比值,确定地形对象中组件的数量,基于地形对象中组件的数量得到地形对象对应的地形尺寸;基于当前的影像块中的高度信息,在地形对象对应的地形尺寸的范围内生成地形对象对应的地形高度;基于当前的影像块中的位置信息,在虚幻引擎中确定地形对象对应的地形坐标。
[0113] 具体地,基于影像块对应的影像子尺寸确定单个地形对象所分到的像素总数,基于单个影像块所分到的像素总数与组件像素尺寸的比值,确定影像块对应的地形对象中组件的数量,利用地形对象中组件的数量与组件像素尺寸相乘得到地形对象对应的地形尺寸,将影像块中的高度信息导入地形对象,在地形对象对应的地形尺寸的范围内生成地形对象对应的地形高度,利用影像块中的位置信息,在虚幻引擎中确定地形对象对应的地形坐标,从而在虚幻引擎中能够将影像块对应的位置信息、高度信息导入至地形对象中,且单个地形对象对应的地形尺寸能够容纳单个地形对象所分到的像素总数,以便遍历所有的地形对象后,能够在虚幻引擎中生成任意尺寸的地形。
[0114] 在一应用场景中,各个组件对应预设数量的分段,分段对应预设像素尺寸,组件像素尺寸基于预设数量和预设像素尺寸的乘积确定。
[0115] 进一步地,基于当前的影像块对应的影像子尺寸与组件像素尺寸的比值,确定地形对象中组件的数量,基于地形对象中组件的数量得到地形对象对应的地形尺寸,包括:基于横向像素数量和纵向像素数量与组件像素尺寸的比值,确定地形对象在横向上的组件对应的第二数值,以及在纵向上的组件对应的第三数值;其中,第二数值和第三数值为向上取整后的结果;基于组件像素尺寸、第二数值和第三数值,确定地形对象在横向上的横向像素尺寸,以及在纵向上的纵向像素尺寸,确定地形对象对应的地形尺寸。
[0116] 具体地,将横向像素数量和纵向像素数量分别与组件像素尺寸相除并向上取整,确定地形对象在横向上的组件对应的第二数值,以及在纵向上的组件对应的第三数值,从而确保地形对象在横向上和纵向上均能够包括足够的组件,能够容纳地形对象在横向上对应的横向像素数量,以及地形对象在纵向上对应的纵向像素数量。
[0117] 进一步地,基于组件像素尺寸分别与第二数值和第三数值的乘积,确定地形对象在横向上的横向像素尺寸,以及地形对象在纵向上的纵向像素尺寸,最终得到地形对象对应的地形尺寸,确保地形尺寸的精度。
[0118] 在一具体应用场景中,分段对应预设像素尺寸QuadsPerSection为255,各个组件内分段的预设数量SectionsPerComponent为2,则组件像素尺寸为QuadsPerComponent为510,计算第二数值ComponentCountX和第三数值ComponentCountY的方法如下:
[0119] ComponentCountX=FMath::CeilToInt(float(pixels_per_landscape_x‑1)/QuadsPerComponent);
[0120] ComponentCountY=FMath::CeilToInt(float(pixels_per_landscape_y‑1)/QuadsPerComponent);
[0121] 进一步地,计算地形对象在横向上的横向像素尺寸FinalSizeX,以及地形对象在纵向上的纵向像素尺寸FinalSizeY的方法如下:
[0122] FinalSizeX=ComponentCountX*QuadsPerComponent+1;
[0123] FinalSizeY=ComponentCountY*QuadsPerComponent+1;
[0124] 需要说明的是,预设像素尺寸QuadsPerSection,以及各个组件内分段的预设数量SectionsPerComponent,在其他具体应用场景中可基于虚幻引擎的阈值限制进行自定义设置,本申请对此不做具体限制。
[0125] 进一步地,请参阅图4,图4是本申请基于虚幻引擎的地形构建方法一实施方式的应用场景示意图,假设DEM影像分成四个影像块,每个影像块分别对应一个地形对象,且横向和纵向上各两个。基于组件像素尺寸、第二数值和第三数值,确定地形对象在横向上的横向像素尺寸,以及在纵向上的纵向像素尺寸,确定地形对象对应的地形尺寸之后,还包括:基于横向像素尺寸、纵向像素尺寸、影像尺寸和第一数值,确定横向像素尺寸对应的横向偏移坐标,以及纵向像素尺寸对应的纵向偏移坐标;在与横向偏移坐标对应的地形对象的边缘至横向偏移坐标之间插值,在与纵向偏移坐标对应的地形对象的边缘至纵向偏移坐标之间插值,得到插值结果;基于插值结果、组件像素尺寸和地形对象在横向上的组件对应的第二数值,以及在纵向上的组件对应的第三数值,生成地形对象在虚幻引擎中的地形。
[0126] 具体地,由于地形对象以及地形对象对应的组件的数量均为向上取整后的结果,每个参数都是2的幂或2的幂减一后获得的值,因此多个地形对象的总和可能与影像尺寸的尺寸不一致,当影像尺寸小于多个地形对象的总和时,基于影像尺寸对应的影像长度、地形对象对应的横向像素尺寸以及第一数值对应的横向数量,确定与影像尺寸对应的实际位置,也就是图4中的阴影位置,进而基于地形对象对应的横向像素尺寸与实际位置的差值,确定横向像素尺寸对应的横向偏移坐标,也就是图4中横向上黑点的位置,该横向偏移坐标的计算方式为:
[0127] bias_x_first=FinalSizeX‑FMath::CeilToInt(float(DemL‑FinalSizeX*(num_landscape_x‑2))/2);
[0128] bias_x_last=DemL‑FinalSizeX*(num_landscape_x‑2)‑(FinalSizeX‑bias_x_first);
[0129] 基于影像尺寸对应的影像宽度、地形对象对应的纵向像素尺寸以及第一数值对应的纵向数量,确定与影像尺寸对应的实际位置,也就是图4中的阴影位置,进而基于地形对象对应的纵向像素尺寸与实际位置的差值,确定纵向像素尺寸对应的纵向偏移坐标,也就是图4中纵向上黑点的位置,该纵向偏移坐标的计算方式为:
[0130] bias_y_first=FinalSizeY‑FMath::CeilToInt(float(DemW‑FinalSizeY*(num_landscape_y‑2))/2);
[0131] bias_y_last=DemW‑FinalSizeY*(num_landscape_y‑2)‑(FinalSizeY‑bias_y_first);
[0132] 其中,横向像素尺寸为FinalSizeX、纵向像素尺寸为FinalSizeY、影像尺寸对应的影像长度为DemL和影像宽度为DemW,第一数值对应的横向数量为num_landscape_x和纵向数量为num_landscape_y。
[0133] 进一步地,在与横向偏移坐标对应的地形对象的边缘至横向偏移坐标之间插值,也就是在图4中横向偏移坐标至虚线的边缘,即图4中横向上白色部分,在与纵向偏移坐标对应的地形对象的边缘至纵向偏移坐标之间插值,也就是在图4中纵向偏移坐标至虚线的边缘,即图4中纵向上白色部分,得到插值结果,以确保每个地形对象对应有数据,其中,插值过程采用补0的方式进行插值。
[0134] 进一步地,基于插值结果、组件像素尺寸和地形对象在横向上的组件对应的第二数值,以及在纵向上的组件对应的第三数值,在虚幻引擎中生成地形对象对应的地形。
[0135] 进一步地,基于当前的影像块中的高度信息,在地形对象对应的地形尺寸的范围内生成地形对象对应的地形高度,包括:在与横向偏移坐标对应的地形对象的边缘至横向偏移坐标之间设置预设高度,在与纵向偏移坐标对应的地形对象的边缘至纵向偏移坐标之间设置预设高度;将当前的影像块中的高度信息索引至横向偏移坐标和纵向偏移坐标包围的区域,在地形对象对应的地形尺寸的范围内生成地形对象对应的地形高度。
[0136] 具体地,在与横向偏移坐标对应的地形对象的边缘至横向偏移坐标之间插值,也就是在图4中横向偏移坐标至虚线的边缘,即图4中横向上白色部分,在与纵向偏移坐标对应的地形对象的边缘至纵向偏移坐标之间插值,也就是在图4中纵向偏移坐标至虚线的边缘,即图4中纵向上白色部分,均设置为预设高度,将影像块中的高度信息索引至横向偏移坐标和纵向偏移坐标包围的区域也就是图4中阴影部分对应的区域,以使地形对象中的高度与影像块的高度信息对应。
[0137] 在一具体应用场景中,生成一个存储高度数据的数据矩阵,ix和iy表示地形对象的横向编号和纵向编号,且均从0开始递增,在ix=0的地形对象中,在bias_x_first的左边给0;在ix=num_landscape_x‑1的地形对象中,在bias_x_last的右边给0;在iy=0的地形对象中,在bias_y_first的上边给0;在iy=num_landscape_y‑1的地形对象中,在bias_y_last的下边给0。其余区域的数值从影像块的高度信息中通过索引关系进行复制,索引关系包括高度索引和数据索引,高度索引index_height包括:index_height=col*FinalSizeX+row;数据索引index_dem包括:index_dem=2*((iy*FinalSizeY+col‑bias_y_first)*DemL+ix*FinalSizeX+row‑bias_x_first);其中col为Y方向索引,row为X方向索引。
[0138] 进一步地,基于当前的影像块中的位置信息,在虚幻引擎中确定地形对象对应的地形坐标,包括:基于当前的影像块中的位置信息确定当前的影像块在地理坐标系中的地理坐标;利用空间数据转换库将当前的影像块对应的地理坐标转换至投影坐标系,得到当前的影像块在投影坐标系中的投影坐标;基于当前的影像块对应的投影坐标和地形尺寸,确定地形对象在投影坐标系中的地形投影坐标,将地形投影坐标转换至引擎全局坐标系中,得到地形对象在引擎全局坐标系中的引擎全局坐标。
[0139] 具体地,基于影像块中的位置信息确定影像块在地理坐标系中的地理坐标,利用空间数据转换库将影像块对应的地理坐标从地理坐标系转换至投影坐标系,得到影像块在投影坐标系中的投影坐标,由于地形对象对应的地形尺寸在边缘进行过插值,基于影像块对应的投影坐标和地形尺寸,确定地形对象在投影坐标系中的地形投影坐标,也就是确定图4中每个地形对象对应的虚线框在投影坐标系中的地形投影坐标,从而提高地形对象对应的投影坐标的精度,将地形投影坐标转换至引擎全局坐标系中,得到地形对象在引擎全局坐标系中的引擎全局坐标,提高地形对象对应的引擎全局坐标对应的精度。
[0140] 在一具体应用场景中,基于插值后的地形对象的左上角对应的投影坐标减去引擎原点对应的原点坐标,得到地形对象对应的引擎全局坐标,其中,ix和iy表示地形对象的横向编号和纵向编号,且均从0开始递增,ix>0的地形对象,x坐标值减1,iy>0的地形对象,y坐标值减1,以使坐标值与上述地形尺寸的计算方式相匹配。
[0141] 可选地,基于影像尺寸与虚幻引擎中的影像尺寸阈值,将DEM影像划分为至少一个影像块,并确定各个影像块的影像子尺寸之前,还包括:获得引擎原点对应的坐标设置属性,当坐标设置属性对应为允许设置时,基于DEM影像中的位置信息重设坐标系统的引擎原点;其中,坐标设置属性包括允许设置和禁止设置。
[0142] 具体地,判断引擎原点的坐标设置属性,若允许设置,则基于DEM影像中的位置信息重设坐标系统的引擎原点,并在重设后将坐标设置属性设置为禁止设置,若禁止设置,则使用现有的引擎原点。进而,在允许设置时能够优先以DEM影像的数据中心为新的引擎原点,从而有效减小DEM影像对应的地形对象的引擎全局坐标的数值,有效减轻虚幻引擎的处理负担并提高计算效率。
[0143] 在一具体应用场景中,位置信息包括DEM影像中的坐标系统信息和数据中心,将数据中心从DEM影像的坐标系统信息转换为地理坐标系中的经纬度值,赋予地理全局对象中的地理位置属性,重设引擎原点。
[0144] 在一些实施场景中,生成与地形尺寸和地形高度相匹配的地形对象之后,还包括:利用虚幻引擎中的地形材质工具,为DEM影像对应的地形设置与地形的斜率相匹配的材质。
[0145] 具体地,在虚幻引擎中使用AutoLandscap地形材质工具进行地形材质生成,藉由地形材质工具根据地形的倾斜度自动设置不同材质,提高地形的逼真度。
[0146] 在一些实施例中,请参阅图5,图5是本申请基于虚幻引擎的地图构建方法一实施方式的流程示意图,获得基于遥感图像得到的栅格数据,将栅格数据导入虚幻引擎,在虚幻引擎中生成与栅格数据对应的地图的过程,具体包括:
[0147] S501:获得基于遥感图像得到的栅格数据,将栅格数据转换成栅格数据矩阵,其中,栅格数据矩阵的栅格矩阵尺寸与栅格数据的数据尺寸相关。
[0148] 具体地,遥感图像是以象元为单位的栅格结构,基于遥感图像即可获得栅格数据,基于栅格数据的数据尺寸将栅格数据转换成栅格数据矩阵,且栅格数据矩阵的栅格矩阵尺寸与栅格数据的数据尺寸相关,以使虚幻引擎能够兼容遥感图像,并将遥感图像转换成虚幻引擎中具有比例尺寸的地图。
[0149] 在一应用方式中,利用空间数据转换库提取遥感图像中的图像信息得到栅格数据,获得栅格数据对应的数据尺寸,基于栅格数据的数据尺寸以及虚幻引擎的单位长度对栅格数据进行插值,得到栅格数据矩阵。
[0150] 在另一应用方式中,利用空间数据转换库读取遥感图像,得到栅格数据以及栅格数据对应的数据尺寸,利用数据尺寸计算得到栅格数据的数据范围,基于栅格数据的数据范围对栅格数据进行插值,得到栅格数据矩阵,以使栅格数据矩阵的栅格矩阵尺寸与虚幻引擎的单位长度相匹配。
[0151] S502:基于栅格数据矩阵的栅格矩阵尺寸,生成与栅格数据对应的地图网格体。
[0152] 具体地,创建一个与栅格数据矩阵的栅格矩阵尺寸相匹配的网格体,在虚幻引擎中生成与栅格数据对应的地图网格体。
[0153] 在一应用方式中,栅格矩阵尺寸包括矩阵长度和矩阵宽度,生成一个与栅格数据矩阵的矩阵长度和矩阵宽度相匹配的网格体,确定该网格体的网格顶点、三角网格索引、纹理坐标和法线,利用程序化建模函数基于网格体对应的网格顶点、三角网格索引、纹理坐标和法线进行建模,在虚幻引擎中生成与栅格数据对应的地图网格体。
[0154] 在另一应用方式中,在虚幻引擎中创建一个地图对象,其中,地图对象包括网格属性,栅格矩阵尺寸包括矩阵长度和矩阵宽度,生成一个与栅格数据矩阵的矩阵长度和矩阵宽度相匹配的网格体,确定该网格体的网格顶点、三角网格索引、纹理坐标和法线,将网格体的网格顶点、三角网格索引、纹理坐标和法线存储至网格属性中,在虚幻引擎中利用程序化建模函数调用网格属性,生成与栅格数据对应的地图网格体。
[0155] 在一应用场景中,在虚幻引擎中生成一个与栅格数据矩阵的矩阵长度和矩阵宽度相同的矩形网格体,基于栅格数据对应的坐标信息在虚幻引擎中定位矩形网格体的网格顶点,对矩形网格体进行三角剖分得到三角网格索引,基于网格顶点的位置确定网格顶点对应的纹理坐标和法线。在其他应用场景中,也可对栅格数据矩阵进行缩放。
[0156] S503:将栅格数据转换成地图网格体的纹理,在虚幻引擎中生成与栅格数据对应的地图。
[0157] 具体地,将栅格数据转换为地图网格体的纹理,使得遥感图像作为地图网格体的纹理资产,从而在虚幻引擎中生成与栅格数据对应的地图,以使遥感图像在虚幻引擎中既可以作为一种地图,展示整个地区的全貌,也可以作为虚幻引擎内进行建模的标尺和参照物,提高虚幻模型中建模的精度。
[0158] 在一应用方式中,在虚幻引擎中基于栅格数据的数据特征,生成地图网格体对应的纹理,将纹理赋予地图网格体,生成与栅格数据对应的地图。其中,数据特征与栅格数据对应的遥感图像相关。
[0159] 在另一应用方式中,在虚幻引擎中创建纹理指针变量,将栅格数据对应的数据特征存储至纹理指针变量中,以使栅格数据转换成地图网格体的纹理,生成与栅格数据对应的地图,其中,数据特征与栅格数据对应的遥感图像相关。
[0160] 可选地,当遥感图像对应的图像尺寸超过虚幻引擎的最大像素尺寸时,将遥感图像缩小至小于或等于虚幻引擎的最大像素尺寸,从而将缩小后的遥感图像对应的栅格数据转换为地图网格体的纹理。
[0161] 在本实施例中,获得基于遥感图像得到的栅格数据,将栅格数据转换成栅格数据矩阵,且栅格数据矩阵的栅格矩阵尺寸与栅格数据的数据尺寸相关,以便将栅格矩阵尺寸与栅格数据的数据尺寸相匹配,基于栅格数据矩阵的栅格矩阵尺寸,生成与栅格数据对应的地图网格体,将栅格数据转换成地图网格体的纹理,在虚幻引擎中生成与栅格数据对应的地图,以使遥感图像在虚幻引擎中既可以作为一种地图,展示整个地区的全貌,也可以作为虚幻引擎内进行建模的标尺和参照物,提高虚幻引擎中建模的精度。
[0162] 在一些实施场景中,上述步骤S501具体包括:利用空间数据转换库读取遥感图像,得到栅格数据及其对应的数据尺寸、仿射矩阵和坐标信息,基于仿射矩阵确定栅格数据的空间分辨率;基于栅格数据的数据尺寸、空间分辨率和坐标信息,确定栅格数据的数据范围;基于数据范围和虚幻引擎的单位长度,对栅格数据进行插值,得到栅格数据对应的栅格数据矩阵;其中,栅格数据矩阵的栅格矩阵尺寸与虚幻引擎的单位长度相匹配。
[0163] 具体地,利用空间数据转换库读取遥感图像,从遥感图像中得到栅格数据及其对应的数据尺寸、仿射矩阵和坐标信息,基于仿射矩阵中所存储的空间分辨率和数据尺寸的乘积,得到栅格数据的数据范围并基于坐标信息定位数据范围的位置,基于栅格数据的数据范围与虚幻引擎的单位长度,对栅格数据进行插值,确定栅格数据矩阵的矩阵长度和矩阵宽度,以使栅格数据的栅格矩阵尺寸与虚幻引擎的单位长度相匹配,从而便于虚幻引擎兼容栅格数据并利用栅格数据构建地图,其中,空间分辨率包括栅格数据的像素尺寸,数据尺寸包括单个像素对应的长度。
[0164] 在一具体应用场景中,利用GDAL读取栅格数据,获得栅格数据中存储的数据、数据尺寸、仿射矩阵和坐标信息,其中,数据尺寸为单个像素对应的长度且单位为米,基于仿射矩阵中所存储的空间分辨率值和数据尺寸以及坐标信息,定位栅格数据的位置并确定栅格数据的数据范围,即栅格数据的长和宽且单位均为米,基于数据范围和虚幻引擎的单位长度对栅格数据进行插值,以使栅格数据的栅格矩阵尺寸与虚幻引擎的单位长度相匹配,得到栅格数据矩阵,将栅格数据矩阵存储为16位无符号整型,其中,虚幻引擎的单位长度为一米,在其他应用场景中虚幻引擎的单位长度也可以是其他数值,本申请对此不做具体限制。
[0165] 进一步地,将栅格数据转换成地图网格体的纹理,在虚幻引擎中生成与栅格数据对应的地图之前,还包括:基于坐标信息和仿射矩阵的预设角部,确定栅格数据在地理坐标系中的地理坐标;利用空间数据转换库将栅格数据对应的地理坐标转换至投影坐标系,得到栅格数据在投影坐标系中的投影坐标;将栅格数据对应的投影坐标转换至引擎全局坐标系中,得到栅格数据对应的地图网格体在引擎全局坐标系中的引擎全局坐标。
[0166] 具体地,虚幻引擎对应有坐标系统,基于坐标信息和仿射矩阵的预设角部,确定仿射矩阵的预设角部在地理坐标系中的地理坐标,将仿射矩阵的预设角部在地理坐标系中的地理坐标,作为栅格数据在地理坐标系中的坐标,将地理坐标转换至投影坐标系中,得到栅格数据在投影坐标系中的投影坐标,将栅格数据对应的投影坐标转换至引擎全局坐标系中,得到栅格数据对应的地图网格体在引擎全局坐标系中的引擎全局坐标,以便地图网格体与现实世界中的位置相匹配。
[0167] 在一具体应用场景中,预设角部为仿射矩阵的左上角,基于坐标信息和仿射矩阵的矩阵尺寸,确定仿射矩阵的左上角在地理坐标系中的地理坐标,其中,地理坐标基于经纬度确定,将左上角在地理坐标系中的地理坐标转换至投影坐标系中,得到仿射矩阵的左上角的投影坐标,将仿射矩阵的左上角的投影坐标减去引擎原点的原点坐标,得到仿射矩阵的左上角的引擎全局坐标,其中,引擎全局坐标中横坐标对应仿射矩阵的左上角的经度,引擎全局坐标中纵坐标对应仿射矩阵的左上角的纬度,竖坐标赋值为0。在其他具体应用场景中,预设角部也可以是仿射矩阵的其他角部,本申请对此不做具体限制。
[0168] 在一些实施场景中,上述步骤S502具体包括:在虚幻引擎中生成一个与栅格数据对应的地图对象;其中,地图对象包括位置属性、网格属性、材质属性和影像地址属性;其中,位置属性用于存储坐标信息,网格属性用于存储地图对象对应的地图网格体,材质属性用于存储地图网格体的材质,影像地址属性用于存储遥感图像的地址索引;将遥感图像对应的地址索引存储至地图对象的影像地址属性中;基于栅格数据矩阵的栅格矩阵尺寸,在虚幻引擎中生成地图对象对应的网格顶点集合;其中,网格顶点集合中包括多个网格顶点;基于网格顶点集合,生成与地图对象对应的地图网格体。
[0169] 具体地,在虚幻引擎中生成一个与栅格数据相匹配的地图对象ALayerActor,该地图对象ALayerActor继承于虚幻引擎的基类对象AActor地图对象包括位置属性、网格属性、材质属性和影像地址属性,其中,位置属性可以便于存储坐标信息,网格属性可以便于存储地图对象对应的地图网格体,材质属性可以便于存储地图网格体的材质,影像地址属性便于存储遥感图像的地址索引,遍历遥感图像对应的地址索引,将遥感图像对应的地址索引存储至地图对象的影像地址属性中,以便于查找遥感图像。
[0170] 进一步地,在虚幻引擎中基于栅格数据的栅格矩阵尺寸,生成一个与栅格矩阵尺寸相匹配的网格体,确定网格体的顶点得到网格体顶点集合,其中,网格顶点集合中包括多个网格顶点,基于网格顶点集合,确定网格顶点集合对应的三角网格索引、以及网格顶点集合中每个网格顶点对应的纹理坐标和法线,利用程序化建模生成网格顶点集合对应的地图网格体,从而在虚幻引擎中构建地图对应的基础框架,以便在虚幻引擎中生成地图。
[0171] 在一应用场景中,网格顶点集合中包括至少四个网格顶点,基于网格顶点集合,生成与地图对象对应的地图网格体,包括:基于网格顶点集合中所有网格顶点的位置,确定网格顶点集合对应的多个三角网格索引;基于网格顶点集合中的任一网格顶点的位置相对其他网格顶点的位置,确定网格顶点集合对应的纹理坐标;基于所有三角网格索引中三个网格顶点的位置,确定所有三角网格索引中各个网格顶点对应的法线;在虚幻引擎中,基于所有三角网格索引和各个网格顶点对应的法线和纹理坐标,生成与地图对象对应的地图网格体。
[0172] 具体地,基于栅格数据矩阵构建的网格体为矩形或其他多边形,网格顶点集合中包括至少四个网格顶点,为便于说明,以网格体为正方形为例,栅格数据矩阵对应的高为h,宽为w,且h=w,该栅格数据矩阵对应的网格体的所有网格顶点,分别为(0,0,0)、(0,h,0)、(w,h,0)和(w,0,0)。网格体对应的网格顶点的编号为0、1、2和3,生成网格体的三角网格索引分别为0、1、2和2、3、0,以便基于三角网格索引来生成网格体,生成纹理坐标分别为(0,0)、(0,1)、(1,1)、(1,0),以便于进行纹理贴图,计算每个顶点对应的法线,以便于确定每个顶点对应的光照方向,输入上述步骤中生成的顶点、三角网格索引、纹理坐标和法线,使用虚幻引擎的程序化建模函数生成地图网格体。
[0173] 在一具体应用场景中,基于所有三角网格索引中三个网格顶点的位置,确定所有三角网格索引中各个网格顶点对应的法线,包括:基于各个三角网格索引中三个网格顶点对应的位置,将各个三角网格索引中的任一网格顶点与其他两个网格顶点之间的两个向量叉乘,并对叉乘结果归一化处理,得到所有网格顶点对应的法线。
[0174] 具体地,计算三角网格索引中每个网格顶点的法线,法线的计算方式为在该网格顶点所在的三角面上由该网格顶点与另外两个网格顶点组成的两个向量的叉乘,并对叉乘结果进行归一化处理,得到该网格顶点,以获得准确的法线位置。
[0175] 在一些实施场景中,上述步骤S503具体包括:在虚幻引擎中创建纹理指针变量,将栅格数据对应的数据特征存储至纹理指针变量中,以使栅格数据转换成地图网格体的纹理,生成与栅格数据对应的地图;其中,数据特征与栅格数据对应的遥感图像相关。
[0176] 具体地,在虚幻引擎中创建纹理指针变量,将栅格数据对应的数据特征存储至纹理指针变量中,从而在虚幻引擎中将栅格数据转换成地图网格体的纹理,利用纹理为地图网格体贴图,生成与栅格数据对应的地图,其中,数据特征与栅格数据对应的遥感图像直接相关,以使遥感图像在虚幻引擎中既可以作为一种地图,展示整个地区的全貌,也可以作为虚幻引擎内进行建模的标尺和参照物,提高虚幻引擎中建模的精度。
[0177] 进一步地,将栅格数据转换成地图网格体的纹理,在虚幻引擎中生成与栅格数据对应的地图之后,还包括:在虚幻引擎中创建材质指针变量,在材质指针变量中为地图网格体生成与纹理相匹配的材质,得到地图网格体的材质。
[0178] 具体地,在虚幻引擎中创建材质指针变量,为地图网格体生成与纹理相匹配的材质并存储在材质指针变量中,得到地图网格体的材质。
[0179] 在一具体应用场景中,在虚幻引擎中创建UPackage类型的指针变量TextPackage用于存储纹理资产,在TextPackage中新建UTexture2D类型的指针变量NewTexture用于存储纹理数据,将遥感影像的大小、通道、类型信息赋给NewTexture的PlatformData变量,在虚幻引擎中创建FTexture2DMipMap类型的指针变量Mip,将遥感影像的RGBA值写入Mip的BulkData中,若遥感影像的像素尺寸大于虚幻引擎中的最大纹理尺寸,需要将遥感图像的像素尺寸缩放至小于或等于最大纹理尺寸,将该Mip赋给NewTexture的PlatformData的Mips,进而存储该纹理资产TextPackage,得到地图网格体的纹理资产。
[0180] 进一步地,创建UPackage类型的指针变量Package用于存储材质资产,在Package中新建UMaterial类型的指针变量UnrealMaterial用于存储材质数据;生成一个UMaterialExpressionTextureSample类型的材质节点,将纹理资产导入后赋给该节点的Texture变量;将材质节点赋给UnrealMaterial的BaseColor的Expression变量;保存该材质资产;将该材质资产通过SetMaterial函数赋给地图网格体。
[0181] 在一些实施例中,请参阅图6,图6是本申请基于虚幻引擎的平面构建方法一实施方式的流程示意图,获得基于遥感图像得到的矢量数据,将矢量数据中的矢量线或矢量面导入虚幻引擎,在虚幻引擎中生成与矢量数据对应的平面的过程,具体包括:
[0182] S601:获得基于遥感图像得到的矢量数据,将矢量数据中的矢量线和矢量面读取出来。
[0183] 具体地,遥感图像是以象元为单位的栅格结构,对遥感图像中的栅格结构进行矢量提取即可获得矢量数据,将矢量数据中的矢量线和矢量面读取出来,以使虚幻引擎能够兼容遥感图像并得到矢量线和矢量面。
[0184] 在一应用方式中,利用空间数据转换库读取遥感图像,确定遥感图像的栅格结构,对遥感图像中的栅格结构进行矢量提取得到矢量数据,基于矢量数据中矢量线对应的数据属性,从矢量数据中提取矢量线,基于矢量数据中矢量面对应的数据属性,从矢量数据中提取矢量面。
[0185] 在另一应用方式中,利用空间数据转换库读取遥感图像对应的Shapefile或GeoJson格式的矢量文件,从矢量文件中提取矢量数据中的矢量线和矢量面。
[0186] S602:在虚幻引擎中生成一个平面对象。
[0187] 具体地,在虚幻引擎中生成一个平面对象,其中,平面对象用于对应矢量线或者矢量面,且与平面对象对应的矢量面不包括高度特征。
[0188] 在一应用方式中,在虚幻引擎中创建一个继承于地理全局对象的平面对象。
[0189] 在另一应用方式中,在虚幻引擎中创建一个继承于虚幻引擎的基类的平面对象。
[0190] S603:响应于平面对象对应矢量线,将矢量线中的所有轮廓点添加至平面对象中,得到平面对象中的第一原始顶点,对平面对象中的第一原始顶点进行宽度拓展,得到新增顶点,基于第一原始顶点和新增顶点,得到与矢量线对应的平面网格体。
[0191] 具体地,当平面对象对应的是矢量线,将从矢量线中得到的所有轮廓点添加至平面对象中,得到平面对象的第一原始顶点,从而将矢量线上的轮廓点导入至平面对象中,将轮廓点作为平面对象的第一原始顶点。
[0192] 进一步地,平面对象中的第一原始顶点本身不够成面,对平面对象中的第一原始顶点进行宽度拓展,生成第一原始顶点对应的新增顶点,从而能够将第一原始顶点和新增顶点共同构成平面。
[0193] 在一应用方式中,基于平面对象中第一原始顶点的位置,确定每两个相邻的第一原始顶点之间的连线,在垂直于相邻的第一原始顶点之间的连线的方向上进行宽度拓展,得到每个第一原始顶点对应的两个新增顶点。
[0194] 在另一应用方式中,基于平面对象中第一原始顶点的位置,确定平面对象中所有第一原始顶点依次相连的连接线,在虚幻引擎中生成一条平行于连接线的复刻连接线,得到每个第一原始顶点对应的至少一个新增顶点。
[0195] 进一步地,在虚幻引擎中基于第一原始顶点和新增顶点,生成与矢量线对应的平面网格体。
[0196] 在一应用方式中,基于第一原始顶点和新增顶点在虚幻引擎中的位置,生成一个与平面对象相匹配的网格体,确定该网格体的网格顶点、三角网格索引、纹理坐标和法线,利用程序化建模函数基于网格体对应的网格顶点、三角网格索引、纹理坐标和法线进行建模,在虚幻引擎中生成与矢量线对应的平面网格体。
[0197] 在另一应用方式中,平面对象包括网格属性,基于第一原始顶点和新增顶点在虚幻引擎中的位置,生成一个与平面对象相匹配的网格体,确定该网格体的网格顶点、三角网格索引、纹理坐标和法线,将网格体的网格顶点、三角网格索引、纹理坐标和法线存储至网格属性中,在虚幻引擎中利用程序化建模函数调用网格属性,生成与矢量线对应的平面网格体。
[0198] S604:响应于平面对象对应矢量面,将矢量面中的所有轮廓点添加至平面对象中,得到平面对象中的第二原始顶点,基于第二原始顶点得到与矢量面对应的平面网格体。
[0199] 具体地,当平面对象对应的是矢量面,矢量面不包括高度特征,将从矢量面中得到的所有轮廓点添加至平面对象中,得到平面对象的第二原始顶点,从而将矢量面上的轮廓点导入至平面对象中,将轮廓点作为平面对象的第二原始顶点。在一应用方式中,基于第二原始顶点在虚幻引擎中的位置,生成一个与平面对象相匹配的网格体,确定该网格体的网格顶点、三角网格索引、纹理坐标和法线,利用程序化建模函数基于网格体对应的网格顶点、三角网格索引、纹理坐标和法线进行建模,在虚幻引擎中生成与矢量面对应的平面网格体。
[0200] 在另一应用方式中,平面对象包括网格属性,基于第二原始顶点在虚幻引擎中的位置,生成一个与平面对象相匹配的网格体,确定该网格体的网格顶点、三角网格索引、纹理坐标和法线,将网格体的网格顶点、三角网格索引、纹理坐标和法线存储至网格属性中,在虚幻引擎中利用程序化建模函数调用网格属性,生成与矢量面对应的平面网格体。
[0201] S605:为矢量线或矢量面对应的平面网格体指定材质,在虚幻引擎中生成与矢量数据对应的平面。
[0202] 具体地,平面网格体对应的材质与矢量线或矢量面在现实世界对应的实体目标相关,为平面网格体指定材质,在虚幻引擎中生成与矢量数据对应的平面。
[0203] 在一应用场景中,矢量线对应现实世界的道路,为平面网格体指定与道路相关的材质,在虚幻引擎中生成与矢量线对应的平面,从而在虚幻引擎中生成虚拟的道路所对应的平面。
[0204] 在另一应用场景中,矢量面对应现实世界的运河,为平面网格体指定与河流相关的材质,在虚幻引擎中生成与矢量面对应的平面,从而在虚幻引擎中生成虚拟的河流所对应的平面。
[0205] 在本实施例中,获得基于遥感图像得到的矢量数据,将矢量数据中的矢量线和矢量面读取出来,在虚幻引擎中生成一个平面对象,将矢量线上的轮廓点添加至平面对象中,将轮廓点作为平面对象的第一原始顶点,对第一原始顶点进行宽度拓展,从而能够将第一原始顶点和新增顶点共同构成平面,在虚幻引擎中基于第一原始顶点和新增顶点,生成矢量线对应的平面网格体,或者,将矢量面上的轮廓点添加至平面对象中,将轮廓点作为平面对象的第二原始顶点,在虚幻引擎中基于第二原始顶点,生成矢量面对应的平面网格体,为平面网格体指定材质,从而能够在虚幻引擎中便捷地生成与现实世界相对应的平面,提高在虚幻引擎中构建平面的便捷度。
[0206] 在一些实施场景中,上述步骤S601具体包括:利用空间数据转换库读取遥感图像,得到矢量数据及其对应的数据属性;其中,数据属性包括面数据属性和线数据属性;基于矢量数据的数据属性,从矢量数据中读取出与线数据属性对应的矢量线,以及与面数据属性对应的矢量面。
[0207] 具体地,利用空间数据转换库读取遥感图像,从遥感图像中得到矢量数据对应的矢量文件,并确定矢量数据对应的数据属性,其中,数据属性包括面数据属性和线数据属性,每个矢量文件可存储多个图层,每个图层中可存储多个特征,针对每个特征分别确定特征对应的数据属性,将矢量数据中对应有线数据属性的矢量读取出来,得到与线数据属性对应的矢量线,将矢量数据中对应有面数据属性的矢量读取出来,得到与面数据属性对应的矢量面,且此处的矢量面未对应有高度特征,也就是用于构建平面的矢量面在现实世界对应为一个平面。
[0208] 在一具体应用场景中,利用GDAL读取遥感图像,获得遥感图像对应的矢量数据组成的矢量文件,其中,矢量文件的格式包括但不限于Shapefile和GeoJson格式,从矢量文件中提取出矢量数据中的矢量线,以使虚幻引擎能够兼容遥感图像,并基于遥感图像对应的矢量数据得到矢量线从而构建平面。
[0209] 在一些实施场景中,虚幻引擎对应有坐标系统和地理全局对象,坐标系统包括地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标,地理全局对象包括引擎原点以及坐标系统中任意两种坐标系之间的转换关系;其中,地理坐标系和投影坐标系与全球定位系统相关,引擎全局坐标系用于定位虚幻引擎中的任一对象,引擎原点在投影坐标系中对应有原点坐标,引擎全局坐标系中的引擎全局坐标基于投影坐标系中的投影坐标减去原点坐标后获得,引擎局部坐标系中的引擎局部坐标基于当前对象上的顶点相对当前对象的引擎全局坐标的偏移值确定;第一原始顶点、新增顶点和第二原始顶点,在虚幻引擎中包括在引擎局部坐标系中的引擎局部坐标。
[0210] 具体地,第一原始顶点和新增顶点对应为三角网格索引中的网格顶点,第二原始顶点对应为三角网格索引中的网格顶点,网格顶点最终生成平面网格体,因此,当第一原始顶点、新增顶点和第二原始顶点对应有引擎局部坐标,能够有效降低调用网格顶点的位置时的计算负载,提高与网格顶点相关的步骤的执行效率。
[0211] 在一实施场景中,基于第一原始顶点和新增顶点,得到与矢量线对应的平面网格体,具体包括:基于第一原始顶点和新增顶点对应的引擎局部坐标进行三角剖分,得到平面对象对应的多个三角网格索引,将各个三角网格索引中的顶点按平面指定方向存储;其中,各个三角网格索引包括三个网格顶点,网格顶点与第一原始顶点和新增顶点对应;基于各个网格顶点在虚幻引擎中的位置,确定所有三角网格索引中各个网格顶点对应的法线,以及各个网格顶点对应的纹理坐标;在虚幻引擎中,基于所有三角网格索引和各个网格顶点对应的法线和纹理坐标,生成与矢量线对应的平面网格体。
[0212] 具体地,基于第一原始顶点和新增顶点对应的引擎局部坐标,确定第一原始顶点和新增顶点所能连成的平面,对基于第一原始顶点和新增顶点形成的平面进行三角剖分,得到平面对象对应的多个三角网格索引,将各个三角网格索引中的顶点按平面指定方向存储,其中,平面指定方向包括朝向引擎全局坐标的z轴正方向顺时针存储,也就是在虚幻引擎中自上而下的位置上观察室顺时针存储,每个三角网格索引对应有三个网格顶点,网格顶点与第一原始顶点和新增顶点对应,也就是每个三角网格索引中包括第一原始顶点和/或新增顶点,基于每个网格顶点的位置生成网格顶点的纹理坐标,以便于进行纹理贴图,基于每个网格顶点的位置计算每个网格顶点对应的法线,以便于确定每个网格顶点对应的光照方向,输入上述步骤中生成的网格顶点、三角网格索引、纹理坐标和法线,使用虚幻引擎的程序化建模函数生成与矢量线对应的平面网格体。
[0213] 在另一实施场景中,基于第二原始顶点得到与矢量面对应的平面网格体,具体包括:基于第二原始顶点对应的引擎局部坐标进行三角剖分,得到平面对象对应的多个三角网格索引,将各个三角网格索引中的顶点按平面指定方向存储;其中,各个三角网格索引包括三个网格顶点,网格顶点与第二原始顶点对应;基于各个网格顶点在虚幻引擎中的位置,确定所有三角网格索引中各个网格顶点对应的法线,以及各个网格顶点对应的纹理坐标;在虚幻引擎中,基于所有三角网格索引和各个网格顶点对应的法线和纹理坐标,生成与矢量面对应的平面网格体。
[0214] 具体地,基于第二原始顶点对应的引擎局部坐标,确定第二原始顶点所能连成的平面,对基于第二原始顶点形成的平面进行三角剖分,得到平面对象对应的多个三角网格索引,将各个三角网格索引中的顶点按平面指定方向存储,其中,平面指定方向包括朝向引擎全局坐标的z轴正方向顺时针存储,也就是在虚幻引擎中自上而下的位置上观察室顺时针存储,每个三角网格索引对应有三个网格顶点,网格顶点与第二原始顶点对应,也就是每个三角网格索引中包括第二原始顶点,基于每个网格顶点的位置生成网格顶点的纹理坐标,以便于进行纹理贴图,基于每个网格顶点的位置计算每个网格顶点对应的法线,以便于确定每个网格顶点对应的光照方向,输入上述步骤中生成的网格顶点、三角网格索引、纹理坐标和法线,使用虚幻引擎的程序化建模函数生成与矢量面对应的平面网格体。
[0215] 进一步,对于上述任意一种实施场景,基于各个网格顶点在虚幻引擎中的位置,确定所有三角网格索引中各个网格顶点对应的法线,以及各个网格顶点对应的纹理坐标,包括:基于各个三角网格索引中三个网格顶点对应的引擎局部坐标,将各个三角网格索引中的任一网格顶点与其他两个网格顶点之间的两个向量叉乘,并对叉乘结果归一化处理,得到所有网格顶点对应的法线;将各个网格顶点对应的引擎局部坐标缩放至纹理坐标范围,得到各个网格顶点对应的纹理坐标。
[0216] 具体地,计算三角网格索引中每个网格顶点的法线,法线的计算方式为在该网格顶点所在的三角面上由该网格顶点与另外两个网格顶点组成的两个向量的叉乘,并对叉乘结果进行归一化处理,得到该网格顶点,以获得准确的法线位置。
[0217] 进一步地,将各个网格顶点对应的引擎局部坐标缩放至纹理坐标范围内,得到各个网格顶点对应的纹理坐标,以便于对平面网格体进行贴图。
[0218] 在一具体实施场景中,将各个网格顶点对应的引擎局部坐标缩放至纹理坐标范围,得到各个网格顶点对应的纹理坐标,包括:将各个网格顶点对应的引擎局部坐标的横向坐标和纵向坐标分别进行缩放处理,得到各个网格顶点对应的纹理坐标的横向分量和纵向分量,确定所有网格顶点对应的纹理坐标。
[0219] 具体地,将所有网格顶点对应的引擎局部坐标中的横向坐标和纵向坐标分别除以缩放参数,得到各个网格顶点对应的纹理坐标的横向分量和纵向分量,以使横向分量和纵向分量缩放至纹理坐标范围,得到所有网格顶点对应的纹理坐标,以便于对平面网格体进行贴图。
[0220] 在一具体应用场景中,所有顶点纹理坐标UV值中横向分量U为网格顶点中的引擎局部坐标的横向坐标除以100,纵向分量V为网格顶点中的引擎局部坐标的纵向坐标除以100。其中,本应用场景中的缩放参数为100,在其他应用场景中缩放参数可基于网格顶点的引擎局部坐标进行定义,将纹理坐标的横向分量和纵向分量缩放至0‑1。
[0221] 可选地,在虚幻引擎中生成一个平面对象,具体包括:在虚幻引擎中生成一个继承于地理全局对象的平面对象;其中,平面对象包括顶点属性、网格属性和材质属性;其中,顶点属性用于存储矢量线或矢量面上的轮廓点,网格属性用于存储矢量线或矢量面对应的平面网格体,材质属性用于存储平面网格体的材质。
[0222] 具体地,虚幻引擎包括坐标系统和地理全局对象AGeoActor,在虚幻引擎中生成一个继承于地理全局对象的平面对象APolylineActor,其中,平面对象包括顶点属性、网格属性和材质属性。其中,顶点属性用于存储矢量线或矢量面上的轮廓点,网格属性用于存储矢量线或矢量面对应的平面网格体,材质属性用于存储平面网格体的材质,为轮廓点、平面网格体和材质提供相应的存储空间。
[0223] 进一步地,将矢量线中的所有轮廓点添加至平面对象中,得到平面对象中的第一原始顶点,包括:将矢量线上的所有轮廓点对应的位置转换至地理坐标系中,并将矢量线上的所有轮廓点对应的地理坐标存储至顶点属性,得到平面对象中的第一原始顶点。
[0224] 具体地,将矢量线上的所有轮廓点对应的位置转换至地理坐标系中,并将矢量线上的所有轮廓点对应的地理坐标存储至顶点属性,从而将矢量线上的轮廓点作为平面对象中的第一原始顶点,且轮廓点对应的地理坐标存储在顶点属性中以便调用。
[0225] 可以理解的是,将矢量面中的所有轮廓点添加至平面对象中,得到平面对象中的第二原始顶点,包括:将矢量面上的所有轮廓点对应的位置转换至地理坐标系中,并将矢量面上的所有轮廓点对应的地理坐标存储至顶点属性,得到平面对象中的第二原始顶点。
[0226] 具体地,将矢量面上的所有轮廓点对应的位置转换至地理坐标系中,并将矢量面上的所有轮廓点对应的地理坐标存储至顶点属性,从而将矢量面上的轮廓点作为平面对象中的第二原始顶点,且轮廓点对应的地理坐标存储在顶点属性中以便调用。
[0227] 在一应用场景中,对平面对象中的第一原始顶点进行宽度拓展,得到新增顶点,包括:利用空间数据转换库,将平面对象中所有第一原始顶点的地理坐标转换至投影坐标系中,并将投影坐标系中的投影坐标转换至引擎全局坐标系中,将引擎全局坐标系中的引擎全局坐标转换至引擎局部坐标系中,确定第一原始顶点在引擎局部坐标系中的引擎局部坐标;将平面对象中的其中一个第一原始顶点在引擎全局坐标系中的引擎全局坐标,作为平面对象在虚幻引擎中的位置;基于平面对象中所有第一原始顶点在引擎局部坐标系中的引擎局部坐标,在与相邻的第一原始顶点之间的连线垂直的方向上,对平面对象中的第一原始顶点进行宽度拓展,得到新增顶点;其中,第一原始顶点与新增顶点之间拓展的宽度与矢量线的线宽属性相关;基于第一原始顶点在引擎局部坐标系中的引擎局部坐标,确定各个第一原始顶点对应的新增顶点在引擎局部坐标系中的引擎局部坐标。
[0228] 具体地,通过调用顶点属性中存储的地理坐标即可获得第一原始顶点对应的地理坐标,将地理坐标转换至投影坐标系再转换至引擎全局坐标系中,将其中一个第一原始顶点对应的引擎全局坐标作为平面对象在虚幻引擎中的位置,从而将平面对象与矢量线在现实世界的位置相匹配,将第一原始顶点的引擎全局坐标转换至引擎局部坐标系中,得到第一原始顶点对应的引擎局部坐标,在与相邻的第一原始顶点之间的连线相垂直的方向上,对第一原始顶点按与线宽属性的宽度向外拓展,得到新增顶点,从而将矢量线拓展为平面,以适用于诸如道路、运河等实体目标对应的矢量线在虚幻模型中进行建模。其中,矢量线中存储的线宽属性与矢量线对应的实体目标相关。
[0229] 进一步地,对平面对象中的第一原始顶点进行宽度拓展,得到新增顶点之后,还包括:基于第一原始顶点在引擎局部坐标系中的引擎局部坐标,确定各个第一原始顶点对应的新增顶点在引擎局部坐标系中的引擎局部坐标。
[0230] 具体地,基于第一原始顶点对应的引擎局部坐标,确定各个第一原始顶点对应的新增顶点在引擎局部坐标系中的引擎局部坐标。其中,各个第一原始顶点和新增顶点按平面指定方向存储,以便于定位新增顶点的位置,并将第一原始顶点和新增顶点显示。
[0231] 可选地,获得基于遥感图像得到的矢量数据,将矢量数据中的矢量线读取出来之前,还包括:获得引擎原点对应的坐标设置属性,当坐标设置属性对应为允许设置时,确定矢量数据中的位置信息,基于位置信息重设坐标系统的引擎原点;其中,坐标设置属性包括允许设置和禁止设置。
[0232] 具体地,判断引擎原点的坐标设置属性,若允许设置,则基于矢量数据中的位置信息重设坐标系统的引擎原点,并在重设后将坐标设置属性设置为禁止设置,若禁止设置,则使用现有的引擎原点。进而,在允许设置时能够优先基于矢量数据对应的位置信息设置新的引擎原点,从而有效减小矢量数据对应的平立体对象的引擎全局坐标的数值,有效减轻虚幻引擎的处理负担并提高计算效率。
[0233] 在一些实施例中,请参阅图7,图7是本申请基于虚幻引擎的立体构建方法一实施方式的流程示意图,获得基于遥感图像得到的矢量数据,将矢量数据中的矢量面导入虚幻引擎,在虚幻引擎中生成与矢量数据对应的立体的过程,具体包括:
[0234] S701:获得基于遥感图像得到的矢量数据,将矢量数据中的矢量面读取出来,并确定矢量面的高度特征。
[0235] 具体地,遥感图像是以象元为单位的栅格结构,对遥感图像中的栅格结构进行矢量提取即可获得矢量数据,将矢量数据中的矢量面读取出来,并确定矢量面的高度特征,以使虚幻引擎能够兼容遥感图像并得到矢量面。
[0236] 在一应用方式中,利用空间数据转换库读取遥感图像,确定遥感图像的栅格结构,对遥感图像中的栅格结构进行矢量提取得到矢量数据,基于矢量数据中矢量面对应的数据属性,从矢量数据中提取矢量面,并基于矢量面对应的属性字段,确定矢量面的高度特征,其中,属性字段用于存储矢量面对应的实体目标的高度特征。
[0237] 在另一应用方式中,利用空间数据转换库读取遥感图像对应的Shapefile或GeoJson格式的矢量文件,从矢量文件中提取矢量数据中的矢量面,并基于矢量面对应的属性字段,确定矢量面的高度特征,其中,属性字段用于存储矢量面对应的实体目标的高度特征。
[0238] S702:在虚幻引擎中生成一个立体对象,将矢量面中的所有轮廓点添加至立体对象中,得到立体对象中的平面顶点。
[0239] 具体地,在虚幻引擎中生成一个立体对象,将从矢量面中得到的所有轮廓点添加至立体对象中,得到立体对象的平面顶点,从而将矢量面上的轮廓点导入至立体对象中,将轮廓点作为立体对象的平面顶点。
[0240] 在一应用方式中,在虚幻引擎中创建一个立体对象,其中,立体对象包括顶点属性,顶点属性用于存储矢量面上的轮廓点,将从矢量面中得到的所有轮廓点添加至立体对象的顶点属性中,得到立体对象的平面顶点。
[0241] 在另一应用方式中,在虚幻引擎中创建一个立体对象,其中,立体对象包括位置属性,位置属性用于存储矢量面上的轮廓点的位置,将从矢量面中得到的所有轮廓点的位置添加至立体对象的位置属性中,基于位置属性中轮廓的位置,索引得到立体对象的平面顶点。
[0242] S703:基于平面顶点,得到与立体对象对应的立体网格体,其中,立体网格体中包括与平面顶点相匹配的高度顶点,且高度顶点在虚幻引擎中的位置与高度特征相关。
[0243] 具体地,立体对象中的平面顶点本身不够成立体,基于矢量面的高度特征对立体对象中的平面顶点进行高度拓展,生成平面顶点对应的高度顶点,从而能够将平面顶点和高度顶点共同构成立体。
[0244] 在一应用方式中,基于立体对象中平面顶点的位置,确定平面顶点所围设的底面,在垂直于底面的方向上基于高度特征对平面顶点进行高度拓展,得到高度顶点。
[0245] 进一步地,在虚幻引擎中基于平面顶点和高度顶点,生成立体对象对应的立体网格体。
[0246] 在一应用方式中,基于平面顶点和高度顶点在虚幻引擎中的位置,生成一个与立体对象相匹配的网格体,确定该网格体的网格顶点、三角网格索引、纹理坐标和法面,利用程序化建模函数基于网格体对应的网格顶点、三角网格索引、纹理坐标和法面进行建模,在虚幻引擎中生成与立体对象对应的立体网格体。
[0247] 在另一应用方式中,立体对象包括网格属性,基于平面顶点和高度顶点在虚幻引擎中的位置,生成一个与立体对象相匹配的网格体,确定该网格体的网格顶点、三角网格索引、纹理坐标和法面,将网格体的网格顶点、三角网格索引、纹理坐标和法面存储至网格属性中,在虚幻引擎中利用程序化建模函数调用网格属性,生成与立体对象对应的立体网格体。
[0248] S704:为立体网格体指定材质,在虚幻引擎中生成与矢量数据对应的立体。
[0249] 具体地,立体网格体对应的材质与矢量面在现实世界对应的实体目标相关,为立体网格体指定材质,在虚幻引擎中生成与矢量数据对应的立体。
[0250] 在一应用场景中,矢量面对应现实世界的建筑,为立体网格体指定与建筑相关的材质,在虚幻引擎中生成与矢量面对应的立体,从而在虚幻引擎中生成虚拟的道路所对应的立体。
[0251] 在另一应用场景中,矢量面对应现实世界的植被,为立体网格体指定与植被相关的材质,在虚幻引擎中生成与矢量面对应的立体,从而在虚幻引擎中生成虚拟的植被所对应的立体。
[0252] 在本实施例中,获得基于遥感图像得到的矢量数据,将矢量数据中的矢量面读取出来并确定矢量面的高度特征,在虚幻引擎中生成一个立体对象,将矢量面上的轮廓点添加至立体对象中,将轮廓点作为立体对象的平面顶点,在虚幻引擎中基于平面顶点,生成立体对象对应的立体网格体,其中,立体网格体中包括与平面顶点相匹配的高度顶点,且高度顶点在虚幻引擎中的位置与高度特征相关,为立体网格体指定材质,从而能够在虚幻引擎中便捷地生成与现实世界相对应的立体,提高在虚幻引擎中构建立体的便捷度。
[0253] 在一些实施场景中,上述步骤S701具体包括:利用空间数据转换库读取遥感图像,得到矢量数据及其对应的数据属性;其中,数据属性包括面数据属性和线数据属性;基于矢量数据的数据属性,从矢量数据中读取出与面数据属性对应的矢量面以及矢量面的高度特征。
[0254] 具体地,利用空间数据转换库读取遥感图像,从遥感图像中得到矢量数据对应的矢量文件,并确定矢量数据对应的数据属性,其中,数据属性包括面数据属性和线数据属性,每个矢量文件可存储多个图层,每个图层中可存储多个特征,针对每个特征分别确定特征对应的数据属性,将矢量数据中对应有面数据属性的矢量读取出来,得到与面数据属性对应的矢量面,并且将矢量面对应的高度特征读取出来,得到矢量面对应的高度特征。
[0255] 在一具体应用场景中,利用GDAL读取遥感图像,获得遥感图像对应的矢量数据组成的矢量文件,其中,矢量文件的格式包括但不限于Shapefile和GeoJson格式,从矢量文件中提取出矢量数据中的矢量面,以使虚幻引擎能够兼容遥感图像,并基于遥感图像对应的矢量数据得到矢量面,从而基于矢量面和高度特征构建立体。
[0256] 在一些实施场景中,虚幻引擎对应有坐标系统和地理全局对象,坐标系统包括地理坐标系、投影坐标系、引擎全局坐标系和引擎局部坐标,地理全局对象包括引擎原点以及坐标系统中任意两种坐标系之间的转换关系;其中,地理坐标系和投影坐标系与全球定位系统相关,引擎全局坐标系用于定位虚幻引擎中的任一对象,引擎原点在投影坐标系中对应有原点坐标,引擎全局坐标系中的引擎全局坐标基于投影坐标系中的投影坐标减去原点坐标后获得,引擎局部坐标系中的引擎局部坐标基于当前对象上的顶点相对当前对象的引擎全局坐标的偏移值确定;平面顶点和高度顶点,在虚幻引擎中包括在引擎局部坐标系中的引擎局部坐标。
[0257] 具体地,平面顶点和高度顶点对应为三角网格索引中的网格顶点,网格顶点最终生成立体网格体,因此,平面顶点和高度顶点在立体对象对应的引擎局部坐标系中能够得到平面顶点和高度顶点的引擎局部坐标,从而有效降低调用网格顶点的位置时的计算负载。
[0258] 在一实施场景中,平面顶点之间的连线所围设的面为底面,上述步骤S703具体包括:基于平面顶点对应的引擎局部坐标进行三角剖分,得到底面对应的多个三角网格索引;基于平面顶点和高度特征,生成与平面顶点对应的高度顶点,基于平面顶点和高度顶点在虚幻引擎中的位置进行三角剖分,得到与底面区别的其他面的多个三角网格索引;其中,各个三角网格索引包括三个网格顶点,网格顶点与平面顶点和高度顶点对应;基于各个网格顶点在虚幻引擎中的位置,确定所有三角网格索引中各个网格顶点对应的法线,以及各个网格顶点对应的纹理坐标;在虚幻引擎中,基于所有三角网格索引和各个网格顶点对应的法线和纹理坐标,生成与立体对象对应的立体网格体。
[0259] 具体地,请参阅图8,图8是本申请基于虚幻引擎的立体构建方法一实施方式的应用场景示意图,为便于说明,以平面顶点围设的底面为正方形为例,平面顶点对应的编号为0‑3,基于平面顶点在虚幻引擎中的位置进行三角剖分,得到底面对应的多个三角网格索引,包括0、3、2和2、1、0。
[0260] 可选地,将底面对应的三角网格索引按照底面指定方向存储,以便于底面对应的网格顶点能够显示,其中,底面指定方向包括朝向z轴负方向的顺时针方向。
[0261] 进一步地,基于矢量面的高度特征和平面顶点在虚幻引擎中对应的引擎局部坐标,对平面顶点进行高度拓展,得到高度顶点,在图8中高度顶点对应的编号为4、5、6、7。进而,基于平面顶点和高度顶点在虚幻引擎中的位置,对区别于底面的其他面进行三角剖分,得到其他共五个面的三角网格索引,其中,三角网格索引对应三个网格顶点,在不同的面所对应的三角网格索引的网格顶点中包括平面顶点和/或高度顶点。
[0262] 进一步地,基于每个网格顶点在虚幻引擎中的位置生成网格顶点的纹理坐标,以便于进行纹理贴图,基于每个网格顶点的位置计算每个网格顶点对应的法线,以便于确定每个网格顶点对应的光照方向,输入上述步骤中生成的网格顶点、三角网格索引、纹理坐标和法线,使用虚幻引擎的程序化建模函数生成立体网格体。
[0263] 在一应用场景中,基于平面顶点和高度特征,生成与平面顶点对应的高度顶点,基于平面顶点和高度顶点在虚幻引擎中的位置进行三角剖分,得到与底面区别的其他面的多个三角网格索引,包括:基于平面顶点在引擎局部坐标系中的引擎局部坐标和高度特征,对平面顶点进行拉伸,得到平面顶点各自对应的高度顶点,且高度顶点之间的连线所围设的面为顶面;基于高度顶点在引擎局部坐标系中的引擎局部坐标,对顶面进行三角剖分,得到顶面对应的多个三角网格索引,将顶面对应的多个三角网格索引中的网格顶点按顶面指定方向存储;其中,底面对应的多个三角网格索引中的网格顶点按底面指定方向存储,且顶面指定方向与底面指定方向相反;基于顶面和顶面的位置,对与顶面和底面均相交的各个侧面进行三角剖分,得到所有侧面对应的多个三角网格索引。
[0264] 具体地,仍以图8为例,根据矢量面的高度特征和拉伸尺度计算拉伸高度,生成一组与原顶点X、Y位置相同,但Z值为拉伸高度的新顶点作为高度顶点,高度顶点之间的连线所围设的面为顶面,基于高度顶点在引擎局部坐标系中的引擎局部坐标,对顶面进行三角剖分,得到顶面对应的多个三角网格索引,将顶面对应的多个三角网格索引中的网格顶点按顶面指定方向存储,以便于顶面对应的网格顶点能够显示,其中,顶面指定方向包括朝向Z轴正方向的顺时针方向,且底面对应的多个三角网格索引中的网格顶点按底面指定方向存储,顶面指定方向与底面指定方向相反,以便于顶面和底面对应的网格顶点在虚幻引擎中能够在从上向下的方向上观察时清晰显示。
[0265] 进一步地,将顶面和底面对应的网格顶点按照朝向观察者的顺时针方向生成侧面的三角网格索引,生成方式为从ip=1到顶点总数num‑1进行遍历,分别生成num+ip‑1,num+ip,ip‑1、num+ip,ip,ip‑1两组三角索引,当ip=num‑1时,生成的索引为num+ip,num,ip、num,0,ip。对应图8中所示的立体网格体,所生成的三角网格索引对应的编号为4、5、0和5、1、0,5、6、1和6、2、1,6、7、3和7、3、2,7、4、3和4、0、3,最终得到各个侧面的三角网格索引,以便于对立体网格体进行贴图和生成材质。
[0266] 可选地,基于各个网格顶点在虚幻引擎中的位置,确定所有三角网格索引中各个网格顶点对应的法线,以及各个网格顶点对应的纹理坐标,包括:基于各个三角网格索引中三个网格顶点对应的引擎局部坐标,将各个三角网格索引中的任一网格顶点与其他两个网格顶点之间的两个向量叉乘,并对叉乘结果归一化处理,得到所有网格顶点对应的法线;将各个网格顶点对应的引擎局部坐标缩放至纹理坐标范围,得到各个网格顶点对应的纹理坐标。
[0267] 具体地,计算三角网格索引中每个网格顶点的法线,法线的计算方式为在该网格顶点所在的三角面上由该网格顶点与另外两个网格顶点组成的两个向量的叉乘,并对叉乘结果进行归一化处理,得到该网格顶点,以获得准确的法线位置。
[0268] 进一步地,将各个网格顶点对应的引擎局部坐标缩放至纹理坐标范围内,得到各个网格顶点对应的纹理坐标,以便于对平面网格体进行贴图。
[0269] 在一具体实施场景中,将各个网格顶点对应的引擎局部坐标缩放至纹理坐标范围,得到各个网格顶点对应的纹理坐标,包括:将各个网格顶点对应的引擎局部坐标的竖向坐标进行缩放处理,得到各个网格顶点对应的纹理坐标的竖向分量;将各个网格顶点的纹理坐标的水平分量设为预设分量,得到各个网格顶点对应的纹理坐标。
[0270] 具体地,将各个网格顶点对应的引擎局部坐标中的竖向坐标分别除以缩放参数,得到各个网格顶点对应的纹理坐标的竖向分量,以使竖向分量缩放至纹理坐标范围,从而便于立体网格体在竖向上能够进行统一贴图,生成高度相统一的贴图效果,将各个网格顶点的纹理坐标的水平分量设置为纹理坐标范围内的预设分类,得到所有网格顶点对应的纹理坐标,以便于对立体网格体进行贴图。
[0271] 在一具体应用场景中,所有顶点纹理坐标UV值中竖向分量V为网格顶点中的引擎局部坐标的竖向坐标除以100,水平分量U为预设分量0。其中,本应用场景中的缩放参数为100,预设分量为0,在其他应用场景中缩放参数可基于网格顶点的引擎局部坐标进行定义,将纹理坐标的水平分量和竖向分量缩放至0‑1,并指定自定义的在纹理坐标范围内的预设分量数值。通过这种UV展开,所有立体网格体可在同一高度显示相同的贴图效果,例如自发光特效等。
[0272] 在一应用场景中,上述步骤S702具体包括:在虚幻引擎中生成一个继承于地理全局对象的立体对象;其中,立体对象包括顶点属性、网格属性、材质属性和特征属性;其中,顶点属性用于存储矢量面上的轮廓点,网格属性用于存储立体对象对应的立体网格体,材质属性用于存储立体网格体的材质,特征属性用于存储矢量面对应的高度特征;将矢量面对应的高度特征存储至特征属性中,将矢量面上的所有轮廓点对应的位置转换至地理坐标系中,并将矢量面上的所有轮廓点对应的地理坐标存储至顶点属性,得到立体对象中的平面顶点。
[0273] 具体地,虚幻引擎包括坐标系统和地理全局对象AGeoActor,在虚幻引擎中生成一个继承于地理全局对象的立体对象APolygonActor,其中,立体对象包括顶点属性、网格属性、材质属性和特征属性。其中,顶点属性用于存储矢量面上的轮廓点,网格属性用于存储立体对象对应的立体网格体,材质属性用于存储立体网格体的材质,为轮廓点、立体网格体和材质提供相应的存储空间,特征属性用于存储矢量面对应的高度特征。
[0274] 进一步地,将矢量面对应的高度特征存储至特征属性中,将矢量面上的所有轮廓点对应的位置转换至地理坐标系中,并将矢量面上的所有轮廓点对应的地理坐标存储至顶点属性,从而将矢量面上的轮廓点作为立体对象中的平面顶点,且轮廓点对应的地理坐标存储在顶点属性中以便调用。
[0275] 进一步地,在虚幻引擎中生成一个立体对象,将矢量面中的所有轮廓点添加至立体对象中,得到立体对象中的平面顶点之后,还包括:利用空间数据转换库,将立体对象中所有平面顶点的地理坐标转换至投影坐标系中,并将投影坐标系中的投影坐标转换至引擎全局坐标系中,将引擎全局坐标系中的引擎全局坐标转换至引擎局部坐标系中,确定平面顶点在引擎局部坐标系中的引擎局部坐标;将立体对象中的其中一个平面顶点在引擎全局坐标系中的引擎全局坐标,作为立体对象在虚幻引擎中的位置。
[0276] 具体地,通过调用顶点属性中存储的地理坐标即可获得平面顶点对应的地理坐标,将地理坐标转换至投影坐标系再转换至引擎全局坐标系中,将其中一个平面顶点对应的引擎全局坐标作为立体对象在虚幻引擎中的位置,从而将立体对象与矢量面在现实世界的位置相匹配。
[0277] 可选地,获得基于遥感图像得到的矢量数据,将矢量数据中的矢量面读取出来之前,还包括:获得引擎原点对应的坐标设置属性,当坐标设置属性对应为允许设置时,确定矢量数据中的位置信息,基于位置信息重设坐标系统的引擎原点;其中,坐标设置属性包括允许设置和禁止设置。
[0278] 具体地,判断引擎原点的坐标设置属性,若允许设置,则基于矢量数据中的位置信息重设坐标系统的引擎原点,并在重设后将坐标设置属性设置为禁止设置,若禁止设置,则使用现有的引擎原点。进而,在允许设置时能够优先基于矢量数据对应的位置信息设置新的引擎原点,从而有效减小矢量数据对应的立体对象的引擎全局坐标的数值,有效减轻虚幻引擎的处理负担并提高计算效率。
[0279] 在一些实施例中,请参阅图9,图9是本申请基于虚幻引擎的图标构建方法一实施方式的流程示意图,基于地形、地图、平面和立体在坐标系统中的位置,在虚幻引擎中生成与遥感图像对应的虚拟模型之后,还包括:
[0280] S901:获得图标信息文件,基于图标信息文件得到至少一个图标和图标对应的图标位置和图标属性。
[0281] 具体地,获得图标信息文件,其中,图标信息文件用于在虚幻引擎中批量创建图标,图标信息文件中包括至少一个图标和各个图标对应的图标位置和图标属性。
[0282] 在一应用方式中,获得图标信息文件,从图标信息文件中读取所有的图标以及各个图标对应的图标位置和图标属性,其中,图标属性包括图标的图标样式。
[0283] 在另一应用方式中,获得图标信息文件,将图标信息文件中的图标作为虚幻引擎的感兴趣点,遍历感兴趣点得到各个图标对应的图标位置和图标属性,其中,图标属性包括图标的图标尺寸和图标样式。
[0284] S902:基于当前图标对应的当前图标位置和当前图标属性,生成与当前图标对应的当前图标网格体。
[0285] 具体地,对图标信息文件中的所有图标进行遍历,当获得当前图标时,基于当前图标对应的当前图标位置和当前图标属性,在虚幻引擎中生成与当前图标对应的当前图标网格体,从而得到与当前图标的当前图标属性相匹配的平面,以便于遍历完成后批量生成目标图标,利用目标图标进行点位标定。
[0286] 在一应用方式中,图标属性包括图标的图标样式,基于当前图标对应的当前图标位置和当前图标属性,在虚幻引擎中与当前图标位置相匹配的点位上,生成一个与图标样式相匹配的平面,基于与图标样式相匹配的平面上的顶点,确定顶点对应的三角网格索引、纹理坐标和法线,利用程序化建模函数基于平面对应的顶点、三角网格索引、纹理坐标和法线进行建模,在虚幻引擎中生成与当前图标对应的当前图标网格体。
[0287] 在另一应用方式中,图标属性包括图标的图标样式和图标尺寸,基于当前图标对应的当前图标位置和当前图标属性,在虚幻引擎中与当前图标位置相匹配的点位上,生成一个与图标样式和图标尺寸相匹配的平面,基于与图标样式和图标尺寸相匹配的平面上的顶点,确定顶点对应的三角网格索引、纹理坐标和法线,利用程序化建模函数基于平面对应的顶点、三角网格索引、纹理坐标和法线进行建模,在虚幻引擎中生成与当前图标对应的当前图标网格体。
[0288] S903:将当前图标属性转换成当前图标网格体的纹理,在虚幻引擎中生成与当前图标对应的目标图标。
[0289] 具体地,将当前图标属性转换成当前图标网格体的纹理,为当前图标网格体贴图,在虚幻引擎中生成与当前图标对应的目标图标,直至遍历图标信息文件中的所有图标,批量生成图标信息文件中对应的图标,提高图标生成效率。
[0290] 在一应用方式中,在虚幻引擎中基于当前图标属性对应的特征,生成当前图标网格体对应的纹理,将纹理赋予当前图标网格体,生成与当前图标对应的目标图标。其中,当前图标属性对应的特征与当前图标的图标样式相关。
[0291] 在另一应用方式中,在虚幻引擎中创建纹理指针变量,将当前图标属性对应的特征存储至纹理指针变量中,以使图标属性转换成当前图标网格体的纹理,生成与当前图标网格体对应的目标图标,其中,当前图标属性对应的特征与当前图标的图标样式和图标尺寸相关。
[0292] S904:响应于遍历图标信息文件中的所有图标,基于所有目标图标的位置和虚幻引擎的当前视角,将所有目标图标调整至正对当前视角。
[0293] 具体地,当遍历图标信息文件中的所有图标,基于所有目标图标各自相对虚幻引擎的当前视角的偏差,将所有目标图标调整至正对虚幻引擎的当前视角,以便于观察和使用目标图标。
[0294] 在一应用方式中,确定虚幻引擎中当前帧对应的当前视角,确定当前帧中所有目标图标的位置,基于当前目标图标各自相对虚幻引擎的当前视角的偏差,对所有目标图标的角度进行调整,以使所有目标图标调整至正对虚幻引擎的当前视角,进而逐帧确定目标图标与当前视角的偏差,从而保持目标图标始终面向使用者的当前视角。
[0295] 在另一应用方式中,虚幻引擎中预先设置有旋转功能模块,当遍历图标信息文件中的所有图标后,调用旋转功能模块将所有目标图标调整至正对虚幻引擎的当前视角,其中,旋转功能模块基于虚幻引擎中的蓝图功能,将不同的功能函数连接,从而确定目标图标的位置和虚幻引擎的当前视角,进而基于当前目标图标各自相对虚幻引擎的当前视角的偏差,对所有目标图标的角度进行调整。
[0296] 在本实施例中,从图标信息文件中得到图标信息文件中的所有图标,得到至少一个图标和图标对应的图标位置和图标属性,基于当前图标对应的当前图标位置和当前图标属性,生成与当前图标对应的当前图标网格体,将当前图标属性转换成当前图标网格体的纹理,为当前图标网格体贴图,生成当前图标对应的目标图标,当图标信息文件中的所有图标遍历完成后,在虚幻引擎中实现批量化生成目标图标,以便于利用目标图标进行点位标定,并且基于所有目标图标的位置和虚幻引擎的当前视角,将所有目标图标调整至正对当前视角,以便于观察和使用目标图标。
[0297] 在一些实施场景中,上述步骤S901具体包括:读取图标信息文件,得到图标信息文件中所有图标对应的图标位置和图标属性;其中,图标属性包括图标对应的图标尺寸和图标样式,图标位置包括图标对应的点位坐标,且点位坐标包括经度、纬度和海拔。
[0298] 具体地,获得图标信息文件,将图标信息文件中的所有图标以及各个图标对应的图标位置和图标属性读取出来,将各个图标与对应的图标位置和图标属性绑定,其中,图标属性包括图标尺寸和图标样式,图标位置包括图标对应的点位坐标,其中,点位坐标包括经度、纬度和海拔,以便于将图标对应的点位坐标设置在地理坐标系中,并最终转换至虚幻引擎中的引擎全局坐标。
[0299] 进一步地,将当前图标属性转换成当前图标网格体的纹理,在虚幻引擎中生成与当前图标对应的目标图标之前,还包括:将当前图标的点位坐标转换至地理坐标系中,得到当前图标在地理坐标系中的地理坐标;利用空间数据转换库将当前图标对应的地理坐标转换至投影坐标系,得到当前图标在投影坐标系中的投影坐标;将当前图标对应的投影坐标转换至引擎全局坐标系中,得到当前图标对应的当前图标网格体在引擎全局坐标系中的引擎全局坐标。
[0300] 具体地,读取图标信息文件中当前图标对应的点位坐标中的经度、纬度和海拔,确定点位坐标在地理坐标系中的位置,利用空间数据转换库将当前图标对应的地理坐标转换至投影坐标系,得到当前图标在投影坐标系中的投影坐标,将当前图标对应的投影坐标减去引擎原点的原点坐标,以使当前图标对应的投影坐标转换至引擎全局坐标中,得到当前图标对应的当前图标网格体在引擎全局坐标系中的引擎全局坐标,以使虚幻引擎中的当前图标与现实世界中的位置相对应,提高最终生成的目标图标的位置精度。
[0301] 进一步地,基于当前图标对应的当前图标位置和当前图标属性,生成与当前图标对应的当前图标网格体,包括:基于当前图标位置和当前图标属性,在虚幻引擎中生成当前图标对应的网格顶点集合;其中,网格顶点集合中包括多个网格顶点;基于网格顶点集合,生成与当前图标对应的当前图标网格体。
[0302] 具体地,在虚幻引擎中基于当前图标位置和当前图标属性,确定当前图标对应的网格顶点,生成网格体顶点集合,其中,网格顶点集合中包括多个网格顶点,基于网格顶点集合,确定网格顶点集合对应的三角网格索引、以及网格顶点集合中每个网格顶点对应的纹理坐标和法线,利用程序化建模生成网格顶点集合对应的当前图标网格体,从而在虚幻引擎中构建图标对应的基础框架,以便在虚幻引擎中生成目标图标。
[0303] 在一应用场景中,网格顶点集合中包括至少四个网格顶点,基于网格顶点集合,生成与当前图标对应的当前图标网格体,包括:基于网格顶点集合中所有网格顶点的位置,确定网格顶点集合对应的多个三角网格索引;基于网格顶点集合中的任一网格顶点的位置相对其他网格顶点的位置,确定网格顶点集合对应的纹理坐标;基于所有三角网格索引中三个网格顶点的位置,确定所有三角网格索引中各个网格顶点对应的法线;在虚幻引擎中,基于所有三角网格索引和所有三角网格索引中各个网格顶点对应的法线、以及网格顶点集合对应的纹理坐标,生成与当前图标对应的当前图标网格体。
[0304] 具体地,基于当前图标属性构建的网格体为矩形或其他多边形,网格顶点集合中包括至少四个网格顶点,为便于说明,以网格体为正方形为例,当前图标属性包括图标尺寸,图标尺寸中图标的高对应为h,宽对应为w,且h=w,网格顶点集合中的网格顶点分别为(0,0,0)、(0,h,0)、(w,h,0)和(w,0,0),网格顶点的编号为0、1、2和3,生成网格体的三角网格索引分别为0、1、2和2、3、0,以便基于三角网格索引来生成网格体,生成纹理坐标分别为(0,0)、(0,1)、(1,1)、(1,0),以便于进行纹理贴图,计算每个顶点对应的法线,以便于确定每个顶点对应的光照方向,输入上述步骤中生成的顶点、三角网格索引、纹理坐标和法线,使用虚幻引擎的程序化建模函数生成当前图标网格体。
[0305] 在一具体应用场景中,基于所有三角网格索引中三个网格顶点的位置,确定所有三角网格索引中各个网格顶点对应的法线,包括:基于各个三角网格索引中三个网格顶点对应的位置,将各个三角网格索引中的任一网格顶点与其他两个网格顶点之间的两个向量叉乘,并对叉乘结果归一化处理,得到所有网格顶点对应的法线。
[0306] 具体地,计算三角网格索引中每个网格顶点的法线,法线的计算方式为在该网格顶点所在的三角面上由该网格顶点与另外两个网格顶点组成的两个向量的叉乘,并对叉乘结果进行归一化处理,得到该网格顶点,以获得准确的法线位置。
[0307] 在一些实施场景中,上述步骤S903具体包括:在所述虚幻引擎中创建纹理指针变量,将所述当前图标对应的图标样式存储至所述纹理指针变量中,以使所述当前图标对应的图标样式转换成所述当前图标网格体的纹理,得到与所述当前图标对应的目标图标。
[0308] 具体地,在虚幻引擎中创建纹理指针变量,将当前图标对应的图标样式存储至纹理指针变量中,从而在虚幻引擎中将当前图标对应的图标样式转换成当前图标网格体的纹理,利用纹理为当前图标网格体贴图,生成与图标样式对应的目标图标,将图标样式作为当前图标网格体的纹理资产,能够在虚幻引擎中精准创建指定样式的目标图标。
[0309] 进一步地,将当前图标属性转换成当前图标网格体的纹理,在虚幻引擎中生成与当前图标对应的目标图标之后,还包括:在虚幻引擎中创建材质指针变量,在材质指针变量中为当前图标网格体生成与纹理相匹配的材质,得到当前图标网格体的材质。
[0310] 具体地,在虚幻引擎中创建材质指针变量,为当前图标网格体生成与纹理相匹配的材质并存储在材质指针变量中,得到当前图标网格体的材质,其中,材质指针变量包括上下级节点,纹理所对应的参数作为下级节点赋予材质对应的上级节点。
[0311] 在一具体应用场景中,读取该点位的图标存储位置,通过虚幻引擎中的FFileHelper::LoadFileToArray函数将图标对应的图片数据读取到数组CompressedData中,通过虚幻引擎中的GetImageWrapperByExtention创建TSharedPtrImageWrapper变量,将数组CompressedData的数据传给ImageWrapper,创建UPackage类型的指针变量TextPackage用于存储纹理资产,在TextPackage中新建UTexture2D类型的指针变量NewTexture用于存储纹理数据,通过ImageWrapper获取解压后的数据,图像大小、通道、类型信息赋给NewTexture,存储该纹理资产TextPackage。
[0312] 进一步地,首先创建一个UMaterial类型的材质节点,混合模式设置为半透明,为材质节点添加一个UMaterialExpressionSample类型的纹理节点,将纹理赋值给纹理节点,将UMaterialExpressionSample节点的RGB值作为基础颜色输入材质节点,Alpha值作为不透明度输入材质节点,保存该材质资产,将该材质赋给当前图标网格体。
[0313] 在一些实施场景中,上述步骤S901之前,还包括:在虚幻引擎中,将用于确定对象位置的位置函数、用于确定虚幻引擎的当前视角的视角函数和用于确定角度差值的转动函数相连,生成虚幻引擎中的旋转功能模块。
[0314] 具体地,藉由虚幻引擎的蓝图功能,将各类功能函数相连得到功能模块,其中,为实现随当前视角旋转的功能,将用于确定对象位置的位置函数、用于确定虚幻引擎的当前视角的视角函数和用于确定角度差值的转动函数相连,得到旋转功能模块,以便于对批量生成的多个目标图标进行统一调整,提高调整的便捷度和效率。
[0315] 进一步地,响应于遍历图标信息文件中的所有图标,基于所有目标图标的位置和虚幻引擎的当前视角,将所有目标图标调整至正对当前视角,包括:响应于遍历图标信息文件中的所有图标,调用旋转功能模块,利用位置函数确定所有目标图标的位置,利用视角函数确定虚幻引擎的当前视角;利用转动函数确定所有目标图标的位置相对当前视角的角度差值,基于各个图像对应的角度差值将所有目标图标调整至正对当前视角。
[0316] 具体地,当图标信息文件中的所有图标遍历完成,调用旋转功能模块,利用位置函数确定所有目标图标的位置,利用视角函数确定虚幻引擎的当前视角,利用转动函数确定所有目标图标的位置相对当前视角的角度差值,基于各个图像对应的角度差值将所有目标图标调整至正对当前视角,以便于观察和使用目标图标。
[0317] 进一步地,在虚幻引擎中的每一帧均调用一侧旋转功能模块,以确保虚幻引擎中的目标图标能够始终正对当前视角,以便于使用目标图标进行点位标定。
[0318] 在一些实施场景中,请参阅图10,图10是本申请基于虚幻引擎的热力图构建方法一实施方式的流程示意图,响应于遍历图标信息文件中的所有图标,基于所有目标图标的位置和虚幻引擎的当前视角,将所有目标图标调整至正对当前视角之后,还包括:
[0319] S11:获得热力图对应的热力信息文件,基于热力信息文件得到多个辐射点和各个辐射点对应的点位位置和辐射属性。
[0320] 具体地,获得热力图对应的热力信息文件,其中,热力信息文件用于在虚幻引擎中创建目标热力图,以便于在虚幻引擎中确定密度信息,热力信息文件中包括多个辐射点和各个辐射点对应的点位位置和辐射属性。
[0321] 在一应用方式中,获得热力图对应的热力信息文件,从热力信息文件中读取所有的辐射点以及各个辐射点对应的点位位置和辐射属性,其中,辐射属性包括辐射点的辐射范围。
[0322] 在另一应用方式中,获得热力图对应的热力信息文件,将辐射点作为感兴趣点,遍历感兴趣点得到各个辐射点对应的点位位置和辐射属性,其中,辐射属性包括辐射点的最大辐射半径和辐射强度,基于最大辐射半径和辐射强度能够确定以辐射点为中心的辐射半径。
[0323] S12:基于所有辐射点对应的点位位置,确定热力图在虚幻引擎中对应的热力尺寸。
[0324] 具体地,将所有辐射点对应的点位位置转换至虚幻引擎中,在虚幻引擎中确定热力图对应的热力尺寸。
[0325] 在一应用方式中,将所有辐射点对应的点位位置转换至虚幻引擎的引擎全局坐标系中,基于所有辐射点的引擎全局坐标确定热力图在虚幻引擎中对应的热力尺寸。
[0326] 在另一应用方式中,在所有辐射点中提取一个辐射点作为指定辐射点,将指定辐射点对应的点位位置转换至虚幻引擎的引擎全局坐标系中,将指定辐射点的引擎全局坐标作为热力图在虚幻引擎中的引擎全局坐标,并确定所有辐射点在虚幻引擎的引擎局部坐标系中的引擎局部坐标,基于所有辐射点的引擎局部坐标确定热力图在虚幻引擎中对应的热力尺寸。
[0327] S13:基于所有辐射点对应的辐射属性,在热力尺寸的范围内确定所有辐射点和受辐射点的辐射值,其中,受辐射点区别于辐射点。
[0328] 具体地,基于所有辐射点的辐射属性确定辐射点所能影响的范围,在热力尺寸范围内确定所有辐射点和受辐射点的辐射值,其中,受辐射点区别于辐射点,受辐射点不具备辐射属性,当辐射点之间距离相近时,相近的辐射点之间存在辐射值叠加。
[0329] 在一应用方式中,辐射属性包括辐射点的辐射范围且在辐射范围内辐射值以辐射点为中心线性下降,基于辐射点对应的辐射范围,在热力尺寸的范围内确定所有辐射点和受辐射点的辐射值,将同一辐射点或受辐射点对应的所有辐射值叠加,确定各个点位上最终的辐射值。
[0330] 在另一应用方式中,辐射属性包括辐射点的最大辐射半径和辐射强度,基于辐射点对应的最大辐射半径和辐射强度之间的乘积,在热力尺寸的范围内确定所有辐射点和受辐射点的辐射值,将同一辐射点或受辐射点对应的所有辐射值叠加,确定各个点位上最终的辐射值。
[0331] S14:基于各个辐射点和各个受辐射点对应的辐射值,生成与热力图对应的热力纹理,并为热力纹理设置对应的热力材质,在虚幻引擎中生成与热力图对应的目标热力图。
[0332] 具体地,基于各个辐射点和各个受辐射点对应的辐射值,确定与辐射值对应的纹理,生成与热力图对应的热力纹理,并为热力纹理设置对应的热力材质,从而在虚幻引擎中生成与热力图对应的目标热力图,以便在虚幻引擎中观察是否存在点位或者显示多个点位之间的差异性、检测不同点位之间是否存在相关性。
[0333] 在一应用方式中,在虚幻引擎中基于各个辐射点和受辐射点的辐射值,确定与辐射值对应的热力纹理,并对辐射值进行分档,并基于分档结果为热力纹理设置对应的热力材质,从而在虚幻引擎中生成与热力图对应的目标热力图。
[0334] 在另一应用方式中,在虚幻引擎中创建纹理指针变量,将各个辐射点和受辐射点的辐射值存储至纹理指针变量中,以使辐射值转换成点位的热力纹理,创建材质指针变量,基于各个辐射点和受辐射点的辐射值的数值大小,确定各个点位的热力材质并将热力材质存储至材质指针变量中,从而在虚幻引擎中生成与热力图对应的目标热力图。
[0335] 在本实施例中,从热力信息文件中得到热力信息文件中的所有辐射点,得到多个辐射点和辐射点对应的点位位置和辐射属性,基于所有辐射点的点位位置确定热力图在虚幻引擎中的热力尺寸,在热力尺寸的范围内基于所有辐射点的辐射尺寸,确定所有辐射点和受辐射点的辐射值,基于各个辐射点和各个受辐射点对应的辐射值,生成与热力图对应的热力纹理,并为热力纹理设置对应的热力材质,在虚幻引擎中生成与热力图对应的目标热力图,以便在虚幻引擎中确定密度信息,观察是否存在点位或者显示多个点位之间的差异性、检测不同点位之间是否存在相关性。
[0336] 在一些实施场景中,上述步骤S11具体包括:读取热力信息文件,将热力信息文件中所有辐射点,以及各个辐射点对应的点位位置和辐射属性存储至虚幻引擎的内存中;其中,点位位置包括辐射点的经度和纬度,辐射属性包括辐射点的最大辐射半径和辐射强度。
[0337] 具体地,对热力信息文件进行读取,将热力信息文件中所有辐射点及其对应的点位位置和辐射属性读取出来,并存储至虚幻引擎的内存中,以便调用各个辐射点及其对应的点位位置和辐射属性。其中,辐射属性包括辐射点的最大辐射半径和辐射强度,辐射强度用于定义辐射点的辐射强度变化,最大辐射半径用于定义以辐射点为中心向外进行辐射的最大距离。
[0338] 进一步地,各个辐射点的点位位置包括经度和纬度,用于定位辐射点的位置,且辐射点的点位位置可进行自定义修改,从而将最终形成的目标热力图设置在虚幻引擎中的任意位置处。
[0339] 在一应用场景中,各个辐射点的点位位置设置于WGS84坐标系中,各个辐射点的最大辐射半径以像素为单位,且每个像素对应有实际长度单位。
[0340] 进一步地,基于所有辐射点对应的点位位置,确定热力图在虚幻引擎中对应的热力尺寸之前,还包括:将各个辐射点的点位位置转换至地理坐标系中,得到各个辐射点在地理坐标系中的地理坐标;利用空间数据转换库将各个辐射点对应的地理坐标转换至投影坐标系,得到各个辐射点在投影坐标系中的投影坐标;将各个辐射点对应的投影坐标转换至引擎全局坐标系中,得到各个辐射点在引擎全局坐标系中的引擎全局坐标。
[0341] 具体地,读取各个辐射点对应的点位位置中的经度和纬度,确定点位位置在地理坐标系中的位置,利用空间数据转换库将辐射点对应的地理坐标转换至投影坐标系,得到辐射点在投影坐标系中的投影坐标,将辐射点对应的投影坐标减去引擎原点的原点坐标,以使辐射点对应的投影坐标转换至引擎全局坐标中,得到各个辐射点在引擎全局坐标系中的引擎全局坐标,以使辐射点能够基于地理坐标系中定义的位置最终转换至虚幻引擎中,提高目标热力图在虚幻引擎中设置的自由度。
[0342] 在一实施场景中,基于所有辐射点对应的点位位置,确定热力图在虚幻引擎中对应的热力尺寸,包括:基于各个辐射点对应的辐射属性,以及各个辐射点在引擎全局坐标系中的引擎全局坐标,确定所有辐射点对应的外接矩形;将外接矩形的尺寸作为热力图在虚幻引擎中的热力尺寸,基于外接矩形的预设角部对应的引擎全局坐标,确定热力图在引擎全局坐标系中的引擎全局坐标。
[0343] 具体地,遍历所有辐射点对应的引擎全局坐标,确定所有辐射点中的引擎全局坐标极值,包括最大值和最小值,基于辐射点的最大辐射半径确定引擎全局坐标极值对应的点位的影响范围,基于影响范围确定所有辐射点对应的外接矩形,将外接矩形的尺寸作为热力图在虚幻引擎中的热力尺寸,确定外接矩形的预设角部对应的引擎全局坐标,将预设角部对应的引擎全局坐标作为热力图在引擎全局坐标系中的引擎全局坐标。
[0344] 在一具体应用场景中,预设角部为外接矩形的左上角,在其他应用场景中,预设角部也可以是其他方位的角部。
[0345] 在另一实施场景中,基于所有辐射点对应的辐射属性,在热力尺寸的范围内确定所有辐射点和受辐射点的辐射值,包括:基于热力尺寸,生成与热力图对应的辐射矩阵;基于各个辐射点在引擎全局坐标系中的引擎全局坐标,确定各个辐射点在辐射矩阵中的矩阵点位;基于各个辐射点对应的矩阵点位、辐射强度和最大辐射半径,确定辐射矩阵中确定所有辐射点和所有受辐射点的辐射值。
[0346] 具体地,初始化一个大小与热力尺寸相匹配的数组,作为与热力图对应的辐射矩阵,作为与热力图对应的辐射矩阵,遍历每一个辐射点,基于各个辐射点在引擎全局坐标系中的引擎全局坐标,确定各个辐射点在辐射矩阵中的矩阵点位,也就是将各个辐射点转换至辐射矩阵中,从而在辐射矩阵中基于当前辐射点的最大辐射半径和辐射强度确定当前辐射点的辐射范围,在当前辐射点的辐射范围内确定辐射范围内所有点位对应的辐射值,遍历辐射矩阵中的所有辐射点后,当同一辐射点或受辐射点对应多个辐射值时,将同一辐射点或受辐射点对应的所有辐射值叠加,确定各个辐射点和受辐射点最终对应的辐射值,从而确保在热力尺寸对应的范围内确定所有辐射点和受辐射点对应的辐射值。
[0347] 在一应用场景中,基于各个辐射点对应的矩阵点位、辐射强度和最大辐射半径,确定辐射矩阵中确定所有辐射点和所有受辐射点的辐射值,包括:响应于遍历到当前辐射点,基于当前辐射点对应的矩阵点位和最大辐射半径,确定当前辐射点对应的辐射范围以及辐射范围内的辐射接收点,其中,当前辐射点包括从辐射矩阵中依次提取的辐射点;基于各个辐射接收点与当前辐射点之间的距离,以及当前辐射点对应的辐射强度和最大辐射半径,确定当前辐射点对应的辐射范围内所有辐射接收点的子辐射值;响应于遍历完辐射矩阵中的所有辐射点,将各个辐射点对应的辐射原值和所有子辐射值相加,得到各个辐射点对应的辐射值,将各个受辐射点对应的所有子辐射值相加,得到各个受辐射点对应的辐射值。
[0348] 具体地,从辐射矩阵中按顺序依次遍历辐射点,获得当前辐射点后,基于当前辐射点对应的矩阵点位和最大辐射半径,确定当前辐射点对应的辐射范围以及辐射范围内的辐射接收点,其中,在遍历到当前辐射点时,当前辐射点辐射范围内的所有点位均为辐射接收点,因此,辐射接收点可以是区别于当前辐射点的其他辐射点也可以是受辐射点。
[0349] 进一步地,遍历该辐射范围内的每一个辐射接收点,计算辐射范围内的每一个辐射接收点到当前辐射点的距离,根据距离计算当前辐射点对辐射范围内的每一个辐射接收点的子辐射值,当遍历完辐射矩阵中的所有辐射点后,将各个辐射点对应的辐射原值和所有能够接收到的子辐射值相加,得到各个辐射点对应的辐射值,将各个受辐射点对应的所有能够接收到的子辐射值相加,得到各个受辐射点对应的辐射值,以提高各个辐射点和受辐射点的辐射值的准确率。上述过程利用公式表示如下:
[0350]
[0351] 其中,S表示辐射强度,D表示当前像素点到辐射点的距离,R表示最大辐射半径,表示D与R的比值截断到0‑1,小于0则取0,大于1则取1。
[0352] 可选地,当任一辐射点或受辐射点对应的辐射值超过辐射上限值时,将对应点位的辐射值设置为辐射上限值,以防止辐射值溢出。
[0353] 在一具体应用场景中,辐射矩阵对应为与热力尺寸相匹配的RGB值为0,透明度为255的FColor类型的数组,辐射上限值为255。
[0354] 在一些实施场景中,上述步骤S14具体包括:在虚幻引擎中创建纹理指针变量,将各个辐射点和各个受辐射点对应的辐射值存储至纹理指针变量中,得到与热力图对应的热力纹理;基于各个辐射点和各个受辐射点对应的辐射值,对各个辐射点进行分档,得到多个辐射分档集合;其中,各个辐射分档集合对应有辐射值区间,同一辐射分档集合中的辐射点和/或受辐射点对应的辐射值属于同一辐射值区间;为各个辐射分档集合中的辐射点和/或受辐射点所对应的热力纹理,设置与辐射分档集合匹配的材质样式,得到热力纹理对应的热力材质;其中,材质样式与辐射值区间相关;在虚幻引擎中创建材质指针变量,将热力材质存储至材质指针变量中,生成与热力图对应的目标热力图。
[0355] 具体地,在虚幻引擎中创建纹理指针变量,将各个辐射点和各个受辐射点对应的辐射值存储至纹理指针变量中,以使辐射值转换成热力纹理,得到与热力图对应的热力纹理。
[0356] 进一步地,基于各个辐射点和各个受辐射点对应的辐射值对应的数值,对各个辐射点按数值进行分档,得到多个辐射分档集合,各个辐射分档集合对应有辐射值区间,同一辐射分档集合中的辐射点和/或受辐射点对应的辐射值属于同一辐射值区间,也就是说,同一辐射分档集合中可能只包括辐射点或只包括受辐射点或者既包括辐射点又包括受辐射点,为各个辐射分档集合中的辐射点和/或受辐射点所对应的热力纹理,设置与辐射分档集合匹配的材质样式,得到热力纹理对应的热力材质,其中,材质样式与辐射值区间相关,也就是每个辐射分档集合对应一个材质样式,同一辐射分档集合中的辐射点和/或受辐射点设置相同的材质样式,从而形成材质的梯度变化,以便于观察辐射值变化。在虚幻引擎中创建材质指针变量,将热力材质存储至材质指针变量中,生成与热力图对应的目标热力图。
[0357] 在一具体应用场景中,新建UTexture2D类型的指针变量Texture2D用于存储纹理数据,创建FTexture2DMipMap类型的指针变量Mip,将辐射强度矩阵的RGBA值写入Mip的BulkData中,将该Mip赋给Texture2D的PlatformData的Mips。
[0358] 进一步地,新建一个材质指针变量,将材质指针变量中的材质节点设置为不发光属性,然后添加四个常数节点用于设置材质样式,每个材质样式的颜色可调,其中,数值最大的辐射值区间对应为红色,数值最小的辐射值区间对应为绿色,以便于在虚幻引擎中观察是否存在点位或者显示多个点位之间的差异性、检测不同点位之间是否存在相关性。
[0359] 可选地,基于各个辐射点和各个受辐射点对应的辐射值,生成与热力图对应的热力纹理,并为热力纹理设置对应的热力材质,在虚幻引擎中生成与热力图对应的目标热力图之后,还包括:在虚幻引擎中生成一个与热力图对应的热力对象;其中,热力对象包括位置属性、网格属性和材质属性;基于热力尺寸,在虚幻引擎中生成热力图对应的网格顶点集合;其中,网格顶点集合中包括多个网格顶点;基于网格顶点集合,生成与热力对象对应的热力网格体;为热力网格体设置热力纹理和热力材质,生成热力网格体对应的目标热力图;其中,位置属性用于存储各个辐射点对应的点位位置,网格属性用于存储热力对象对应的热力网格体,材质属性用于存储热力材质。
[0360] 具体地,在虚幻引擎中生成一个与栅格数据相匹配的热力对象ADynamicActor,该热力对象ADynamicActor继承于虚幻引擎的基类对象AActor,其中,热力对象包括位置属性、网格属性和材质属性。
[0361] 进一步地,在虚幻引擎中生成一个与热力尺寸相匹配的网格体,确定网格体的顶点得到网格体顶点集合,其中,网格顶点集合中包括多个网格顶点,基于网格顶点集合,确定网格顶点集合对应的三角网格索引、以及网格顶点集合中每个网格顶点对应的纹理坐标和法线,利用程序化建模生成网格顶点集合对应的热力网格体,为热力网格体设置热力纹理和热力材质,生成热力网格体对应的目标热力图,通过创建热力网格体能够在虚幻引擎中将目标热力图创建于热力网格体对应的位置,以便于单独调用目标热力图。
[0362] 可以理解的是,位置属性用于存储各个辐射点对应的点位位置,网格属性用于存储热力对象对应的热力网格体,材质属性用于存储热力材质,从而为辐射点对应的点位位置、热力对象对应的热力网格体和热力材质提供存储空间。
[0363] 在一应用场景中,网格顶点集合中包括至少四个网格顶点,基于网格顶点集合,生成与热力对象对应的热力网格体,包括:基于网格顶点集合中所有网格顶点的位置,确定网格顶点集合对应的多个三角网格索引;基于网格顶点集合中的任一网格顶点的位置相对其他网格顶点的位置,确定网格顶点集合对应的纹理坐标;基于所有三角网格索引中三个网格顶点的位置,确定所有三角网格索引中各个网格顶点对应的法线;在虚幻引擎中,基于所有三角网格索引和各个网格顶点对应的法线和纹理坐标,生成与热力对象对应的热力网格体。
[0364] 具体地,基于热力尺寸构建的网格体为矩形或其他多边形,网格顶点集合中包括至少四个网格顶点,为便于说明,以网格体为正方形为例,热力尺寸的高为h宽为w,且h=w,网格顶点集合中的网格顶点分别为(0,0,0)、(0,h,0)、(w,h,0)和(w,0,0),网格顶点的编号为0、1、2和3,生成网格体的三角网格索引分别为0、1、2和2、3、0,以便基于三角网格索引来生成网格体,生成纹理坐标分别为(0,0)、(0,1)、(1,1)、(1,0),以便于进行纹理贴图,计算每个顶点对应的法线,以便于确定每个顶点对应的光照方向,输入上述步骤中生成的顶点、三角网格索引、纹理坐标和法线,使用虚幻引擎的程序化建模函数生成热力网格体。
[0365] 在一具体应用场景中,基于所有三角网格索引中三个网格顶点的位置,确定所有三角网格索引中各个网格顶点对应的法线,包括:基于各个三角网格索引中三个网格顶点对应的位置,将各个三角网格索引中的任一网格顶点与其他两个网格顶点之间的两个向量叉乘,并对叉乘结果归一化处理,得到所有网格顶点对应的法线。
[0366] 具体地,计算三角网格索引中每个网格顶点的法线,法线的计算方式为在该网格顶点所在的三角面上由该网格顶点与另外两个网格顶点组成的两个向量的叉乘,并对叉乘结果进行归一化处理,得到该网格顶点,以获得准确的法线位置。
[0367] 可以理解的是,在得到目标图标和目标热力图后,在虚拟模型中添加目标图标和目标热力图,以便于进行点位标定和确定密度信息。
[0368] 进一步地,在虚拟模型中添加目标图标和目标热力图之后,还包括:在虚幻引擎中启用天气控制插件,利用天气控制插件在虚拟模型中构建天气系统;其中,天气系统包括多种天气状况。
[0369] 具体地,在天气控制插件中创建天气预设集合,该集合相当于一组特定天气状况的参数集合,包括晴天、阴天、下雨、下雪、大雾等天气,在气控制插件中通过设置星球半径、编辑时间、天气预设选择,可以调用特定天气系统在指定时间的天气状况,将天气系统的参数设置接口通过UMG传递到运行界面,可实现在运行时切换天气系统的功能,以提高虚拟模型的逼真度。
[0370] 在一具体应用场景中,天气控制插件为虚幻模型中的SkyCreator插件,在插件中创建一个与地球大气圈匹配的天空球,通过设置天空球、天空大气、体积云、天光、太阳、月球、指数高度雾、星图、遮挡、风、天气特效、天气材料特效、接触等相关属性来模拟真实的天气状况。
[0371] 请参阅图11,图11是本申请电子设备一实施方式的结构示意图,该电子设备110包括相互耦接的存储器1101和处理器1102,其中,存储器1101存储有程序数据(图未示),处理器1102调用程序数据以实现上述任一实施例中的方法,相关内容的说明请参见上述方法实施例的详细描述,在此不再赘叙。
[0372] 请参阅图12,图12是本申请计算机可读存储介质一实施方式的结构示意图,该计算机可读存储介质120存储有程序数据1200,该程序数据1200被处理器执行时实现上述任一实施例中的方法,相关内容的说明请参见上述方法实施例的详细描述,在此不再赘叙。
[0373] 需要说明的是,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
[0374] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0375] 集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。