一种移动端倾斜模型数据的可视化方法与流程

文档序号:17745267发布日期:2019-05-24 20:35阅读:680来源:国知局
一种移动端倾斜模型数据的可视化方法与流程

本发明涉及一种可视化方法,特别涉及一种移动端倾斜模型数据的可视化方法。



背景技术:

倾斜摄影技术是国际摄影测量领域近十几年发展起来的一项高新技术,该技术通过从一个垂直、四个倾斜等五个不同的视角同步采集影像,获取到丰富的建筑物顶面及侧面的高分辨率纹理。它不仅能够真实的反映地物情况,高精度地获取地物纹理信息,还可通过先进的定位、融合、建模等技术,生成真实的三维城市模型,将用户引入了符合人眼视觉的真实直观世界。

倾斜摄影测量技术以大规模、高精度、高清晰的方式全面感知复杂场景,通过高效的数据采集设备及专业的数据处理流程生成的数据成果直观反映地物的外观、位置、高度等属性,为真实效果和测绘级精度提供保证。然而,正因为倾斜摄影的这些优点,使得其生产的数据量非常庞大,要想加载并对这些数据进行可视化,对硬件设备提出了较高的要求。

现阶段由于电脑端硬件性能强大,能够对倾斜摄影数据可视化的软件选择非常多,功能也非常丰富,但是在移动端能够对倾斜摄影数据可视化的软件就非常稀少,且大多都是以轻量级应用为主。轻量级的应用只支持小范围单场景的可视化,对大范围的倾斜三维场景支持不足,且在移动端加载倾斜摄像模型时,需要对倾斜摄影模型进行纹理压缩,以满足不同类型移动端设备的需求,此外,受移动端设备本身性能的限制,大范围倾斜数据展示将占用非常多的硬件资源,直接对整个大范围单场景加载和展示将会非常困难。因此,如何对大范围倾斜模型在移动端的展示、顺利加载,满足实际应用需求是当前亟需解决的问题。



技术实现要素:

本发明所要解决的技术问题是针对现有技术的现状,提供一种能够动态计算可视区域内范围、减少数据量加载的移动端倾斜模型数据的可视化方法。

本发明解决上述技术问题所采用的技术方案为:一种移动端倾斜模型数据的可视化方法,用于通过移动端上显示倾斜模型数据,其中,倾斜模型数据由多个数据块互相拼接组成,且每个数据块由颗粒度不同的多层数据组成,其特征在于:一种移动端倾斜模型数据的可视化方法包括以下步骤:

步骤1、获取当前摄像机在三维空间中的坐标;

步骤2、获取移动端当前屏幕的四个顶点坐标,通过每个顶点坐标分别垂直屏幕向内在三维空间中生成射线,得到四条射线,其中,四条射线分别记为d1、d2、d3和d4;

步骤3、倾斜模型数据中三维场景的地面由多个三角网格组成,遍历所有的三角网格,分别计算步骤2中的每一条射线d1、d2、d3和d4与所有三角网格相交的焦点,依次得到相交的四个焦点,其中,四个焦点分别记为p1、p2、p3和p4;

步骤4、遍历所有的数据块,判断每个数据块中是否有任意坐标点落在步骤3中四个焦点p1、p2、p3和p4组成的四边形之内,如是,则该数据块是移动端当前屏幕内可见的数据块,并转入步骤6;如否,则该数据块为移动端当前屏幕内不可见的数据块,并转入步骤5;

步骤5、判断该数据块是否在内存中已经加载过,如是,则将该数据块从内存中释放,如否,则该数据块不做操作;

步骤6、获取移动端当前屏幕内可见的数据块的中心点坐标,通过摄像机的坐标与数据块中心点坐标计算出每个数据块与摄像机之间的直线距离;

步骤7、通过步骤6中每个数据块与摄像机之间的直线距离,找到每个数据块相应颗粒度的层次关系,并根据每个数据块内颗粒度的层次索引,选择每个数据块中对应层次的数据,读取并加载每个数据块选择的层次中对应的倾斜数据;

步骤8、遍历并渲染当前屏幕内可见的倾斜三维数据。

具体的,所述步骤3中采用ray-triangle算法计算射线与三角网格相交的坐标,其中,一条射线与三角网格相交的具体计算步骤为:

步骤3-1、三角网格上的任一点的坐标为:

p(u,v)=(1-u-v)*v0+u*v1+v*v2

其中,p为顶点v0、v1、v2组成的三角网格上的任一点的坐标,v0、v1、v2分别为三角网格的顶点的坐标,u、v为预设值,其中,u+v≤1,且u≥0,v≥0;

步骤3-2、射线上任一点的坐标表达式为:p(t)=o+t*d;

其中,o为射线的起点坐标,d为射线的方向,t为预设值;

步骤3-3、计算三角网格与射线相交的焦点,计算公式为:

o+t*d=(1-u-v)*v0+u*v1+v*v;

将上述等式成立时对应的t值代入步骤3-2中射线的表达式中,得到p点的坐标,或将u、v值代入步骤3-1中三角网格的任一点表达式中,得到p点的坐标,即该p点为焦点。

所述步骤4中假设任一数据块中的数据点为p(x,y,z),判断任意数据点p(x,y,z)是否落在焦点p1,p2,p3,p4组成的四边形内的计算公式为:

a=(p2.x-p1.x)*(y-p1.y)-(p2.y-p1.y)*(x-p1.x)

b=(p3.x-p2.x)*(y-p2.y)-(p3.y-p2.y)*(x-p2.x)

c=(p4.x-p3.x)*(y-p3.y)-(p4.y-p3.y)*(x-p3.x)

d=(p1.x-p4.x)*(y-p4.y)-(p1.y-p4.y)*(x-p4.x)

其中,p1.x为焦点p1的x轴坐标,p1.y为焦点p1的y轴坐标,p2.x为焦点p2的x轴坐标,p2.y为焦点p2的y轴坐标,p3.x为焦点p3的x轴坐标,p3.y为焦点p3的y轴坐标,p4.x为焦点p4的x轴坐标,p4.y为焦点p4的y轴坐标;

当a、b、c、d符号相同,即a、b、c、d全部为正或全部为负时,则数据块中的数据点p(x,y,z)落在四个焦点组成的四边形上,反之,则该数据点p(x,y,z)不落在四边形上。

作为优选,所述倾斜模块数据为smart3d生产的osgb数据。

与现有技术相比,本发明的优点在于:通过计算当前窗口可视区域在三维场景中的坐标范围,找到在可视区域内的数据块;并通过计算摄像头和可视区域内的数据块之间的距离,判断每个数据块需要展示的颗粒度,并对应找到需要加载的数据块层级,从而无论场景如何变化,所加载的数据量永远不会超过一个窗口的范围,每次窗口移动都只需对需要展示的数据进行动态计算,加载可视区域内的数据,剔除已加载并在可视区域外的数据,就能在有限的移动端硬件资源限制下达到大范围数据可视化的目的。

附图说明

图1为本发明实施例中移动端倾斜模型数据的可视化方法的流程图。

具体实施方式

以下结合附图实施例对本发明作进一步详细描述。

如图1所示,一种移动端倾斜模型数据的可视化方法,用于通过移动端上显示倾斜模型数据,其中,该倾斜模块数据为smart3d生产的osgb数据,一个倾斜场景由多个互相拼接的数据块组成,每个数据块由范围相同,颗粒度不同的多层数据组成。本实施例中,移动端为手机,在手机上显示倾斜模块数据。

一种移动端倾斜模型数据的可视化方法,包括以下步骤:

步骤1、获取当前摄像机在三维空间中的坐标;

步骤2、获取移动端当前屏幕的四个顶点坐标,通过每个顶点坐标分别垂直屏幕向内在三维空间中生成射线,得到四条射线,其中,四条射线分别记为d1、d2、d3和d4;

步骤3、倾斜模型数据中三维场景的地面由多个三角网格组成,遍历所有的三角网格,分别计算步骤2中的每一条射线d1、d2、d3和d4与所有三角网格相交的焦点,依次得到相交的四个焦点,其中,四个焦点分别记为p1、p2、p3和p4;

本实施例中,采用ray-triangle算法计算射线与三角网格相交的坐标,其中,一条射线与三角网格相交的具体计算步骤为:

其中,一条射线与三角网格相交的具体计算步骤为:

步骤3-1、三角网格上的任一点的坐标为:

p(u,v)=(1-u-v)*v0+u*v1+v*v2

其中,p为顶点v0、v1、v2组成的三角网格上的任一点的坐标,v0、v1、v2分别为三角网格的顶点的坐标,u、v为预设值,其中,u+v≤1,且u≥0,v≥0;

步骤3-2、射线上任一点的坐标表达式为:p(t)=o+t*d;

其中,o为射线的起点坐标,d为射线的方向,t为预设值;

步骤3-3、计算三角网格与射线相交的焦点,计算公式为:

o+t*d=(1-u-v)*v0+u*v1+v*v;

将上述等式成立时对应的t值代入步骤3-2中射线的表达式中,得到p点的坐标,或将u、v值代入步骤3-1中三角网格的任一点表达式中,得到p点的坐标,即该p点为焦点;

步骤4、遍历所有的数据块,判断每个数据块中是否有任意坐标点落在步骤3中四个焦点p1、p2、p3和p4组成的四边形之内,如是,则该数据块是移动端当前屏幕内可见的数据块,并转入步骤6;如否,则该数据块为移动端当前屏幕内不可见的数据块,并转入步骤5;;

在本方案中,倾斜场景是由数据块在平面上平铺而成的,因此只考虑平面上的结果,不考虑z坐标,假设任一数据块中的数据点为p(x,y,z),判断任意数据点p(x,y,z)是否落在焦点p1,p2,p3,p4组成的四边形内的计算公式为:

a=(p2.x-p1.x)*(y-p1.y)-(p2.y-p1.y)*(x-p1.x)

b=(p3.x-p2.x)*(y-p2.y)-(p3.y-p2.y)*(x-p2.x)

c=(p4.x-p3.x)*(y-p3.y)-(p4.y-p3.y)*(x-p3.x)

d=(p1.x-p4.x)*(y-p4.y)-(p1.y-p4.y)*(x-p4.x)

其中,p1.x为焦点p1的x轴坐标,p1.y为焦点p1的y轴坐标,p2.x为焦点p2的x轴坐标,p2.y为焦点p2的y轴坐标,p3.x为焦点p3的x轴坐标,p3.y为焦点p3的y轴坐标,p4.x为焦点p4的x轴坐标,p4.y为焦点p4的y轴坐标;

当a、b、c、d符号相同,即a、b、c、d全部为正或全部为负时,则数据块中的数据点p(x,y,z)落在四个焦点组成的四边形上,反之,则该数据点不落在四边形上;

步骤5、判断该数据块是否在内存中已经加载过,如是,则将该数据块从内存中释放,如否,则该数据块不做操作;

步骤6、获取移动端当前屏幕内可见的数据块的中心点坐标,通过摄像机的坐标与数据块中心点坐标计算出每个数据块与摄像机之间的直线距离;

其中,每个数据块与摄像机之间的直线距离的远近代表着数据块将在屏幕中渲染的颗粒度大小,数据块与摄像机之间的直线距离越远,则代表该数据块的颗粒度越粗,相反数据块与摄像机之间的直线距离越近,则该数据块的颗粒度越细;

步骤7、通过步骤6中每个数据块与摄像机之间的直线距离,找到每个数据块相应颗粒度的层次关系,并根据每个数据块内颗粒度的层次索引,选择每个数据块中对应层次的数据,读取并加载每个数据块选择的层次中对应的倾斜数据;

在加载时,由于每个数据块的数据中均含有颗粒度不同的多层数据,因此离摄像机之间的直线距离越近的数据块,则该数据块的颗粒度越细,需要加载的数据量越大,内容越多,从而需要在该数据块中选择颗粒度越细的层次,相应的,离摄像机之间的直线距离越远的数据块,则该数据块的颗粒度越粗,需要加载的数据量越小,内容越少,则选择该数据块中颗粒度较粗的层次的数据,通过该种加载方法,能使数据块加载速度变快,且所加载的数据量不会超过一个屏幕窗口的范围。

步骤8、遍历并渲染当前屏幕内可见的倾斜三维数据。

在现有的移动端倾斜模型数据的可视化方法中,在数据加载过程中,是按照每个数据块的颗粒度最细的层级进行渲染,这样虽然也能加载到整个场景,但是该加载方法加载的数据量大,且渲染速度慢,加载时会出现卡的感觉,本发明中的可视化方法首先通过动态计算当前屏幕的范围,找出移动端当前屏幕可见的数据块,释放不可见的数据块,并根据数据块与摄像机之间的距离,判断需要加载的数据块层级,并通过加载合适的数据块层次,因此使数据块加载速度更快,且无论场景如何变化,所加载的数据量永远不会超过一个屏幕窗口的范围,因此使移动设备的硬件资源利用率达到最大化,也突破了三维倾斜数据的最大量级。

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