发明内容
本发明的目的是针对现有技术的缺陷,提供一种用于视频制作的三维地形的显示方法,该方法可以提高三维地形的制作和显示效率,提供流畅的视频显示效果。
本发明的技术方案如下:一种用于视频制作的三维地形的显示方法,包括如下步骤:
(1)准备建立三维地形模型所需的高程数据和地形数据;
(2)利用高程数据建立高度模型,利用地形数据建立纹理贴图,并将纹理贴图贴到高度模型上;
(3)将建立好的模型结果存进图像序列,把这些图像序列做成视频进行播出。
进一步,如上所述的用于视频制作的三维地形的显示方法,步骤(1)中建立高程数据的方法如下:
(a)在GTOPO30的DEM数据系统中找到源数据所在的文件;
(b)读取源数据文件,并将数据按经纬度拼凑在一起,具体方法是:用户指定源DEM数据所在文件夹以及转换后的DEM数据存放文件夹,因为数据是按经纬度分块存储成一个一个小文件,还需要指定分块依据--每个文件的经纬度跨度,处理结果是按经纬度划分的很多小文件,数据存储方式是little Endian,对于跨越南纬60度的目标文件,以南纬60度为界把它分为两部分来处理,待处理完毕后再把处理结果合并在一起;
(c)从拼凑好的数据中得到目标文件所需要的数据内容;
(d)将数据格式从BigEndian格式向LittleEndian格式进行转换;
(e)把转换后的数据写入目标文件中。
进一步,如上所述的用于视频制作的三维地形的显示方法,步骤(1)中建立地形数据的方法如下:
(a)从地理信息系统数据库中读取数据,并生成相应的图形,从而绘制出一幅地图;
(b)针对地图中显示的各种元素,选择或创建隶属于各元素的属性;
(c)对新生成的元素对应的数据进行构建;
(d)将选取或构建的元素属性和元素数据使用序列化的方式分别存储为属性文件和数据文件。
进一步,如上所述的用于视频制作的三维地形的显示方法,步骤(2)中建立高度模型的方法如下:
①得到建模区域的经纬度范围;
②找到该经纬度范围所对应的高程数据;
③将建模的三角面片数设为定值,计算采样频率;
④按照采样频率从各个文件中读取数据并把数据拼凑起来;
⑤从拼凑好的数据中得到目标区域的顶点数据;
⑥利用得到的顶点数据进行高度建模。
进一步,如上所述的用于视频制作的三维地形的显示方法,步骤(2)中建立纹理贴图的方法如下:
①产生纹理贴图的底色,纹理贴图上的每个像素点对应着一个经纬度,通过该经纬度下的高度数据决定该像素的颜色;
②根据地形数据中所包含的地形信息,将各区域对应的地形信息元素绘制到底色上。
本发明的有益效果如下:本发明对DEM高程数据以及GIS地形数据进行了规则化处理,使得到的数据形式更适合于三维地形模型的建立,通过在高度模型上进行纹理贴图,使产生的纹理贴图与高度建模经纬度吻合,使得到的三维图像更加真实,把每次建立好的模型结果存进图像序列,最后把这些图像序列做成视频,从而实现流畅的视频播出效果。
具体实施方式
下面结合附图和具体实施例对本发明进行详细的描述。
如图2所示,本发明所提供的用于视频制作的三维地形的显示方法分为数据准备、建立模型和制作视频三部分,具体步骤为:
(1)准备建立三维地形模型所需的高程数据和地形数据;
(2)利用高程数据建立高度模型,利用地形数据建立纹理贴图,并将纹理贴图贴到高度模型上;
(3)将建立好的模型结果存进图像序列,把这些图像序列做成视频进行播出。
为了对指定区域建立三维模型,需要两方面的数据:高程数据和地形数据。高程数据决定了地形的高低起伏程度;地形数据包括区域的地形信息元素,比如桥梁、铁路、公路、河流、湖泊以及地域界限信息(如国界、省界等)。
如图3所示,建立高程数据的方法如下:
(a)在GTOPO30的DEM数据系统中找到源数据所在的文件;
(b)读取源数据文件,并将数据按经纬度拼凑在一起;
(c)从拼凑好的数据中得到目标文件所需要的数据内容;
(d)将数据格式从Big Endian格式向Little Endian格式进行转换;
(e)把转换后的数据写入目标文件中。
上述方法主要是将DEM数据进行转换,用户指定源DEM数据所在文件夹以及转换后的DEM数据存放文件夹,因为数据是按经纬度分块存储成一个一个小文件,还需要指定分块依据--每个文件的经纬度跨度。处理结果是按经纬度划分的很多小文件,数据存储方式是little Endian。由于GTOPO30的全球DEM是很常用的数据,经过这样的处理后别人用起来会很方便,并且,该程序提供了一系列DEM文件读写的API,别人可以很方便的调用。对于跨越南纬60度的目标文件,以南纬60度为界把它分为两部分来处理,待处理完毕后再把处理结果合并在一起。
下面通过一个实例进行说明,如图4所示,数据转换结果是按经纬度划分的许多文件,其中的一个文件经纬度位置如图中线条矩形块所示,该目标文件需要在源文件中读取区域1、2、3、4所对应的文件,把4个文件中的数据拼凑在一起,再得到线条矩形区域所包含的数据,进行Big Endian向Little Endian格式的转换,存储在目标文件里。经过这样的处理,得到规则方便使用的DEM数据文件。
Little Endian和Big Endian是表示计算机字节顺序的两种格式,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式。简单的说,Little Endian把低字节存放在内存的低位;而Big Endian将低字节存放在内存的高位。数据从Big Endian格式向Little Endian格式的转换为本领域的公知技术,两者之间相互转化数据的代码为公知常识。
如图5所示,建立地形数据的方法如下:
(a)从地理信息系统数据库中读取数据,并生成相应的图形,从而绘制出一幅地图;
(b)针对地图中显示的各种元素,选择或创建隶属于各元素的属性;
(c)对新生成的元素对应的数据进行构建;
(d)将选取或构建的元素属性和元素数据使用序列化的方式分别存储为属性文件和数据文件。
上述方法中,生成图形时采用OpenGL或GDI进行图形绘制。由于OpenGL进行面绘制的基本元素是凸多边形,而真实地形的边界是复杂的非凸多边形,如果采用OpenGL绘制的话需要将非凸多边形分解为凸多边形来进行,这样很难达到实时显示渲染的目的。但是OpenGL能够非常快速方便的进行点、线等元素的捕捉。因此本发明在图形绘制的时候会根据数据组织形式而自动采用OpenGL或者GDI来进行图形绘制。
对于显示的各种元素可以选择或创建出隶属于这类型元素的属性。比如说对于河流可以构造出名称、长度、编码等属性。通过捕捉的功能捕捉一定的显示数据然后对其进行属性赋值,比如捕捉一段河流,可以对其进行属性赋值为长江、长12345千米、编码01234的属性,这段河流就跟赋予的属性关联起来了。以后这段河流就拥有了自身的名称、长度、编码了。
在原始数据中会包含一些属性,比如说一个河流文件,它可能就包含名称、编码、河流级别、长度、线段编码等,对于这种由原来的河流原始文件转换成新的河流文件的时候,就可以利用其中的属性,例如只需要名称和河流级别就够了,那么就可以选择属性。而对于那种新构造出来的元素,比如说由多条线段构成的面,它没有可以选择的属性,这样为了辨识或使用这个元素,就得对这个新构成的元素创建属于它的属性,例如构造出名称、代码等属性。
本发明还能利用多个旧的元素来构造新的元素,比如说利用多个边界线段来构成由这些线段构成的封闭区域。然后对新构成的元素添加属性,这样就构成了一个完整的新元素。
对新生成的元素进行数据构建的方法如下:
(Ⅰ)选取构成新元素的线段;
(Ⅱ)确定每条线段与其它线段的交点情况;
(Ⅲ)判断所有线段是否都只存在两个不同交点,如果不是,返回步骤(a),重新进行线段的选取;
(Ⅳ)将所有线段按照逆时针构造面的顺序串联起来;
(Ⅴ)获取所有串联线段的交点以及交点间的数据,由这些数据构成面数据。
在步骤(Ⅱ)中,确定每条线段与其它线段的交点情况的方法是将所需判断的两条线段分解为若干个直线段,然后判断是否存在任意两条相交的直线段,以此来求解线段之间的交点。具体方式包括如下步骤:
①判断所选的两条直线段的包围盒是否相交,如果不相交,则对其它直线段进行判断;
②判断所选的两条直线段是否平行,如果平行,则返回步骤①对其它直线段进行判断;
③求解两条直线段所符合的直线方程,得到交点;
④判断交点是否在两条线段上,如果不在,则返回步骤①对其它直线段进行判断。
通过人工参与的方式选取或构造元素属性和元素数据后,将这些数据使用序列化的方式分别存储为属性文件和数据文件。同时为了方便对同一源地形文件进行多次操作,还建立了工程文件,工程文件记录了源数据文件地址,用户进行的操作记录和生成的部分新地形数据。这样在下次打开工程文件的时候能够将工程状态恢复到上次操作情况,从而继续地形数据构造操作。
数据准备完成后,需要进行模型的建立。建立模型同样分为两部分:利用高程数据建立高度模型和利用地形数据建立纹理贴图贴到高度模型上去。一般情况下,当前显示部分只是整个地球的很小一部分,只针对当前显示区域进行建模就可以了,没必要对整个地球进行建模。所以,需要建模的区域由起始和终止经纬度来表示,比如需要建模的区域是北纬60度到北纬30度,南纬60度到南纬30度这样一个区域。这部分区域在平面地图上看是一个矩形,但是在三维空间中是一个球面。在建模过程中需要读取区域对应的高程数据,直接读取得到的高程数据量太大,需要对冗余数据进行剔除,由于每个高程值对应建模过程中三角面片的一个顶点,也就是对冗余顶点进行剔除。顶点剔除,现在比较流行的有LOD(Level of Detail)算法、View Frustum Culling算法等,但是这些算法实现复杂、计算复杂度比较大,并且,对于本发明这种应用体现不出特别好的显示效果。本发明所采用的解决方法是:建模的三角面片数设为定值,也就是顶点数设为定值。大范围的区域对应源数据中较多的顶点数,但用到的顶点数为定值,剔除的顶点数就比较多,显示结果就会比较粗糙;如果需要显示比较小的区域,剔除的顶点数也比较少,建模就比较精细。这也符合视觉效果,大范围的显示粗糙建模,小范围的显示精细建模,但是建模的三角形数是一定的。
如图6所示,建立高度模型的方法如下:
①得到建模区域的经纬度范围;
②找到该经纬度范围所对应的高程数据;
③将建模的三角面片数设为定值,计算采样频率;
④按照采样频率从各个文件中读取数据并把数据拼凑起来;
⑤从拼凑好的数据中得到目标区域的顶点数据;
⑥利用得到的顶点数据进行高度建模。
由于三个顶点必组成一个平面,所以在本领域中一般都采用三角面片进行建模。建模的三角面片数设为定值,也就是建模顶点数设为定值(三个顶点组成一个三角面片)。举例来说,4个顶点成网状排列,2×2的结构,那么三角面片数是2,排列模式就是一个矩形被对角线分割。这个值设定的越大,建出的模型越精细,但是建模速度越慢,具体设定需要把显示效果和建模时间综合起来考虑,寻求一个平衡点,一般来说,顶点成网状分布,会是100×100以内的一个网状结构。找到该经纬度范围所对应的高程数据后,这些高程数据会很多,比如10000×10000,如果我们固定顶点数是100×100,那么对于每行来说,就是从10000个点中均匀抽取100个点,对于每列来说同样处理,当然这存在无解或多解的情况,无解的时候可以以1为单位减少顶点数一直到有解为止,多解的时候随便取其一即可。利用顶点数据进行高度建模的方法为本领域的公知技术,此处不再过多描述。
下面通过具体公式介绍采样频率的确定方式。设从n个点中取s个点,采样频率是f(每隔f个点取一个点)。例如,从12个点中取3个点,有两种取法,间隔分别是3和4,n=12,s=3,f=3或4。下面是公式推导过程,其中[0,f]表示0,1…f其中的任意整数。
满足
(s-1)*f+s+[0,f]=n =>
(s-1)*f+s-1+[0,f]=n-1 =>
(s-1)*(f+1)+[0,f]=n-1 =>
n-1-(s-1)*(f+1)=[0,f] =>
0≤n-1-(s-1)*(f+1)≤f =>
(n-s)/s≤f≤(n-s)/(s-1)
所以,f取[(n-s)/s,(n-s)/(s-1)]之间的整数,有可能存在无解、单解或者多解的情况。
记a除以b的取整商为INT[a/b],余数是a mod b。
下面分情况讨论:
记a=(n-s)b=s c=s-1
无解的时候:
a mod b!=0并且a mod c!=0并且INT[a/b]=INT[a/c]的情况,这时候s=s-1继续求解,如果仍无解,s=s-1一直到有解为止。
有解的时候:
除了a mod b!=0并且a mod c!=0并且INT[a/b]=INT[a/c]的所有情况,可以取较小解。这时候,如果a mod b=0,f=INT[a/b],否则f=INT[a/b]+1。
通过高度建模,得到的只是一个有高低起伏的三维模型,为了看起来更真实,需要在高度模型上进行纹理贴图。产生的纹理贴图必须与高度建模经纬度吻合,它可以看成是一幅图像,产生过程分成两个步骤:
(1)产生底色:纹理贴图上的每个像素点对应着一个经纬度,该经纬度下的高度数据决定了该像素的颜色,比如海拔高的地方应该是白色,代表雪山;海平面就应该是蓝色,代表海洋;这些颜色也可以由用户来设置。
(2)绘制地形信息:地形数据包括区域的地形信息元素,比如桥梁、铁路、公路、河流、湖泊以及地域界限信息(如国界、省界等),把这些信息元素绘制到底色上去,使纹理更加真实。当然,纹理贴图也可以是航拍图像等。地形信息的绘制可以使用通用的图形设备接口GDI+完成。
上述建模方法建立的三维模型只是球面上的一部分,用户在浏览地球时,会有拉近拉远操作,会旋转地球,无论在任何时候,所建模型都应该充满屏幕。虽然只建模了球面上的一部分,但给用户的感觉应该是整个球体都存在,模型的空间位置是不变的,用户进行各种操作,改变的实际上是摄像机。摄像机发生了变化,可视空间平截头体也会发生变化,看到球体的区域也就发生了变化。用户每次变化视角,实际上就是变化摄像机,都需要重新计算建模区域的经纬度范围,重新建模,这样给用户的感觉是一直在观察一个球体。
经过前面的描述可以看到,每次重新建模都需要进行大量的处理,很难做到实时。本发明的目的是输出流畅的视频,制作过程的不实时不能对输出构成影响。本发明把每次建好的模型结果存进图像序列,最后把这些图像序列做成视频,就是流畅的了。用户可以指定两个状态点,中间的状态采用插值计算,根据这些状态进行建模,并把建模结果做成图像序列,从而得到流畅的视频。这种视频的制作对于本领域的技术人员来说,非常容易实现,此处不再进行过多的描述。
本发明所述的方法并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。