3D场景分块加载方法及其系统与流程

文档序号:17282287发布日期:2019-04-03 01:14阅读:287来源:国知局
3D场景分块加载方法及其系统与流程

本发明涉及虚拟现实技术领域,尤其涉及一种3D场景分块加载方法及其系统。



背景技术:

近年来,3D技术和虚拟现实技术获得了快速发展,3D场景也日益复杂化和大型化。如何通过网页呈现大型3D场景正成为重要课题。flash播放器作为一种浏览器插件,覆盖率极高,是非常重要的网页3D内容播放工具。然而,由于flash固有的承载能力限制,无法直接支持大型3D场景;若能找到有效的方法降低实时承载压力,则可将更大的3D场景搬到网页,供用户通过flash播放器观看。

在公开号为CN102411792A的中国专利公开文件中,提出了一种虚拟仿真场景多水平动态加载卸载方法,根据用户电脑配置定义一个半径参数a,在建模软件的三维坐标系中,以长度b将整个场景在Z轴上划分为若干个水平块,根据长度c将上述若干个水平块在X轴上划分为若干段,根据长度d将上述若干个水平块在Y轴上划分为若干段,即将整个三维场景划分为位于不同水平的若干个场景块,当摄像机在Z轴上的高度处于某一水平块的Z轴范围内时,若摄像机与此块内的某一场景块的距离小于半径a,程序即加载此场景块,否则程序即卸载此场景块。但该方案主要实现对资源的管理,无法保证观察者的视觉体验。



技术实现要素:

本发明所要解决的技术问题是:提出一种3D场景分块加载方法及其系统,在系统承载能力一定的情况下,能够获得较好的视觉体验。

为了解决上述技术问题,本发明采用的技术方案为:一种3D场景分块加载方法,包括:

建立三维直角坐标系,其中,x轴沿场景的长度方向设置,y轴沿场景的高度方向设置,z轴沿场景的宽度方向设置;

将所述场景分割成底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块;

获取各个矩形体区块所对应的场景数据;

根据摄像机当前的视点位置和视角方向,计算得到加载基准点;

加载所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块对应的场景数据。

本发明还涉及一种3D场景分块加载系统,包括:

建立模块,用于建立三维直角坐标系,其中,x轴沿场景的长度方向设置,y轴沿场景的高度方向设置,z轴沿场景的宽度方向设置;

分割模块,用于将所述场景分割成底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块;

获取模块,用于获取各个矩形体区块所对应的场景数据;

计算模块,用于根据摄像机当前的视点位置和视角方向,计算得到加载基准点;

加载模块,用于加载所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块对应的场景数据。

本发明的有益效果在于:根据摄像机的视点位置和视角方向,实时确定一加载基准点,并根据加载基准点,对应加载以加载基准点所在区块为中心的九块区块的场景数据,保证了从视点出发,以视角方向为中心线,90°范围内总能观察到范围较大、距离较近的场景,使观察者能够获得较好的视觉体验。

附图说明

图1为本发明一种3D场景分块加载方法的流程图;

图2为本发明实施例一的方法流程图;

图3为本发明实施例二的方法流程图;

图4为本发明实施例二加载区块的示意图;

图5为本发明一种3D场景分块加载系统的结构示意图;

图6为本发明实施例三的系统结构示意图。

标号说明:

1、建立模块;2、分割模块;3、获取模块;4、计算模块;5、加载模块;6、比较模块;7、分配模块;8、选择模块;9、释放模块;

41、第一获取单元;42、第一得到单元;43、计算单元;44、第二得到单元。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。

本发明最关键的构思在于:根据摄像机的视点位置和视角方向,实时确定一加载基准点。

请参阅图1,一种3D场景分块加载方法,包括:

建立三维直角坐标系,其中,x轴沿场景的长度方向设置,y轴沿场景的高度方向设置,z轴沿场景的宽度方向设置;

将所述场景分割成底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块;

获取各个矩形体区块所对应的场景数据;

根据摄像机当前的视点位置和视角方向,计算得到加载基准点;

加载所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块对应的场景数据。

从上述描述可知,本发明的有益效果在于:加载以加载基准点所在区块为中心的九块区块的场景数据,保证了从视点出发,以视角方向为中心线,90°范围内总能观察到范围较大、距离较近的场景,使观察者能够获得较好的视觉体验。

进一步地,所述“将所述场景分割成底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块”具体为:

通过垂直于所述坐标系中一坐标轴的第一分割面和垂直于另外两条坐标轴中任一条坐标轴的第二分割面对场景进行分割,相邻的所述第一分割面的间距与相邻的所述第二分割面的间距相同,得到底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块,所述底面为正方形,且任意3×3的所述矩形体区块对应的场景数据的数据总量不大于系统承载能力。

由上述描述可知,在系统承载能力一定的情况下,可使观察者获得较好的视觉体验。

进一步地,所述“获取各个矩形体区块所对应的场景数据”之后,进一步包括:

若场景中的一物体处于第一分割面上、第二分割面上或第一分割面和第二分割面的交线上,则比较与所述第一分割面、第二分割面或所述交线相邻的矩形体区块对应的场景数据的数据量大小;

将所述一物体的全部数据分配至数据量最小的矩形体区块中。

由上述描述可知,通过将处于分割面上的物体分配至与其相邻的数据量最小的矩形体区块中,可保证物体的完整性,进一步提高观察者的视觉体验。

进一步地,所述“根据摄像机当前的视点位置和视角方向,计算得到加载基准点”具体为:

确定摄像机当前的视点位置,并获取所述视点位置的位置向量OP;

根据摄像机的运动状态,实时获取摄像机绕x轴旋转的第一旋转角度、绕y轴旋转的第二旋转角度和绕z轴旋转的第三旋转角度,得到摄像机当前的视角方向的方向向量OD;

根据公式计算加载基准点的位置向量OL,其中,OD.x为视角方向的方向向量OD在x轴上的分量,OD.z为视角方向的方向向量OD在z轴上的分量,a为矩形体区块的正方形底面的边长;

根据所述加载基准点的位置向量OL,得到加载基准点。

由上述描述可知,根据摄像机视点位置和视角方向,实时计算得到一加载基准点,从而实时确定出需要加载的区块。

进一步地,所述“加载所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块的场景数据”之前,进一步包括:

若所述加载基准点处于第一分割面上、第二分割面上或第一分割面和第二分割面的交线上,则根据所述视角方向,选择位于视角方向的延伸方向且与所述第一分割面、第二分割面或所述交线相邻的矩形体区块,作为加载基准点所在的矩形体区块。

由上述描述可知,选择位于视角方向的延伸方向的区块作为加载基准点所在的区块,可观察到范围较大的场景,进一步提高观察者的视觉体验。

进一步地,所述“加载所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块对应的场景数据”之前,进一步包括:

若已加载的矩形体区块不在所述加载基准点所在的区块及与其相邻的八个区块的范围内,释放所述已加载的矩形体区块对应的场景数据。

由上述描述可知,可节约系统资源。

请参照图5,本发明还提出了一种3D场景分块加载系统,包括:

建立模块,用于建立三维直角坐标系,其中,x轴沿场景的长度方向设置,y轴沿场景的高度方向设置,z轴沿场景的宽度方向设置;

分割模块,用于将所述场景分割成底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块;

获取模块,用于获取各个矩形体区块所对应的场景数据;

计算模块,用于根据摄像机当前的视点位置和视角方向,计算得到加载基准点;

加载模块,用于加载所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块对应的场景数据。

进一步地,所述分割模块具体用于通过垂直于所述坐标系中一坐标轴的第一分割面和垂直于另外两条坐标轴中任一条坐标轴的第二分割面对场景进行分割,相邻的所述第一分割面的间距与相邻的所述第二分割面的间距相同,得到底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块,所述底面为正方形,且任意3×3的所述矩形体区块对应的场景数据的数据总量不大于系统承载能力。

进一步地,还包括:

比较模块,用于若场景中的一物体处于第一分割面上、第二分割面上或第一分割面和第二分割面的交线上,则比较与所述第一分割面、第二分割面或所述交线相邻的矩形体区块对应的场景数据的数据量大小;

分配模块,用于将所述一物体的全部数据分配至数据量最小的矩形体区块中。

进一步地,所述计算模块包括:

第一获取单元,用于确定摄像机当前的视点位置,并获取所述视点位置的位置向量OP;

第一得到单元,用于根据摄像机的运动状态,实时获取摄像机绕x轴旋转的第一旋转角度、绕y轴旋转的第二旋转角度和绕z轴旋转的第三旋转角度,得到摄像机的视角方向的方向向量OD;

计算单元,用于根据公式计算加载基准点的位置向量OL,其中,OD.x为视角方向的方向向量OD在x轴上的分量,OD.z为视角方向的方向向量OD在z轴上的分量,a为矩形体区块的正方形底面的边长;

第二得到单元,用于根据所述加载基准点的位置向量OL,得到加载基准点。

实施例一

请参照图2,本发明的实施例一为:一种3D场景分块加载方法,适用于观察者以第一人称视角观察大型3D场景、系统无法同时承载全部场景的情形,包括如下步骤:

S1:建立三维直角坐标系,其中,x轴沿场景的长度方向设置,y轴沿场景的高度方向设置,z轴沿场景的宽度方向设置;优选地,三维直角坐标系采用左手坐标系。

S2:将所述场景分割成底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块;通过垂直于所述坐标系中一坐标轴的第一分割面和垂直于另外两条坐标轴中任一条坐标轴的第二分割面对场景进行分割,相邻的所述第一分割面的间距与相邻的所述第二分割面的间距相同,得到底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块,所述底面为正方形,且任意3×3的所述矩形体区块对应的场景数据的数据总量不大于系统承载能力;

例如,设3D场景S的长为L,宽为W,高为H,系统承载能力为A,通过垂直于x轴的第一分割面和垂直于z轴的第二分割面对场景进行分割,得到底面与xz平面平行的矩形体区块,且矩形体区块的底面为正方形,边长为a,矩形体区块的数量其中,ceil(x)是向上取整函数,返回一个不小于x的最小整数,a的取值尽可能大,但任意3×3的所述矩形体区块对应的场景数据的数据总量不大于系统承载能力A。

S3:获取各个矩形体区块所对应的场景数据;即将场景数据按区块打包,每个矩形体区块对应一个数据包。

若场景中的一不宜分割的物体(如建筑、树木等)处于第一分割面上、第二分割面上或第一分割面和第二分割面的交线上,则比较与所述第一分割面、第二分割面或所述交线相邻的矩形体区块对应的场景数据的数据量大小;将所述一物体的全部数据分配至数据量最小的矩形体区块中,即将该物体完整地置于数据量最小的矩形体区块。

S4:根据摄像机当前的视点位置和视角方向,计算得到加载基准点。

S5:判断已加载的矩形体区块是否在所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块的范围内,若否,执行步骤S6,若是,执行步骤S7。

S6:释放所述已加载的矩形体区块对应的场景数据。

S7:加载所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块对应的场景数据。

优选地,在步骤S6中,只释放已加载的,且不在所述九个区块范围内的区块对应的场景数据,在步骤S7中,则只需再加载未加载的,且在所述九个区块范围内的区块对应的场景数据,从而提高加载效率。例如,若已加载区块1、2、3、4、5、6、7、8、9,当前需加载区块4、5、6、7、8、9、10、11、12,则释放区块1、2、3的场景数据,加载区块10、11、12的场景数据。

本实施例根据摄像机的视点位置和视角方向,实时确定一加载基准点,并根据加载基准点,对应加载以加载基准点所在区块为中心的九块区块的场景数据,保证了从视点出发,以视角方向为中心线,90°范围内总能观察到范围较大、距离较近的场景,使观察者能够获得较好的视觉体验。

实施例二

请参照图3,本实施例是实施例一中步骤S4的进一步拓展。本实施例以矩形体区块的底面平行于xz平面为例,即对场景进行垂直于xz平面的分割,在确定加载区块时也仅需考虑视点位置的x坐标和z坐标,以及视角方向在xz平面内的投影。

S41:确定摄像机当前的视点位置,并获取所述视点位置的位置向量OP。

S42:根据摄像机的运动状态,实时获取摄像机绕x轴旋转的第一旋转角度、绕y轴旋转的第二旋转角度和绕z轴旋转的第三旋转角度,得到摄像机的视角方向的方向向量OD。

S43:根据公式计算加载基准点的位置向量OL,其中,OD.x为视角方向的方向向量OD在x轴上的分量,OD.z为视角方向的方向向量OD在z轴上的分量,a为矩形体区块的正方形底面的边长,max(x,y)是取最大值函数,返回一个参数x、y中最大的数。

S44:根据所述加载基准点的位置向量OL,得到加载基准点。

若所述加载基准点处于第一分割面上、第二分割面上或第一分割面和第二分割面的交线上,则根据所述视角方向,选择位于视角方向的延伸方向且与所述第一分割面、第二分割面或所述交线相邻的矩形体区块,作为加载基准点所在的矩形体区块。

例如,请参照图4,在xz平面内,设P点是视点位置,以P为中心,2a为边长,做正方形ABCD,四条边分别平行于x轴和z轴,则加载基准点L就是视角方向在xz平面内的投影与正方形ABCD四条边的交点;P点所有视角方向对应的加载基准点构成了正方形ABCD的四条边。

从视点P出发,不同视角方向的加载情况举例如下:

当视角方向为PC时,L落在C点,加载区块03、04、05、13、14、15、23、24、25;

当视角方向为PN时,L落在N点,加载区块02、03、04、12、13、14、22、23、24;

当视角方向为PD时,L落在D点,加载区块01、02、03、11、12、13、21、22、23;

当视角方向为PK时,L落在K点,加载区块22、23、24、32、33、34、42、43、44;

当视角方向为PE时,L落在E点,加载区块13、14、15、23、24、25、33、34、35;

当视角方向为PM时,L落在M点,加载区块13、14、15、23、24、25、33、34、35。

假设现在从状态1(视点在P,视角方向是PE)变化为状态2(视点在Q,视角方向是QR),根据步骤S43中的公式,L落在区块34内的R点,当前加载区块是23、24、25、33、34、35、43、44、45,此时将释放已加载区块13、14、15,并加载新区块43、44、45。

若P点处于区块22、23、32、33中间的交线,则正方形ABCD与区块22、23、32、33重合,当视角方向为PN时,L落在区块13、23的分割面上,则取位于视角方向的延伸方向且与所述分割面相邻的区块,即区块13,作为加载基准点所在的区块,加载区块02、03、04、12、13、14、22、23、24;

当视角方向为PC时,L落在区块13、14、23、24中间的交线上,则取区块14作为加载基准点所在的区块,加载区块03、04、05、13、14、15、23、24、25。

当然,也可以对场景进行垂直于xy平面的分割,此时,步骤S43中的公式为OD.y为视角方向的方向向量OD在y轴上的分量;当对场景进行垂直于yz平面的分割时,公式为

实施例三

请参照图6,本实施例是对应上述实施例的一种3D场景分块加载系统,包括:

建立模块1,用于建立三维直角坐标系,其中,x轴沿场景的长度方向设置,y轴沿场景的高度方向设置,z轴沿场景的宽度方向设置;

分割模块2,用于将所述场景分割成底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块;

获取模块3,用于获取各个矩形体区块所对应的场景数据;

计算模块4,用于根据摄像机当前的视点位置和视角方向,计算得到加载基准点;

加载模块5,用于加载所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块对应的场景数据。

所述分割模块2具体用于通过垂直于所述坐标系中一坐标轴的第一分割面和垂直于另外两条坐标轴中任一条坐标轴的第二分割面对场景进行分割,相邻的所述第一分割面的间距与相邻的所述第二分割面的间距相同,得到底面与所述坐标系中两坐标轴构成的平面平行的预设数量的矩形体区块,所述底面为正方形,且任意3×3的所述矩形体区块对应的场景数据的数据总量不大于系统承载能力。

还包括:

比较模块6,用于若场景中的一物体处于第一分割面上、第二分割面上或第一分割面和第二分割面的交线上,则比较与所述第一分割面、第二分割面或所述交线相邻的矩形体区块对应的场景数据的数据量大小;

分配模块7,用于将所述一物体的全部数据分配至数据量最小的矩形体区块中。

所述计算模块4包括:

第一获取单元41,用于确定摄像机当前的视点位置,并获取所述视点位置的位置向量OP;

第一得到单元42,用于根据摄像机的运动状态,实时获取摄像机绕x轴旋转的第一旋转角度、绕y轴旋转的第二旋转角度和绕z轴旋转的第三旋转角度,得到摄像机的视角方向的方向向量OD;

计算单元43,用于根据公式计算加载基准点的位置向量OL,其中,OD.x为视角方向的方向向量OD在x轴上的分量,OD.z为视角方向的方向向量OD在z轴上的分量,a为矩形体区块的正方形底面的边长;

第二得到单元44,用于根据所述加载基准点的位置向量OL,得到加载基准点。

还包括:

选择模块8,用于若所述加载基准点处于第一分割面上、第二分割面上或第一分割面和第二分割面的交线上,则根据所述视角方向,选择位于视角方向的延伸方向且与所述第一分割面、第二分割面或所述交线相邻的矩形体区块,作为加载基准点所在的矩形体区块。

还包括:

释放模块9,用于若已加载的矩形体区块不在所述加载基准点所在的矩形体区块及与其相邻的八个矩形体区块的范围内,释放所述已加载的矩形体区块对应的场景数据。

综上所述,本发明提供的3D场景分块加载方法及其系统,根据摄像机的视点位置和视角方向,实时确定一加载基准点,并根据加载基准点,对应加载以加载基准点所在区块为中心的九块区块的场景数据,保证了从视点出发,以视角方向为中心线,90°范围内总能观察到范围较大、距离较近的场景,使观察者能够获得较好的视觉体验。通过将处于分割面上的物体分配至与其相邻的数据量最小的矩形体区块中,可保证物体的完整性,进一步提高观察者的视觉体验。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

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