一种三维场景数据存储方法、装置、设备及存储介质与流程

文档序号:26437107发布日期:2021-08-27 13:34阅读:84来源:国知局
一种三维场景数据存储方法、装置、设备及存储介质与流程

本申请涉及数据处理技术领域,尤其涉及一种三维场景数据存储方法、装置、设备及存储介质。



背景技术:

场景数据存储,是场景数据管理中的重要处理内容,场景数据的存储方式,直接影响着场景数据的应用效果。尤其是在3d游戏场景、bim(buildinginformationmodeling,建筑信息模型)场景等三维场景管理中,对于场景数据的存储,直接影响着场景渲染效果。

通常,三维场景数据以空间数据结构的形式存储,在空间数据结构的各个节点中,分别存储部分场景物体信息。当利用场景数据渲染显示三维场景时,需要对整个空间数据结构进行渲染,由于渲染数据集中且数据量大,导致渲染效率不高,用户观感较差。



技术实现要素:

基于上述技术现状,本申请提出一种三维场景数据存储方法、装置、设备及存储介质,对三维场景数据的存储进行改进,从而提升三维场景渲染效率。

一种三维场景数据存储方法,包括:

将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的各个数据集合;

其中,所述待存储场景空间,为包含所述目标场景中的所有未存储的物体的场景空间;所述目标物体为表面积最大的前n个物体,所述表面积最大的前n个物体的表面积之和不超过设定阈值,n为正整数。

一种三维场景数据存储装置,包括:

分布存储单元,用于将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的各个数据集合;

其中,所述待存储场景空间,为包含所述目标场景中的所有未存储的物体的场景空间;所述目标物体为表面积最大的前n个物体,所述表面积最大的前n个物体的表面积之和不超过设定阈值,n为正整数。

一种三维场景数据存储设备,包括:

存储器和处理器;

其中,所述存储器与所述处理器连接,用于存储程序;

所述处理器,用于通过运行所述存储器中的程序,实现上述的三维场景数据存储方法。

一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现上述的三维场景数据存储方法。

本申请提出的三维场景数据存储方法,彻底改变了三维场景数据的空间数据结构形式,在存储目标场景的数据时,将目标场景的各个待存储场景空间中的目标物体,以及待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的数据集合。该数据存储方式对目标场景进行场景空间划分存储,使得任意一个数据集合被渲染时,均可以显示出完整的目标场景中的部分场景空间中的较大的若干个物体。该数据存储方式打破了整个目标场景中的所有物体的强关联性,使其分散存储,这样更加有利于有选择、有顺序地进行场景物体渲染,从而提高渲染速度。

进一步的,由于上述的三维场景数据存储方法使得对三维场景数据的存储更有利于有选择、有顺序地进行场景渲染,从而提高渲染速度,因此,采用该三维场景数据存储方法,使得在轻量设备,例如手机、平板等设备上进行三维场景渲染成为可能。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1是本申请实施例提供的一种三维场景数据存储方法的流程示意图;

图2是本申请实施例提供的另一种三维场景数据存储方法的流程示意图;

图3是本申请实施例提供的确定子空间划分方向的示意图;

图4是本申请实施例提供的子空间划分示意图;

图5是本申请实施例提供的子空间分组示意图;

图6是本申请实施例提供的三维场景数据存储装置的结构示意图;

图7是本申请实施例提供的三维场景数据存储设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例提出一种三维场景数据存储方法,参见图1所示,该方法包括:

s101、获取目标场景数据。

具体的,上述的目标场景,可以是任意包含可见的物体的视觉场景,在本申请实施例中,该目标场景特指三维空间场景,例如虚拟的3d游戏界面场景、bim三维场景、或者是vr视场场景等。

该目标场景数据,包括该目标场景的整体场景数据,以及该目标场景中的所有可视物体的尺寸、位置、材质、颜色等一切相关信息。

可以理解,该目标场景数据,包含了该目标场景中的所有数据信息,利用该目标场景数据,可以完全渲染、复现出该目标场景。

s102、将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的各个数据集合。

其中,上述的待存储场景空间,是指待将其中包含的物体的数据进行存储的场景空间,可以理解,该待存储场景空间是由目标场景中的未存储的物体所界定的场景空间,本申请实施例规定,在目标场景中,包含所有未存储的物体的最小场景空间,即为待存储场景空间。待存储场景空间,是目标场景中的部分场景空间,其可以理解为是目标场景的子空间,对目标场景的各个场景空间的数据分别进行存储,可以实现对目标场景数据的存储。

上述的各个待存储场景空间的划分,可以是在对目标场景数据进行存储之前统一进行划分,也可以是在对目标场景数据进行存储过程中,随着被存储的物体以及未存储物体的更新,而实时更新得到待存储场景空间。

上述的待存储场景空间中的目标物体,是指待存储场景空间所包含的各个物体中的、表面积最大的前n个物体,并且,该表面积最大的前n个物体的表面积之和不超过设定阈值。

上述的物体的表面积,是指在三维场景中,例如在bim场景中,物体表面显示的一系列三角形面片的面积总和。

上述的设定阈值的设置,以单个数据集合可存储的数据量,和/或渲染引擎处理性能而决定,具体的,以能够将上述的n个物体存储至同一数据集合,并且能够通过渲染引擎单次将该数据集合中的物体渲染显示为准,设置该设定阈值的大小。

上述的待存储场景空间的包围盒,是指能够同时包围待存储空间的各个物体的几何体,该几何体通常为立方体。该包围盒信息,是指包围盒各个顶点的位置坐标、各个边长等参数信息。

可以理解,待存储场景空间的包围盒信息,能够表示待存储场景空间的范围、大小等参数信息。

本申请实施例设定,对于上述的各个待存储场景空间,分别为其配置一个对应的数据集合,用于存储待存储场景空间的相关信息。

具体的,对于目标场景的每个待存储场景空间,本申请实施例将其中的目标物体,以及该待存储场景空间的包围盒信息,存储至与该待存储场景空间对应的数据集合。

经过上述处理,每个待存储场景空间分别对应一个数据集合,在与待存储场景空间对应的数据集合中,存储着待存储场景空间中的目标物体,以及待存储场景空间的包围盒信息。

由于每个数据集合中,均存储着对应场景空间的表面积最大的若干个物体,因此,将任意一个数据集合中的数据进行渲染显示,均可以快速渲染出某一场景空间的表面积较大的若干个物体。如果在三维场景渲染过程中,能够首先渲染出场景内表面积最大的几个物体,则在用户视角来说,能够快速、直观地观看到场景较大的物体显示出来,从而能够给用户带来渲染速度很快的视觉体验。

通过上述介绍可见,本申请实施例提出的三维场景数据存储方法,彻底改变了三维场景数据的空间数据结构形式,在存储目标场景的数据时,将目标场景的各个待存储场景空间中的目标物体,以及待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的数据集合。该数据存储方式对目标场景进行场景空间划分存储,使得任意一个数据集合被渲染时,均可以显示出完整的目标场景中的部分场景空间中的较大的若干个物体。该数据存储方式打破了整个目标场景中的所有物体的强关联性,使其分散存储,这样更加有利于有选择、有顺序地进行场景物体渲染,从而提高渲染速度。

进一步的,由于上述的三维场景数据存储方法使得对三维场景数据的存储更有利于有选择、有顺序地进行场景渲染,从而提高渲染速度,因此,采用该三维场景数据存储方法,使得在轻量设备,例如手机、平板等设备上进行三维场景渲染成为可能。

作为一种可选的处理方式,当获取目标场景数据后,本申请实施例在对目标场景数据进行存储之前,先从目标场景中的所有物体中,确定出待存储物体集合。

其中,上述的待存储物体集合,是指目标场景中的、当前批次需要存储的物体构成的集合。

可以认为,当从目标场景的所有物体中,确定出待存储物体集合时,该待存储物体集合中的所有物体,即为目标场景当前需要存储的所有物体。当待存储物体集合发生改变时,目标场景当前需要存储的所有物体也相应改变。因此,通过更新该待存储物体集合,并针对每个待存储物体集合,分别按照本申请实施例技术方案进行三维数据存储,可以实现对目标场景的所有物体的存储。

当上述的待存储物体集合确定时,当前的场景数据存储所对应的所有物体也就确定。此时,上述的待存储场景空间,所包含的目标场景中的所有未存储的物体,也就是该待存储物体集合中的所有未存储的物体。即,此时该待存储场景空间,为包含上述待存储物体集合中的所有未存储的物体的场景空间。

作为一种示例性的实现方式,本申请实施例按照如下步骤ss10~ss11的处理,从目标场景中的所有物体中,确定出待存储物体集合:

ss10、将目标场景中的物体的坐标转换为世界坐标。

具体的,通常状况下,目标场景中的每个物体都有自己的坐标表示,即每个物体都是基于自身坐标系而记录的位置坐标、尺寸等。为了对整个目标场景的物体进行统一存储,本申请实施例首先对目标场景中的物体的坐标进行转换,统一转换为世界坐标,从而实现了目标场景中的各物体的坐标的统一。

ss11、根据所述目标场景中的物体的世界坐标及材质,从所述目标场景中的所有物体中,确定出待存储物体集合。

具体的,由于不同材质的物体在渲染时的显示效果不同,因此渲染效率、渲染顺序不同,本申请实施综合考虑目标场景中的物体的世界坐标和材质,从目标场景中筛选物体,构成待存储物体集合。

作为一种示例性的实现方式,本申请实施例根据目标场景中的物体的材质,将目标场景中的物体分为透明物体和不透明物体。

然后,将透明物体构成一个物体集合,将不透明物体构成一个物体集合,并且,将透明物体集合和不透明物体集合,分别作为待存储物体集合。

基于上述的物体集合划分,当对目标场景中的物体进行存储和渲染时,先对不透明物体集合进行存储和渲染,后对透明物体集合进行存储和渲染。

最后,当上述的待存储物体集合确定时,本申请实施例还对该待存储物体集合中的各个物体进行排序,具体为,按照表面积从大到小的顺序,对待存储物体集合中的物体进行排列,使得该待存储物体集合中的物体呈表面积降序的序列形式。

对待存储物体集合中的物体按照表面积降序排列,有利于后续在对该待存储物体集合中的物体进行存储时,确定表面积最大的前n个物体进行存储。

作为一种示例性的实现方式,本申请实施例将空间数据结构中的节点,分别作为上述的数据集合,用于存储与之对应的待存储场景空间的目标物体,以及待存储场景空间的包围盒信息。

则,上述的将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的各个数据集合,具体为:

将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的空间数据结构节点中。

示例性的,上述的空间数据结构,可以为二叉树结构、四叉树结构、八叉树结构等任意可用的空间数据结构。本申请实施例并没有对空间数据结构的结构形式进行改进,而只是对空间数据结构的节点中存储的数据内容进行特殊设置。因此,该空间数据结构可以采用常规的空间数据结构形式。

作为一种优选的实现方式,本申请实施例采用二叉树形式的空间数据结构,即,上述的空间数据结构为二叉树数据结构。

则,上述的将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的空间数据结构节点中,具体包括:

循环地根据所述目标场景中的未存储的物体,从所述目标场景中确定出待存储场景空间,并将确定出的待存储场景空间中的目标物体以及待存储场景空间的包围盒信息,存储至与确定出的待存储场景空间对应的二叉树节点中,直至将所述目标场景中的所有物体均存储至二叉树中。

具体的,本申请实施例在目标场景数据存储过程中,实时更新待存储场景空间,并将更新后的待存储场景空间的目标物体以及待存储场景空间的包围盒信息,存储至待存储场景空间对应的二叉树节点中。

在此基础上,根据目标场景中未存储的物体,再次更新待存储场景空间,并对更新后的待存储场景空间的目标物体以及包围盒信息进行存储。

因此类推,不断地循环更新待存储场景空间,并对更新的待存储场景空间的目标物体和包围盒信息进行存储,直至将目标场景中的所有物体均存储至二叉树中。

参见图2所示,上述的数据存储过程,具体可按照如下步骤进行:

s202、根据所述目标场景中的未存储的物体,从所述目标场景中确定出第i待存储场景空间,所述第i待存储场景空间对应二叉树中的i节点。

上述的i,对应第i次数据存储操作,因此i为正整数。如果当前数据存储操作,为针对目标场景进行的第一次数据存储操作,则i=1;如果当前数据存储操作为针对目标场景进行的第二次数据存储操作,则i=2,以此类推,根据数据存储操作的执行次数,可以确定相应的i的取值。

每次数据存储操作,均是对应某一待存储场景空间的数据存储操作,因此,每一待存储场景空间,均唯一对应一个二叉树节点。

当i=1时,目标场景中的未存储的物体,为目标场景中的所有物体,此时,该目标场景即为待存储场景空间,由于是第一次执行数据存储操作,因此该待存储场景空间对应二叉树中的第一个节点,也就是根节点。

s203、将所述第i待存储场景空间中的目标物体,以及所述第i待存储场景空间的包围盒信息,存储至所述二叉树的i节点中。

具体的,从第i待存储场景空间中,选取表面积最大的,并且表面积之和不超过设定阈值的前n个物体,作为目标物体。同时,计算第i待存储场景空间的包围盒信息,并将第i待存储场景空间中的目标物体,以及第i待存储场景空间的包围盒信息,一起存储至与第i待存储场景空间对应的二叉树节点中,也就是存储至二叉树的i节点中。

例如,假设i=1,则从目标场景中,选取表面积最大的,并且表面积之和不超过设定阈值的前n个物体,存储至二叉树根节点中,同时,将目标场景的包围盒信息,存储至二叉树根节点中,即完成了第一次数据存储操作。

s204、根据所述目标场景中剩余的未存储的物体,从所述目标场景中确定出第i+1待存储场景空间。

具体的,当完成第i次的数据存储操作后,对于目标场景中的剩余的未存储的物体,重新计算待存储场景空间,即,将目标场景中剩余的未存储的物体所在的场景空间,作为第i+1待存储场景空间。

s205、将所述第i+1待存储场景空间中的目标物体,以及所述第i+1待存储场景空间的包围盒信息,存储至所述二叉树的j节点和k节点。

其中,所述j节点和所述k节点,分别为所述i节点的叶子节点。

具体的,从第i+1待存储场景空间中,筛选出表面积最大的、面积总和不超过设定阈值的n个物体,将该n个物体以及第i+1待存储场景空间的包围盒信息,存储到与第i+1待存储场景空间对应的二叉树节点中。

其中,第i+1待存储场景空间对应的节点,为第i待存储场景空间对应的节点的叶子节点,假设i节点的叶子节点为j节点和k节点,则将第i+1待存储场景空间中的目标物体以及第i+1待存储场景空间的包围盒信息,存储至j节点和k节点。

s206、判断目标场景中的所有物体是否均已存储至二叉树中;

如果是,则执行步骤s207、结束数据存储操作。

如果否,则返回步骤s204,重复执行步骤s204~s206,直到将目标场景中的所有物体存储至二叉树中。

图2所示的方法实施例中的步骤s201与图1所示的方法实施例中的步骤s101相对应,其具体内容请参见图1所示的方法实施例的内容,此处不再赘述。

在图2所示的方法实施例中,对于第i+1待存储场景空间,会将其目标物体和包围盒信息存储至两个二叉树节点中,此时涉及到该待存储场景空间数据向两个子节点(j节点和k节点)的分配问题。

作为一种示例性的实现方式,本申请实施例将第i+1待存储场景空间划分为第一待存储场景子空间,以及第二待存储场景子空间。

然后,将第一待存储场景子空间中的目标物体,以及第一待存储场景子空间的包围盒信息,存储至二叉树的j节点,同时,将第二待存储场景子空间中的目标物体,以及第二待存储场景子空间的包围盒信息,存储至二叉树的k节点,由此实现了一个待存储场景空间的数据,向两个二叉树节点的存储。

可选的,上述的将第i+1待存储场景空间划分为第一待存储场景子空间和第二待存储场景子空间,具体可按照如下步骤ss20~ss23执行:

ss20、根据所述第i+1待存储场景空间中的物体的分布位置,确定对所述第i+1待存储场景空间进行划分的划分方向。

具体的,对于任意的待存储场景空间来说,其中包含的物体,大体可以分为横向分布和纵向分布两种分布形态。横向分布,即物体沿横向分布的长度大于沿纵向分布的长度;纵向分布,即物体沿纵向分布的长度大于沿横向分布的长度。

基于上述的分布规律,本申请实施例将第i+1待存储场景空间中的物体的分布方向,作为对待存储场景空间进行划分的划分方向,也就是,将第i+1待存储场景空间中的所有物体的最长分布方向,作为划分方向。

例如,假设待存储场景空间中的物体的分布情况如图3所示,则计算各个物体的包围盒中心点,然后根据各个物体的包围盒中心点,分别确定在该场景空间中的物体沿x轴方向的分布长度,以及沿y轴方向的分布长度,取其中分布长度较长的分布方向,作为对该待存储场景空间的划分方向。由图3可见,该待存储场景空间的物体沿y轴方向的分布长度大于沿x轴方向的分布长度,因此将y轴方向,作为对该待存储场景空间进行划分的划分方向。

可以理解,上述介绍仅以横向和纵向两个方向为例,介绍如何从中确定出对待存储场景空间的划分方向。在实际情况中,待存储场景空间中的物体的分布可以是任意形式的,因此,对待存储场景空间的划分方向也可能是除横向和纵向之外的任意其他方向。

ss21、按照所述划分方向,将所述第i+1待存储场景空间划分为设定数量的子空间。

具体的,上述的设定数量,可以根据第i+1待存储场景空间的大小,以及运行本申请实施例提出的三维场景数据存储方法的装置的处理性能而确定。当待存储场景空间较大、或者装置的处理性能较强时,可以划分较多的子空间;当待存储场景空间较小、或者装置的处理性能较弱时,可以划分较少的子空间。

例如图4所示,图中纵向实线为划分线,方框表示物体包围盒,方框中的实心点表示物体中心点。利用纵向划分线,将第i+1待存储场景空间划分为设定数量的子空间。

ss22、将所述设定数量的子空间分为两组,并对每种分组方式的分组成本进行分析。

其中,分组成本与分组得到的两组子空间中的物体的包围盒紧凑程度成反比。

具体的,基于上述的子空间划分结果,将划分得到的设定数量的子空间分为两组,其分组依据是,使得任意的物体均明确归属于划分得到的任意一组,而不存在跨越分组界限的情况。

依照上述分组原则,可以得到多种不同的分组方式。例如图5所示,为两种不同的子空间分组方案得到的分组结果。每一种分组方案,均得到左(l)右(r)两组子空间,对左(l)右(r)两组子空间中的物体计算包围盒,可以得到左(l)右(r)两个包围盒。

当存在多种不同的子空间分组方案时,本申请实施例从中选择较优选的分组方案,作为最终采用的子空间分组方案。

作为一种示例性的实现方式,本申请实施例以分组成本,作为度量分组方案优劣的依据。

具体的,计算每种分组方式的分组成本,然后从中选择分组成本最低的分组方式,作为最终采用的分组方式。

本申请实施例以分组得到的两组子空间中的物体的包围盒的紧凑程度,表示分组成本,并且,本申请实施例设定,分组得到的两组子空间中的物体的包围盒越紧凑,分组成本越低;分组得到的两组子空间中的物体的包围盒越分散,分组成本越高。

可选的,对于每组子空间中的物体的包围盒紧凑程度,本申请实施例按照如下方式确定:

分别确定每组子空间中的所有物体的包围盒的表面积,以及每组子空间中的物体数量。然后,将每组子空间中的所有物体的包围盒的表面积,以及每组子空间中的物体数量的乘积,作为每组子空间中的物体的包围盒紧凑程度。

基于上述方式,划分得到的两组子空间中的物体的包围盒紧凑程度,为每组子空间中的物体的包围盒紧凑程度之和。

例如,假设al表示划分得到的左侧子空间的所有物体的包围盒表面积;nl表示划分得到的左侧子空间的所有物体数量;ar表示示划分得到的右侧子空间的所有物体的包围盒表面积;nr表示划分得到的右侧子空间的所有物体数量。则,按照该子空间分组方式划分得到的两组子空间中的物体的包围盒紧凑程度,也就是该子空间分组方式的分组成本为:

cost(l,r)=al*nl+ar*nr

按照上述方式,可以分别计算确定每种子空间分组方式的分组成本。

ss23、将按照分组成本最低的分组方式划分得到的两组子空间,分别设定为第一待存储场景子空间和第二待存储场景子空间。

具体的,按照上述的每种分组方式的分组成本的计算结果,从中选择分组成本最低的分组方式,对划分后的各个子空间进行分组,得到两组子空间,将该两组子空间分别设定为第一待存储场景子空间,以及第二待存储场景子空间,也就是,将图5所示的l和r包围盒所在的子空间,分别作为第一待存储场景子空间和第二待存储场景子空间。

可以理解,由于本申请实施例采用二叉树数据结构存储三维场景数据,因此,当将某一待存储场景空间存储到两个二叉树节点时,需要将该待存储场景空间划分为两个子空间,该子空间划分方式可以参照上述实施例介绍。当采用其他形式的空间数据结构存储三维场景数据时,可以结合实际情况,确定子空间划分数量。例如,假设采用四叉树数据结构存储三维场景数据,则可能需要将待存储场景空间划分为4个子空间;如果采用八叉树数据结构存储三维场景数据,则可能需要将待存储场景空间划分为8个子空间。当子空间划分数量不同时,均可以参照本申请上述实施例介绍的子空间划分原则进行划分,本申请实施例不再一一详述。

基于上述的三维场景数据存储方法,本申请另一实施例还提出的基于该三维场景数据存储方法,如何进行三维场景渲染显示。

当按照本申请上述实施例介绍,将目标场景数据存储到各个数据集合后,当观察者观察该目标场景而需要对该目标场景进行渲染显示时,根据该目标场景的观察者的视角,对存储该目标场景数据的各个数据集合中的物体进行渲染显示。

可以理解,当目标场景的观察者的视角发生变化时,观察者视线内的物体分布不同,因此,应当根据观察者视角,首先渲染观察者视线范围内的物体,然后渲染观察者视线范围之外的物体,以便使观察者能够尽快地看到视线范围内的物体。

示例性的,当根据目标场景的观察者的视角,对各个数据集合中存储的物体进行渲染显示时,先根据目标场景的观察者视角,确定投影视图矩阵,该投影视图矩阵,可以用于将世界坐标转换为摄像机坐标,也就是转换为视坐标,从而确定用户视线范围内的坐标参数。该投影视图矩阵的确定,可以参照常规的摄像机投影成像方法中相关的视图矩阵确定方案而确定。

然后,根据各个数据集合中存储的包围盒信息,以及投影视图矩阵,分别确定各个数据集合中的包围盒投影到屏幕上的面积。

具体的,将各个数据集合中存储的包围盒,分别乘以上述的投影视图矩阵,计算得到各个数据集合中的包围盒投影到屏幕上的面积。可以理解,包围盒投影到屏幕上的面积,表示包围盒中的物体被用户看到的面积。由于每个数据集合分别对应一个场景空间,因此,数据集合中的包围盒投影到屏幕上的面积,也就是该数据集合对应的场景空间被用户看到的面积。

在分别确定各个数据集合中的包围盒投影到屏幕上的面积后,本申请实施例将各个数据集合,按照其包围盒投影到屏幕上的面积进行排序,并按照排序结果依次对各个数据集合中的物体进行渲染显示。

当用户视角发生变化时需要重新确定投影视图矩阵,以及重新对各个数据集合进行排序渲染显示,从而保证优先渲染显示的,始终是投影至用户视线范围内的表面积较大的物体,这样对于用户视角来说,其总能够第一时间看到视场范围内的场景中的较大物体,给用户带来渲染显示很迅速的感受。

可以理解,将各个数据集合中的物体经过上述排序后进行渲染显示,可以使得投影到用户视线范围内的投影面积最大的物体优先显示,而投影面积较小的物体后续显示,由此可以使得用户优先看到自己感兴趣的大面积物体,从而可以提升用户对三维场景的渲染显示的观感。

与上述的三维场景数据存储方法相对应的,本申请实施例还提出一种三维场景数据存储装置,参见图6所示,该装置包括:

分布存储单元100,用于将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的各个数据集合;

其中,所述待存储场景空间,为包含所述目标场景中的所有未存储的物体的场景空间;所述目标物体为表面积最大的前n个物体,所述表面积最大的前n个物体的表面积之和不超过设定阈值,n为正整数。

本申请实施例提出的三维场景数据存储装置,彻底改变了三维场景数据的空间数据结构形式,在存储目标场景的数据时,将目标场景的各个待存储场景空间中的目标物体,以及待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的数据集合。该数据存储方式对目标场景进行场景空间划分存储,使得任意一个数据集合被渲染时,均可以显示出完整的目标场景中的部分场景空间中的较大的若干个物体。该数据存储方式打破了整个目标场景中的所有物体的强关联性,使其分散存储,这样更加有利于有选择、有顺序地进行场景物体渲染,从而提高渲染速度。

进一步的,由于上述的三维场景数据存储装置使得对三维场景数据的存储更有利于有选择、有顺序地进行场景渲染,从而提高渲染速度,因此,采用该三维场景数据存储装置,使得在轻量设备,例如手机、平板等设备上进行三维场景渲染成为可能。

作为一种可选的实现方式,该装置还包括:

物体选择单元,用于从目标场景中的所有物体中,确定出待存储物体集合;

则,所述待存储场景空间,为包含所述待存储物体集合中的所有未存储的物体的场景空间。

作为一种可选的实现方式,所述从目标场景中的所有物体中,确定出待存储物体集合,包括:

将目标场景中的物体的坐标转换为世界坐标;

根据所述目标场景中的物体的世界坐标及材质,从所述目标场景中的所有物体中,确定出待存储物体集合。

作为一种可选的实现方式,所述根据所述目标场景中的物体的世界坐标及材质,从所述目标场景中的所有物体中,确定出待存储物体集合,包括:

根据所述目标场景中的物体的材质,将所述目标场景中的物体分为透明物体和不透明物体;

将各个透明物体构成的物体集合,以及各个不透明物体构成的物体集合,分别确定为待存储物体集合;

将所述待存储物体集合中的各个物体,按照表面积降序排列。

作为一种可选的实现方式,所述将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的各个数据集合,包括:

将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的空间数据结构节点中。

作为一种可选的实现方式,所述空间数据结构为二叉树数据结构;

所述将目标场景的各个待存储场景空间中的目标物体,以及各个待存储场景空间的包围盒信息,分别存储至与各个待存储场景空间对应的空间数据结构节点中,包括:

循环地根据所述目标场景中的未存储的物体,从所述目标场景中确定出待存储场景空间,并将确定出的待存储场景空间中的目标物体以及待存储场景空间的包围盒信息,存储至与确定出的待存储场景空间对应的二叉树节点中,直至将所述目标场景中的所有物体均存储至二叉树中。

作为一种可选的实现方式,所述循环地根据所述目标场景中的未存储的物体,从所述目标场景中确定出待存储场景空间,并将确定出的待存储场景空间中的目标物体以及待存储场景空间的包围盒信息,存储至与确定出的待存储场景空间对应的二叉树节点中,包括:

循环执行以下操作:

根据所述目标场景中的未存储的物体,从所述目标场景中确定出第i待存储场景空间,所述第i待存储场景空间对应二叉树中的i节点;

将所述第i待存储场景空间中的目标物体,以及所述第i待存储场景空间的包围盒信息,存储至所述二叉树的i节点中;

根据所述目标场景中剩余的未存储的物体,从所述目标场景中确定出第i+1待存储场景空间;

将所述第i+1待存储场景空间中的目标物体,以及所述第i+1待存储场景空间的包围盒信息,存储至所述二叉树的j节点和k节点,其中,所述j节点和所述k节点,分别为所述i节点的叶子节点;

其中,i、j、k均为正整数。

作为一种可选的实现方式,所述将所述第i+1待存储场景空间中的目标物体,以及所述第i+1待存储场景空间的包围盒信息,存储至所述二叉树的j节点和k节点,包括:

将所述第i+1待存储场景空间划分为第一待存储场景子空间和第二待存储场景子空间;

将所述第一待存储场景子空间中的目标物体,和所述第一待存储场景子空间的包围盒信息,存储至所述二叉树的j节点,以及,将所述第二待存储场景子空间中的目标物体,和所述第二待存储场景子空间的包围盒信息,存储至所述二叉树的k节点。

作为一种可选的实现方式,所述将所述第i+1待存储场景空间划分为第一待存储场景子空间和第二待存储场景子空间,包括:

根据所述第i+1待存储场景空间中的物体的分布位置,确定对所述第i+1待存储场景空间进行划分的划分方向;

按照所述划分方向,将所述第i+1待存储场景空间划分为设定数量的子空间;

将所述设定数量的子空间分为两组,并对每种分组方式的分组成本进行分析;其中,分组成本与分组得到的两组子空间中的物体的包围盒紧凑程度成反比;

将按照分组成本最低的分组方式划分得到的两组子空间,分别设定为第一待存储场景子空间和第二待存储场景子空间。

作为一种可选的实现方式,所述装置还包括:

渲染处理单元,用于根据所述目标场景的观察者的视角,对所述各个数据集合中存储的物体进行渲染显示。

作为一种可选的实现方式,所述根据所述目标场景的观察者的视角,对所述各个数据集合中存储的物体进行渲染显示,包括:

根据所述各个数据集合中存储的包围盒信息,以及投影视图矩阵,分别确定所述各个数据集合中的包围盒投影到屏幕上的面积;

将所述各个数据集合,按照其包围盒投影到屏幕上的面积进行排序,并按照排序结果依次对各个数据集合中的物体进行渲染显示。

上述的三维场景数据存储装置的各个单元的具体工作内容,请参见上述方法实施例的内容,此处不再赘述。

本申请另一实施例还公开了一种三维场景数据存储设备,参见图7所示,该设备包括:

存储器200和处理器210;

其中,所述存储器200与所述处理器210连接,用于存储程序;

所述处理器210,用于通过运行所述存储器200中存储的程序,实现上述任一实施例公开的三维场景数据存储方法。

具体的,上述目标检测结果的评测设备还可以包括:总线、通信接口220、输入设备230和输出设备240。

处理器210、存储器200、通信接口220、输入设备230和输出设备240通过总线相互连接。其中:

总线可包括一通路,在计算机系统各个部件之间传送信息。

处理器210可以是通用处理器,例如通用中央处理器(cpu)、微处理器等,也可以是特定应用集成电路(application-specificintegratedcircuit,asic),或一个或多个用于控制本发明方案程序执行的集成电路。还可以是数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

处理器210可包括主处理器,还可包括基带芯片、调制解调器等。

存储器200中保存有执行本发明技术方案的程序,还可以保存有操作系统和其他关键业务。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器200可以包括只读存储器(read-onlymemory,rom)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(randomaccessmemory,ram)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器、flash等等。

输入设备230可包括接收用户输入的数据和信息的装置,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入装置、触摸屏、计步器或重力感应器等。

输出设备240可包括允许输出信息给用户的装置,例如显示屏、打印机、扬声器等。

通信接口220可包括使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(ran),无线局域网(wlan)等。

处理器2102执行存储器200中所存放的程序,以及调用其他设备,可用于实现本申请实施例所提供的三维场景数据存储方法的各个步骤。

本申请另一实施例还提供了一种存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时,实现上述任一实施例提供的三维场景数据存储方法的各个步骤。

上述的三维场景数据存储设备的各个部分的具体工作内容,以及上述的存储介质中的程序被处理器运行时的具体处理内容,均可参见上述方法实施例的内容,此处不再重复。

对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本申请各实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减,各实施例中记载的技术特征可以进行替换或者组合。

本申请各实施例种装置及终端中的模块和子模块可以根据实际需要进行合并、划分和删减。

本申请所提供的几个实施例中,应该理解到,所揭露的终端,装置和方法,可以通过其它的方式实现。例如,以上所描述的终端实施例仅仅是示意性的,例如,模块或子模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个子模块或模块可以结合或者可以集成到另一个模块,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的模块或子模块可以是或者也可以不是物理上分开的,作为模块或子模块的部件可以是或者也可以不是物理模块或子模块,即可以位于一个地方,或者也可以分布到多个网络模块或子模块上。可以根据实际的需要选择其中的部分或者全部模块或子模块来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能模块或子模块可以集成在一个处理模块中,也可以是各个模块或子模块单独物理存在,也可以两个或两个以上模块或子模块集成在一个模块中。上述集成的模块或子模块既可以采用硬件的形式实现,也可以采用软件功能模块或子模块的形式实现。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件单元,或者二者的结合来实施。软件单元可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1