三维全尺度数字地球的实现方法

文档序号:2646423阅读:489来源:国知局
专利名称:三维全尺度数字地球的实现方法
技术领域
本发明涉及数字地图技术,特别是一种三维全尺度数字地球的实现方法。
背景技术
“数字地球”是以真实地理数据为基础,对现实世界的信息进行数字化和虚拟化, 形成的虚拟三维地球。“数字地球”概念提出后,空间信息技术迅猛发展,计算机硬件性能和网络带宽也不断提高,这就促使了 “三维数字地球”软件的出现,并且成为“数字地球”概念的化身。Google Earth的出现更是带动了三维数字地球产品的快速发展。三维数字地球可以逼真的模拟现实世界,实现基础影像、地形和矢量的完美展现,可以为各行业提供更直观的辅助决策支持,因此三维数字地球产品越来越体现出其相比于传统二维产品的不可替代性。目前,三维数字地球技术已经广泛应用到军事信息化、石油石化、电力、国土测绘、 数字海洋、安全应急、林业、地矿、地理教学等众多领域,但是目前现有的三维数字地球产品只局限于地表和近地表空中对象的三维表达。而随着三维数字地球技术在不同行业的推广应用,地下、水下物体的三维可视化表达成为技术发展的必然趋势。同时,行业应用中的影像、矢量、模型数据量可达到TB级。显然,目前的软件和计算机硬件发展速度已经无法满足全球范围海量影像、矢量、模型数据的显示需求,现有计算机软硬件在显示海量影像、矢量、 模型数据时已经出现瓶颈,一定程度上限制了三维数字地球技术在相关行业应用中的作用。特别是现有的三维数字地球软件存在着以下的不足
1、无法统一的表达空中、地面、海平面(海水)、水下(海底)、地下的空间对象;
2、虚拟相机(场景)无法由地上无缝的切换至地下;
3、虚拟相机以地表作为平面截头体近平面的参考,当虚拟相机锁定远离地表的对象时,被锁定的对象会被裁减掉;
4、虚拟相机的自由度不够,无法实现180度的仰视效果,即无法从对象的正下方观察对象;
5、大规模全球范围的海水渲染效率较低,且与地面干涉会形成闪烁现象 (ZFighting);
6、海量数据的实时加载渲染效率低下。

发明内容
有鉴于此,本发明的目的在于提供一种三维全尺度数字地球的实现方法,用于统一的表达空中、地面、海平面(海水)、水下(海底)、地下的空间对象。为实现上述目的,本发明提供了一种三维全尺度数字地球的实现方法,包括
建立数字地球系统的坐标系,将地球上所有对象的海量数据按地理坐标、高度及高度模式放置到所述坐标系中,并将所述海量数据的数据对象以三维可视化的形式在计算机上呈现出来。本发明通过开发地下、水下镜头,高速读取海量影像、矢量、模型数据,在真三维场景下实现全球范围空中、地表、地下、水下海量数据的快速一体化显示。

图1是本发明实施例提供的三维全尺度数字地球的实现方法流程图; 图2是本发明实施例中虚拟相机的各参数含义示意图3是本发明实施例中虚拟相机的heading含义示意图; 图4是本发明实施例中大规模海水渲染在计算机上的显示效果截图; 图5是本发明实施例实现的三维全尺度数字地球全貌计算机上的显示效果截图; 图6是本发明实施例实现的三维全尺度数字地球中大规模地形渲染在计算机上的显示效果截图7是本发明实施例实现的三维全尺度数字地球中大规模城市三维模型渲染在计算机上的显示效果截图8是本发明实施例实现的三维全尺度数字地球中海底地形及海底对象渲染在计算机上的显示效果截图9是本发明实施例实现的三维全尺度数字地球中地下管线渲染在计算机上的显示效果截图10是本发明实施例实现的三维全尺度数字地球中空中对象渲染在计算机上的显示效果截图。本发明是提供一种能够克服现有三维数字地球产品上述缺点的方法,通过开发地下、水下镜头,高速读取海量影像、矢量、模型数据,在真三维场景下实现全球范围空中、地表、地下、水下海量数据的快速一体化显示。为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。数字地球是指一个以地理坐标(经纬度)为依据,具有多分辨率、海量数据和多维显示的虚拟系统,它要求地球上的信息全部实现数字化。建立数字地球系统,首先要建立坐标系,地球上所有对象的位置确定都要以所建坐标系作为参考;其次建立数字地球系统要以海量数据为基础,包括多分辨率的卫星遥感影像、航空遥感影像、数字高程模型数据 (DEM)、城市三维模型,甚至包括大气层、星空、海水等等与地球相关的自然现象等等,这些海量的数据需要按地理坐标、高度及高度模式放置到第一步所建立的坐标系中;第三,要把地球上海量的数据对象以三维可视化的形式在计算机上呈现出来,这就要通过计算机图形学以及目前通用的两套图形引擎(DirectX或OpenGL)来实现。所谓全尺度,是指可以通过统一的坐标系,统一的表述从空中到地表、地下、海平面、海水以下的对象。图1是本实施例提供的三维全尺度数字地球的实现方法流程图,该方法具体包括
步骤101、建立基于WGS84大地坐标系的正球体数学模型,球面上任意一点的世界坐标可以由以下公式计算
Double X= R * Cos(Iat)氺 Cos(Ion); Double Y= R * Cos(Iat) * Sin(Ion);
5Double Z=R 氺Sin (Iat);
本实施例将以上公式以函数的形式表述为
public static EarthView. RawTypeDef. Vector3d SphericalToCartesianD( Angle latitude, Angle longitude, double radius)
其中R为任意半径,Iat为此点所在的纬度(以弧度表示),Ion为此点所在的经度(以弧度表示)。WGS - 84坐标系是一种国际上惯用的地心坐标系。坐标原点为地球质心,其地心空间直角坐标系的Z轴指向国际时间局(BIH) 1984. O定义的协议地极(CTP)方向,X轴指向BIH1984. O的协议子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系,称为 1984年世界大地坐标系。这是一个国际协议地球参考系统(ITRS),是目前国际上统一采用的大地坐标系。步骤102、构建一套双精度浮点型4*4矩阵模型。由于现有的两套渲染引擎OpenGL及Direct仅支持单精度浮点型(float型)的矩阵和顶点,而对于渲染全球范围的对象,单精度浮点的精度不够,会引起镜头的抖动、模型的变形等一系列问题,因此需要开发一套双精度浮点类型(double类型)的矩阵库解决上述问题。双精度矩阵的数据结构以双精度浮点型(double)数据为基础,目前Direct3D和 OpenGL所用到的矩阵为4*4单精度浮点矩阵,本实施例所构建的双精度浮点矩阵就是以双精度浮点运算实现Direct3D和OpenGL里面所实现的单精度4*4矩阵的功能,包括矩阵的加、减、乘、转置、求逆矩阵,以及实现平移、旋转等通用功能。步骤103、建立空间对象的高度模式。分为五种模式相对于地面、相对于海底、附着于地面、附着于海底以及绝对高度,通过这五种高度模式可以精确的确定空间对象的坐标,这样就可以表达空中、地表、海平面、海底及地表以下的各种对象。五种高度模式的计算方法如下
相对于地面假设点A的经度为Lon,纬度为Lat,地球半径为R,所处地形高度为T,相对于地面H米,则点A顶点坐标V (A)的计算如下 double length=R+T+H; if (T<0)
length =R+H;
V(A)=SphericalToCartesianD(Lat, Lon, length);
附着于地面假设点A的经度为Lon,纬度为Lat,地球半径为R,所处地形高度为T,相对于地面H米,则点A顶点坐标V (A)的计算如下 double length =R+T; //在此种模式下忽略H值 if (T<0)
length =R;
V(A)=SphericalToCartesianD(Lat, Lon, length);
相对于海底假设点A的经度为Lon,纬度为Lat,地球半径为R,所处地形高度为T,相对于地面H米,则点A顶点坐标V (A)的计算如下 double length =R+T+H;
V(A)=SphericalToCartesianD(Lat, Lon, length);
附着于海底假设点A的经度为Lon,纬度为Lat,地球半径为R,所处地形高度为T,相对于地面H米,则点A顶点坐标V (A)的计算如下 double length =R+T; //在此种模式下忽略H值
V(A)=SphericalToCartesianD(Lat, Lon, length);
绝对高度假设点A的经度为Lon,纬度为Lat,地球半径为R,所处地形高度为T,相对于地面H米,则点A顶点坐标V (A)的计算如下
double length =R+H; //在此种模式下忽略T值
V(A)=SphericalToCartesianD(Lat, Lon, length)。步骤104、对海量的基础数据建立LOD (level object detail,细节层次模型)并存储在服务器端,在服务器端部署Web服务用来处理客户端发送的请求。基础数据包括作为地表纹理的正射遥感影像数据(D0M),作为地形数据的数字高程模型数据(DEM),以及矢量数据,三维模型数据等等。所有原始基础数据都必须是基于 WGS84坐标系的,如果不是则必须预先转化为WGS84坐标系,坐标转化工作现有的成熟遥感或GIS软件都可以实现,所有数据在虚拟地球上的定位都是通过其地理坐标所处和其高度模式确定的。基础数据的数据量一般很大,超过TB级,现有的任何PC机均不可能一次性载入内存,为了解决海量基础数据的加载渲染,本实施例采用以下方法
按照地理坐标对区域进行分级别编号建立LOD数据结构;
按照LOD数据结构对基础数据进行物理重采样,建立各级别的数据文件,级别越高数据越精细;
按照各区域离视点的距离进行加载,视点越高,加载的数据级别越低,视点越低加载的数据级别越高,这样可以保持加载的总体数据量保持在一个恒定的水平。步骤105、建立一个围绕X、Y、Z三个坐标轴均可自由旋转的虚拟相机。虚拟相机的实现主要是通过计算观察矩阵(ViewMatrix)来实现,观察矩阵的计算通过以下代码实现
Vector3d ζAxis = ReferenceCenter. Normalize ();
Vector3d xAxis = Vector3d. Cross(m—cameraUpVector,zAxis). Normalize (); Vector3d yAxis = Vector3d. Cross (zAxis, xAxis). Normalize ();
m_viewMatrix.Mil =(float) xAxis.Xm_viewMatrix.M21 =(float) xAxis.Ym_viewMatrix.M31 =(float) xAxis.Zm_viewMatrix.M12 =(float) yAxis.Xm_viewMatrix.M22 =(float) yAxis.Ym_viewMatrix.M32 =(float) yAxis.Zm_viewMatrix.M13 =(float) zAxis.Xm_viewMatrix.M23 =(float) zAxis.Ym_viewMatrix.M33 =(float) zAxis.ZmviewMatrix.M41 =0;m_viewMatrix. M42 = 0;
m_viewMatrix. M43 = 0;
m_viewMatrix. M14 = (float)0. 0;
m_viewMatrix. M24 = (float)0. 0;
m_viewMatrix. M34 = (float)0. 0;
m_viewMatrix. M44 = (float)1. 0;
double cameraDisplacement = targetDistance;
if (this. CurrentCameraType == CameraType. Normal)
{
m_viewMatrix 氺=Matrix. RotationYawPitchRoll( 0,
(float)-tilt. Radians, (float) heading. Radians);
ι
m_viewMatrix 氺=Matrix. RotationZ((float)m_bank. Radians); m_viewMatrix Matrix. Translation(O, O, (float)(-cameraDisplacement)); 图2为该虚拟相机的各参数含义,图3为虚拟相机的heading含义。此虚拟相机可以实现镜头从空中到地表、海底、地下的无缝切换。此虚拟相机可以动态的切换参考平面,比如正常状态下,相机以地表作为平面截头体的参考平面,但是当锁定远离地表的对象时,以锁定的对象作为平面截头体的近平面,这样就可以防止距离镜头较近的锁定对象被裁切掉。步骤106、客户端通过配置文件到指定的服务器加载所需的基础数据。客户端会先判断本地缓存中是否存在所请求的数据,如果有就从本地缓存中加载到内存;如果没有则从服务器下载到本地缓存并加载到内存中,当再次浏览到此数据时就可以直接从本地缓存读取而不必从服务器下载。步骤107、客户端程序会根据当前视域,动态的加载所需数据(按需加载,比如影像、DEM、模型等),加载完成后将数据放入顶点缓存(VertexBuffer)中由GPU(图形处理器, 相当于专用于图像处理的CPU)来渲染,渲染对象的空间位置由它的经纬度坐标、所处高度以及高度模式所决定。比如一架飞机的定位,是通过飞机的经纬度坐标和飞机飞行的高度以及高度模式(绝对高度)来确定其处在地球上的什么位置。步骤108、对海水进行绘制渲染。传统的海水绘制方法是采用多个不同相位的正弦波进行实时叠加来形成波浪效果,此种方法对GPU及CPU的资源占用较高,效率较低,不适用于一般的PC机。本实施例采用四个不同相位的正弦波叠加,预先生成一系列共9张不同的法线纹理贴图,渲染时顶点法向量由以上9张法线贴图实时获取,通过顶点法向量的连续变化实现海水的扰动效果,海水的渲染采用像素着色(Pixel Shader)和顶点着色(Vertex Shader)技术在GPU中运算,即通过顶点着色将法线贴图法向量从局部切线空间转换到世界坐标系,通过像素着色来实现海水的光照模型,即通过像素着色计算海水的颜色。此种海水渲染方法避免了正弦波实时叠加运算所造成的效率严重下降,同时又能获得较为理想的渲染效果。图4是大规模海水渲染在计算机上显示的效果图,通过此图可以看到大范围海水呈波浪状渲染,海水的渲染效果已十分逼真,与实际的海水效果已十分接近。当在海岸线附近时,海岸线地形高度越接近海平面,地表与海水的顶点坐标就越接近重合,此时地表与海水由于距离过近会形成干涉,从而产生闪烁现象,即ZFighting现象;另外当镜头距离地面较远时,地形数据级别较低,也会造成陆地与海平面很接近,从而产生ZFighting现象。为了解决海水渲染中的ZFighting现象,本实施例采用调解海水透明度的方法 调解海水总体的透明度,当镜头距离海平面越远时海水越透明,海水总体的透明度调
解可以通过顶点与一个纹理因子(Texturei^ctor)的混合来实现;
调解海水顶点漫反射颜色(diffuse color)的透明度,海水顶点的透明度是海水深度的函数,当前顶点的海水深度越浅顶点越透明,这样就可以通过计算海水的深度来设置海水顶点漫反射颜色的透明度。该函数具体如下
protected virtual Color CreateVertexColor(double terrainAlt)
{
if (terrainAlt >= 0)
return Color. FromArgb(0,Color. White);
else {
if (Math. Abs(terrainAlt) > ((SeaTiIeArgs)QuadTiIeArgs). MinVisualableTerrain)
return
Color. FromArgb(QuadTiIeArgs. Opacity, 160, 160, 255); else
return Color. FromArgb((int) (QuadTileArgs. Opacity * Math. Abs(terrainAlt) / ((SeaTileArgs) QuadTileArgs). MinVisualableTerrain),
160,160,255);
}
}
步骤109、实现虚拟相机地上地下的无缝切换。在大规模地形渲染过程中,由于采用LOD技术,会造成不同级别的地形数据之间形成接边缝隙。为了解决接边缝隙问题,通常的做法是从边缘顶点垂直地表向下生成一系列竖直的面(竖墙)来填补接边缝隙。这样一来,当虚拟相机位于地表上方时,一切都很完美,但是当虚拟相机位于地表下方时,就会看到竖墙,而此时需要竖墙位于地表的上方。现有的解决虚拟相机地上地下切换的方法是进行显示的切换,即分为地上和地下两种模式当相机镜头为地上模式时,创建竖墙位于下方的顶点;当镜头为地下模式时,创建竖墙位于上方的顶点。此种切换方法需要手动的设置镜头模式并且需要重新创建顶点, 因此用户体验性差且效率较低。而本实施例提出一种新型的隐式无缝切换方法,即在创建顶点时,同时创建地上地下的竖墙顶点并为其建立索引,在渲染时判断虚拟相机的位置,如果位于地表上方则按照顶点索引,只渲染地表下方的竖墙,反之当虚拟相机位于地表下方则按照顶点索引只渲染地表上方的竖墙。这样只通过一个简单的判断就可以实现虚拟镜头地上地下的无缝隐式切换,用户体验效果好且效率极高。本实施例通过鼠标的拖拽来实现场景的平移,通过鼠标滚轮的滚动来实现场景缩放,当滚动鼠标滚轮时就可以完成虚拟相机的地上地下的无缝切换。通过鼠标的滚动驱动镜头状态的变化,从而促使场景平移、缩放、上下运动等,这些镜头的变化最终是通过上述的设置观察矩阵来实现,通过鼠标的滚动的操作可以体现出无缝切换的过程。图5是本实施例实现的三维全尺度数字地球全貌在计算机上显示效果的示意图, 本图是当镜头拉远时所呈现的数字地球全貌,类似于在高空中俯看地球,此时的地球边缘带有大气特效,同时可以看到在地球上叠加的国界行政区划矢量和国家名的标注信息;图 6为大规模地形渲染的效果图,通过此图可以看到由卫星遥感影像和数字高程模型叠加所形成的地表特征,逼真再现了真实的地形地貌环境;图7为大规模城市三维模型渲染的效果图,本实施例对大规模的城市三维模型划分了 Lod,根据模型的外包围盒投影到屏幕上的像素面积的大小逐级由近及远的动态加载模型,可以达到内存使用与CPU效率的较好平衡;图8为海底地形及海底对象渲染的效果图,通过此图看到下方是本实施例通过海底负高程和影像叠加所构成的海底的地形地貌,图的上方是海平面,同时在海底以上海平面以下的空间渲染了一些活动的鱼群;图9为地下管线渲染的效果图,此图为镜头在地表下方的仰视角度的鸟巢模型,同时对地表设置了半透明,可以清楚看到鸟巢地下的管网布局,同时透过地表也可以看到鸟巢的地上部分及地表的树木;图10为空中对象渲染的效果图,此图描述了一架歼十战斗机在天空中飞行的瞬间,战斗机位置的确定是由其所处的经纬度以及其飞行的高度和高度模式共同确定的。为提高整个系统的执行效率,本实施例采用服务器及客户端的双缓存技术加快数据的加载,避免了数据的重复下载,同时采用服务器群集来有效的进行负载均衡。服务器端缓存主要针对矢量数据,矢量原始数据用来查询,矢量缓存数据用来显示,都是为了提高系统整体的效率。另外,本实施例采用多线程模式,使对象数据的加载更新与对象渲染运行在各自独立的线程中,可以使渲染更加流畅,效率更高,响应更敏捷。总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种三维全尺度数字地球的实现方法,其特征在于,包括建立数字地球系统的坐标系,将地球上所有对象的海量数据按地理坐标、高度及高度模式放置到所述坐标系中,并将所述海量数据的数据对象以三维可视化的形式在计算机上呈现出来。
2.根据权利要求1所述的方法,其特征在于,所述建立数字地球系统的坐标系具体包括建立基于WGS84大地坐标系的正球体数学模型,球面上任意一点的世界坐标由以下公式获得Double X= R * Cos(Iat)氺 Cos(Ion);Double Y= R * Cos(Iat) * Sin(Ion);Double Z=R 氺Sin (Iat);其中R为任意半径,Iat为此点所在的纬度,Ion为此点所在的经度。
3.根据权利要求1或2所述方法,其特征在于,该方法进一步包括构建一套双精度浮点型4*4矩阵模型。
4.根据权利要求3所述的方法,其特征在于,该方法进一步包括建立空间对象的高度模式,包括五种模式相对于地面、相对于海底、附着于地面、附着于海底以及绝对高度。
5.根据权利要求4所述的方法,其特征在于,所述将海量数据的数据对象在计算机上呈现出来具体包括对海量的基础数据建立细节层次模型LOD并存储在服务器端,在服务器端部署Web服务用来处理客户端发送的请求;建立一个围绕X、Y、Z三个坐标轴均可自由旋转的虚拟相机;客户端通过配置文件到指定的服务器加载所需的基础数据;客户端程序根据当前视域,动态的加载所需数据,加载完成后将数据放入顶点缓存中由图形处理器GPU来渲染,渲染对象的空间位置由它的经纬度坐标、所处高度以及高度模式所决定。
6.根据权利要求5所述的方法,其特征在于,所述加载基础数据的方法具体包括按照地理坐标对区域进行分级别编号建立LOD数据结构;按照LOD数据结构对基础数据进行物理重采样,建立各级别的数据文件,级别越高数据越精细;按照各区域离视点的距离进行加载,视点越高,加载的数据级别越低,视点越低加载的数据级别越高。
7.根据权利要求5所述的方法,其特征在于,对数据进行渲染时,如果是对海水进行渲染,则采用四个不同相位的正弦波叠加,预先生成一系列共9张不同的法线纹理贴图,渲染时顶点法向量由以上9张法线贴图实时获取,通过顶点法向量的连续变化实现海水的扰动效果,海水的渲染采用像素着色和顶点着色在GPU中运算。
8.根据权利要求7所述的方法,其特征在于,该方法进一步包括调解海水总体的透明度,当镜头距离海平面越远时海水越透明,海水总体的透明度调解通过顶点与一个纹理因子的混合来实现;调解海水顶点漫反射颜色的透明度,海水顶点的透明度是海水深度的函数,当前顶点的海水深度越浅顶点越透明,通过计算海水的深度来设置海水顶点漫反射颜色的透明度。
9.根据权利要求7所述的方法,其特征在于,该方法进一步包括实现虚拟相机地上地下的无缝隐式切换,具体为在创建顶点时,同时创建地上地下的竖墙顶点并为其建立索引,在渲染时判断虚拟相机的位置,如果位于地表上方则按照顶点索引,只渲染地表下方的竖墙,反之当虚拟相机位于地表下方则按照顶点索引只渲染地表上方的竖墙。
全文摘要
本发明公开了一种三维全尺度数字地球的实现方法,包括建立数字地球系统的坐标系,将地球上所有对象的海量数据按地理坐标、高度及高度模式放置到所述坐标系中,并将所述海量数据的数据对象以三维可视化的形式在计算机上呈现出来。本发明通过开发地下、水下镜头,高速读取海量影像、矢量、模型数据,在真三维场景下实现全球范围空中、地表、地下、水下海量数据的快速一体化显示。
文档编号G09B29/00GK102214368SQ20101014062
公开日2011年10月12日 申请日期2010年4月7日 优先权日2010年4月7日
发明者吴秋华, 牛玉刚 申请人:北京国遥新天地信息技术有限公司, 辽宁省电力有限公司本溪供电公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1