AVS/Express平台三维可视化系统的应用研究
时间:2009-02-11 02:13:00
来源:UltraLAB图形工作站方案网站
人气:7672
作者:admin
一.概述
开发气象模式三维可视化系统的目的就在于要将三维可视化技术应用于气象模式数据,实现气象模式数据的三维可视化显示,为国家气象中心乃至气象领域的气象预报工作者提供一个直观的模式数据可视化分析环境,即运用图形、色彩和动画来表示数值预报的结果(气象产品数据)。
基于上述原则,我们选择AVS/Express作为开发平台,结合国家气象中心的实际需求,针对业务和科研的发展,建立一套满足气象工作者要求的实用系统。目前国家气象中心的数值天气预报模式主要有:T106L19,HLAFS和MM5(中尺度数值预报)等。其中,MM5模式不仅应用于北京地区,还有天津、河北,以及整个华北地区,尤其在1999年“澳门回归”特殊气象保证期间,提供了北京、澳门短期(36小时)数值预报。为此我们确定可视化应用系统以运行于神威巨型机上的MM5为研究对象,针对MM5模式的数据结构和特点,采用三维可视化开发工具AVS/Express,在Windows平台上开发建立“气象模式数据三维可视化系统”,实现数据的三维及二维可视化显示。
该系统可以将收集来的大量数据进行有效的处理和图形显示,使气象预报工作者能够明晰数据结构,并有效地利用这些气象数据。除此之外,还具有对可视化数据进行分析的功能,既将数据变化的过程用图形、色彩、动画等方式表现出来,这正是与目前气象预报员使用的“MICAPS图形图像系统”最主要的区别。
基于AVS/Express开发的应用系统的优越之处就在于不仅能够为气象工作者提供观察数据发生演变过程的手段和数值分析工具,及时跟踪和评估重要天气情况;还能够为气象工作者提供一种检验方法,以检验数值天气预报的准确度。
二.“MM5模式三维可视化系统”开发研究中所采用的技术
1. 采用面向对象的开发技术:
AVS/Express是一个面向对象的、可视化开发工具,它的核心就是面向对象技术,支持数据和方法在类中的封装;支持类的继承、模板和实例;支持对象的分层结构以及类的多态性等特性。利用它能够建立可重复使用的对象、应用程序组件以及数据可视化应用程序,通过对象或组件的灵活组合,定制数据的三维及二维可视化显示方式。
在AVS/Express所提供的库中,从最底层到最高层,所有的应用程序组件都采用对象的方式开发。
2. 开发工作采用AVS/Express提供的网络编辑器(Network Editor)方式:
AVS/Express的网络编辑器是一个可视化的开发环境,通过鼠标驱动操作就可实现连接、定义、装配和管理对象等一系列开发操作,为开发者提供随意定制、修改应用系统的开发环境。
3. 利用AVS/Express提供的大量的预制功能模块:
AVS/Express提供的预制功能模块能够实现与可视化相关的大量功能,在这些功能模块的基础上,根据实际需要进行各模块的扩充、连接以及装配等工作,就可快速建立应用系统。
4. 应用程序及多媒体产品的分发技术:
AVS/Express开发工具中提供关于应用程序以及定制的多媒体产品的分发功能,实现应用系统在脱离AVS/Express开发平台独立运行和使用,以及多媒体产品的制作与分发。
三.开发中的关键技术
1. MM5数据格式和AVS/Express数据格式的转换
AVS/Express的数据管理采用被称为“Field Data”的数据结构,Field Data数据结构中包括Mesh和Data;其中Mesh是关于D ata域之间的关系描述,Mesh由grid组成,grid定义数据节点的位置;而Data是某一节点位置的矢量或标量值。
AVS/Express支持的Mesh格式有四种:
(1)Unstructured Mesh
(2)Structured Mesh
(3)rectilinear Mesh
(4)Uniform Mesh
MM5的数据属于Uniform Mesh格式,它的数据节点分布均匀,节点间距一致,因此只需给出数据点坐标的最大值、最小值及维数即可。 MM5模式运算的结果数据,是一种无格式数据,AVS/Express无法识别这种格式,所以,首先就要根据AVS/Express对数据格式的需要对MM5模式的运算结果进行提取和转换,提取出所需的气象要素数据,并且按照经纬度和Segma层的顺序依次输出,转换成AVS/Express可识别的有格式数据,然后,再在此基础上编写数据压缩程序将数据转换成二进制数据格式进行存储,减小数据文件的大小。 #p#page_title#e#
2.AVS/Express的.fld文件的建立
除了要将数据转换为AVS/Express可识别的格式,还要定义AVS/Express需要的.fld文件,在.fld文件中定义数据的维数、格式、层数、数据类型以及偏移量等信息。
AVS/Express根据.fld文件中定义的信息从数据文件中逐层提取数据。
3.AVS/Express开发技术分析
使用AVS/Express开发应用有三种方法:
(1)网络编辑器(Network Editor)的流程图方式;
(2)VCP和V脚本语言开发方式;
(3)API编程方式。
在本专题开发中,我们使用网络编辑器的流程图方式。它使我们能利用AVS/Express提供的功能模块,以类似“搭积木”的方式进行应用程序开发。
网络编辑器(Network Editor)的主界面包括菜单、模板库和用户编程库。 模板库主要包括数百个预制的功能模块,这些模块可在网络编辑器中非常方便的使用。AVS/Express中共提供以下几个软件包:
① 图形显示软件包(GDK);
② 数据可视化软件包(DVK);
③ 图象处理软件包(AGK);
④ 数据库软件包(DBK);
⑤ 用户接口软件包(UIK)。
网络编辑器是AVS/Express软件和用户之间的主要接口。我们在网络编辑器中利用软件包中提供的技术,选取我们需要的模块连接、装配对象和应用程序组件控制数据,并对它们进行处理和显示。
(1) UI:产生系统的主界面,(2) 包括窗口、标(3) 题条、下拉菜单等等;为用户使用该系统提供一个接口,(4) 用户可以选择数据文件、控制面板和退出应用程序,(5) 以及3D、2D显示的放大、缩小、旋转等
(7) Process_UI:分别建立地形、温度、雨量、云量和风场的显示界面;包括对话框、标(8) 题、显示内容信息和显示界面范围等。
(9) ControlParam:是group对象,(10) 主要用来与其它模块建立参数之间的联系。
(11) OptParam:也是group对象,(12) 主要负责进行参数传递。
(13) Process_Display:包含ground_display(地形)、temp_display(温度)、rain_display(雨量)、cloud_display(云量)、wind_display(风场)、bound_display(坐标(14) )和time_loop(时间)对象,(15) 通过处理地形、温度、雨量、云量、风场数据进行3D或2D的显示;用time_loop完成对温度、雨量、云量、风场的随时间场变化而(16) 产生连续运动;在bound_display中采用Dvscale、Axis3D等模块完成三维网格坐标(17) 的范围显示和数值显示等。
(18) Viewer:定义可视化应用程序显示部分的各种要素,(19) 由一个缺省的图形窗口和一组用户编辑界面组成,(20) 用户可以控制对象的显示。
在UI、Process_UI、Process_Display和Viewer对象中有多级对象层次,有些对象是其它对象的组合,而这些对象中的许多本身也是对象的组合,也就有了父对象或子对象的概念。如Process_UI对象由groundopt、rainopt、tempopt、cloudopt、cloudopt 5个子对象组成,而在groundopt中又包含了field、option和image等子对象。通过对对象的输入端口和输出端口的连接,数据引用、封装、继承及参数设置,完成该应用系统内部的数据流动,执行顺序和功能实现。对象之间的连接线表明一个对象可以引用另一个对象,这种连接不仅定义了一个对象怎样获取它的数据,而且也驱动应用程序的执行。当数据变化时,所有引用这个数据的对象也被告知这种变化,并导致对象的执行。
当用户通过系统界面读入新的数据文件和需求后,Process_Display根据它接收的最新数据执行相应的操作。
4.开发实例说明
(1)云量数据可视化化过程
云量数据的可视化方式包括等值面显示和体视化显示两种方式。
两种方式均由isosurface模块来实现,不同之处在于体视化要使用volume render模块进行边缘的虚化,下面重点进行介绍。
体视化只能处理数据为均匀网格,数据类型为字节型(byte)或短整型(short int)。首先要将云量的数据类型由浮点型(float)转换成字节型,定义比例因子。云量体视化开发中使用的主要模块说明如下: #p#page_title#e#
data_math模块用于进行数据类型的转换,与Dvreadfield相连,data_math模块根据读入的云量数据计算读入数据最小值(min)和读入数据最大值(max);按照计算公式255/(max-min)计算比例因子(scale),再按照计算出的比例因子将读入的云量数据类型转换为字节型,进行云量体视化显示。
volume_render模块可以直接展示三维体数据,可以使用BTF(硬件方式)或者光线跟踪(软件方式)的体视化模式。当体视化的方式被激活,它可以支持体积和几何学的混合显示。这个模块通过它相对应的面板,提供一个非常便于使用的操作界面。该控制面板包含图形显示工具箱界面,体模式和数据图的算法成分。这些控制是体视化模块中最普通的使用特征,通过它们可以轻松的对该模块进行控制。本课题采用BTF方式,精度差一些,但是显示速度比使用软件方式快。
我们使用volume_render模块来将转换后的体数据进行体视化显示。体视化模块用三维纹理映射合成体数据中的断层面,以便几何显示器进行显示,下图为体视化显示。
几何显示器模块(Uviewer3D模块)定义了一个图形应用显示组件的所有必要成分。它是一个高级的应用程序对象,其中包含了许多其他较低级别的对象。
几何显示器模块含有一个默认的图形窗口和用户界面编辑器。通过它使用者能够控制相关对象的显示。一个图形的处理仅仅对应一个单一的几何显示器模块。但是我们可以使用显示编辑面板来增加额外的图形窗口,从而通过多个显示图形窗口来观察被显示的对象。几何显示器模块包含“屏幕”(Scene),“屏幕选择器”(Scene Selector),“屏幕编辑器”(Scene Editor)。
“屏幕”定义一个最高层次的数据对象(Top),其下可以包含许多子对象。Top对象属性的任何改动都可能传递给其下面的子对象,从而可对整个对象层次进行统一处理。
在“屏幕选择器”中,我们可以选择当前屏幕并把该屏幕的显示图像进行编辑处理。“屏幕编辑器”定义了一些相关工具栏,允许用鼠标对显示图像进行交互处理,例如重新设置图像的属性,使图像规一化等等。
“屏幕编辑器”提供了一整套编辑面板,比如光线编辑、照相机编辑、颜色映射编辑等等,实现对显示图像的后期处理,以达到满意的效果。
(2)风场数据可视化过程
风场数据包括经向(U)和纬向(V)两个方向的数据,首先,要对两个方向的数据进行矢量合成,合成由Combine vect模块完成,再按照合成后的数据绘制风的流场图。
风场显示设置用户界面,通过“浏览”按钮选择要输入的风场数据文件。
显示剖面的方向有三个选择:0-X轴方向剖面;1-Y轴方向剖面;2-Z轴方向剖面;X/Y方向分辨率:分别定义风场流场线的疏密程度,windopt.downsize:实现X/Y方向分辨率的改变。
风场数据的流场显示由Parical Advector模块实现的,Parical Advector模块中的Advector模块包括AdvectUI、Advect、UIshell等模块,Uishell将用户的输入传递给AdvectUI中的相应参数,再由AdvectParam传递到Advect模块进行风场数据的流场显示。
(3)多媒体产品的定制和分发
我们使用动画生成器模块(animator模块)和图象捕捉模块(image capture模块)生成多媒体产品。动画生成器模块的主要功能是利用对象属性的关键帧进行差值,产生动画。并且可以将差值产生的动画在几何显示器模块中进行回放。图象捕捉模块的功能是抓取正在回放动画的图片,并将抓取的动画生成AVI图象文件并进行存盘。这样,我们就可以利用其它多媒体播放软件播放该文件,再现动画的过程。
开发气象模式三维可视化系统的目的就在于要将三维可视化技术应用于气象模式数据,实现气象模式数据的三维可视化显示,为国家气象中心乃至气象领域的气象预报工作者提供一个直观的模式数据可视化分析环境,即运用图形、色彩和动画来表示数值预报的结果(气象产品数据)。
基于上述原则,我们选择AVS/Express作为开发平台,结合国家气象中心的实际需求,针对业务和科研的发展,建立一套满足气象工作者要求的实用系统。目前国家气象中心的数值天气预报模式主要有:T106L19,HLAFS和MM5(中尺度数值预报)等。其中,MM5模式不仅应用于北京地区,还有天津、河北,以及整个华北地区,尤其在1999年“澳门回归”特殊气象保证期间,提供了北京、澳门短期(36小时)数值预报。为此我们确定可视化应用系统以运行于神威巨型机上的MM5为研究对象,针对MM5模式的数据结构和特点,采用三维可视化开发工具AVS/Express,在Windows平台上开发建立“气象模式数据三维可视化系统”,实现数据的三维及二维可视化显示。
该系统可以将收集来的大量数据进行有效的处理和图形显示,使气象预报工作者能够明晰数据结构,并有效地利用这些气象数据。除此之外,还具有对可视化数据进行分析的功能,既将数据变化的过程用图形、色彩、动画等方式表现出来,这正是与目前气象预报员使用的“MICAPS图形图像系统”最主要的区别。
基于AVS/Express开发的应用系统的优越之处就在于不仅能够为气象工作者提供观察数据发生演变过程的手段和数值分析工具,及时跟踪和评估重要天气情况;还能够为气象工作者提供一种检验方法,以检验数值天气预报的准确度。
二.“MM5模式三维可视化系统”开发研究中所采用的技术
1. 采用面向对象的开发技术:
AVS/Express是一个面向对象的、可视化开发工具,它的核心就是面向对象技术,支持数据和方法在类中的封装;支持类的继承、模板和实例;支持对象的分层结构以及类的多态性等特性。利用它能够建立可重复使用的对象、应用程序组件以及数据可视化应用程序,通过对象或组件的灵活组合,定制数据的三维及二维可视化显示方式。
在AVS/Express所提供的库中,从最底层到最高层,所有的应用程序组件都采用对象的方式开发。
2. 开发工作采用AVS/Express提供的网络编辑器(Network Editor)方式:
AVS/Express的网络编辑器是一个可视化的开发环境,通过鼠标驱动操作就可实现连接、定义、装配和管理对象等一系列开发操作,为开发者提供随意定制、修改应用系统的开发环境。
3. 利用AVS/Express提供的大量的预制功能模块:
AVS/Express提供的预制功能模块能够实现与可视化相关的大量功能,在这些功能模块的基础上,根据实际需要进行各模块的扩充、连接以及装配等工作,就可快速建立应用系统。
4. 应用程序及多媒体产品的分发技术:
AVS/Express开发工具中提供关于应用程序以及定制的多媒体产品的分发功能,实现应用系统在脱离AVS/Express开发平台独立运行和使用,以及多媒体产品的制作与分发。
三.开发中的关键技术
1. MM5数据格式和AVS/Express数据格式的转换
AVS/Express的数据管理采用被称为“Field Data”的数据结构,Field Data数据结构中包括Mesh和Data;其中Mesh是关于D ata域之间的关系描述,Mesh由grid组成,grid定义数据节点的位置;而Data是某一节点位置的矢量或标量值。
AVS/Express支持的Mesh格式有四种:
(1)Unstructured Mesh
(2)Structured Mesh
(3)rectilinear Mesh
(4)Uniform Mesh
MM5的数据属于Uniform Mesh格式,它的数据节点分布均匀,节点间距一致,因此只需给出数据点坐标的最大值、最小值及维数即可。 MM5模式运算的结果数据,是一种无格式数据,AVS/Express无法识别这种格式,所以,首先就要根据AVS/Express对数据格式的需要对MM5模式的运算结果进行提取和转换,提取出所需的气象要素数据,并且按照经纬度和Segma层的顺序依次输出,转换成AVS/Express可识别的有格式数据,然后,再在此基础上编写数据压缩程序将数据转换成二进制数据格式进行存储,减小数据文件的大小。 #p#page_title#e#
2.AVS/Express的.fld文件的建立
除了要将数据转换为AVS/Express可识别的格式,还要定义AVS/Express需要的.fld文件,在.fld文件中定义数据的维数、格式、层数、数据类型以及偏移量等信息。
AVS/Express根据.fld文件中定义的信息从数据文件中逐层提取数据。
3.AVS/Express开发技术分析
使用AVS/Express开发应用有三种方法:
(1)网络编辑器(Network Editor)的流程图方式;
(2)VCP和V脚本语言开发方式;
(3)API编程方式。
在本专题开发中,我们使用网络编辑器的流程图方式。它使我们能利用AVS/Express提供的功能模块,以类似“搭积木”的方式进行应用程序开发。
网络编辑器(Network Editor)的主界面包括菜单、模板库和用户编程库。 模板库主要包括数百个预制的功能模块,这些模块可在网络编辑器中非常方便的使用。AVS/Express中共提供以下几个软件包:
① 图形显示软件包(GDK);
② 数据可视化软件包(DVK);
③ 图象处理软件包(AGK);
④ 数据库软件包(DBK);
⑤ 用户接口软件包(UIK)。
网络编辑器是AVS/Express软件和用户之间的主要接口。我们在网络编辑器中利用软件包中提供的技术,选取我们需要的模块连接、装配对象和应用程序组件控制数据,并对它们进行处理和显示。
(1) UI:产生系统的主界面,(2) 包括窗口、标(3) 题条、下拉菜单等等;为用户使用该系统提供一个接口,(4) 用户可以选择数据文件、控制面板和退出应用程序,(5) 以及3D、2D显示的放大、缩小、旋转等
(7) Process_UI:分别建立地形、温度、雨量、云量和风场的显示界面;包括对话框、标(8) 题、显示内容信息和显示界面范围等。
(9) ControlParam:是group对象,(10) 主要用来与其它模块建立参数之间的联系。
(11) OptParam:也是group对象,(12) 主要负责进行参数传递。
(13) Process_Display:包含ground_display(地形)、temp_display(温度)、rain_display(雨量)、cloud_display(云量)、wind_display(风场)、bound_display(坐标(14) )和time_loop(时间)对象,(15) 通过处理地形、温度、雨量、云量、风场数据进行3D或2D的显示;用time_loop完成对温度、雨量、云量、风场的随时间场变化而(16) 产生连续运动;在bound_display中采用Dvscale、Axis3D等模块完成三维网格坐标(17) 的范围显示和数值显示等。
(18) Viewer:定义可视化应用程序显示部分的各种要素,(19) 由一个缺省的图形窗口和一组用户编辑界面组成,(20) 用户可以控制对象的显示。
在UI、Process_UI、Process_Display和Viewer对象中有多级对象层次,有些对象是其它对象的组合,而这些对象中的许多本身也是对象的组合,也就有了父对象或子对象的概念。如Process_UI对象由groundopt、rainopt、tempopt、cloudopt、cloudopt 5个子对象组成,而在groundopt中又包含了field、option和image等子对象。通过对对象的输入端口和输出端口的连接,数据引用、封装、继承及参数设置,完成该应用系统内部的数据流动,执行顺序和功能实现。对象之间的连接线表明一个对象可以引用另一个对象,这种连接不仅定义了一个对象怎样获取它的数据,而且也驱动应用程序的执行。当数据变化时,所有引用这个数据的对象也被告知这种变化,并导致对象的执行。
当用户通过系统界面读入新的数据文件和需求后,Process_Display根据它接收的最新数据执行相应的操作。
4.开发实例说明
(1)云量数据可视化化过程
云量数据的可视化方式包括等值面显示和体视化显示两种方式。
两种方式均由isosurface模块来实现,不同之处在于体视化要使用volume render模块进行边缘的虚化,下面重点进行介绍。
体视化只能处理数据为均匀网格,数据类型为字节型(byte)或短整型(short int)。首先要将云量的数据类型由浮点型(float)转换成字节型,定义比例因子。云量体视化开发中使用的主要模块说明如下: #p#page_title#e#
data_math模块用于进行数据类型的转换,与Dvreadfield相连,data_math模块根据读入的云量数据计算读入数据最小值(min)和读入数据最大值(max);按照计算公式255/(max-min)计算比例因子(scale),再按照计算出的比例因子将读入的云量数据类型转换为字节型,进行云量体视化显示。
volume_render模块可以直接展示三维体数据,可以使用BTF(硬件方式)或者光线跟踪(软件方式)的体视化模式。当体视化的方式被激活,它可以支持体积和几何学的混合显示。这个模块通过它相对应的面板,提供一个非常便于使用的操作界面。该控制面板包含图形显示工具箱界面,体模式和数据图的算法成分。这些控制是体视化模块中最普通的使用特征,通过它们可以轻松的对该模块进行控制。本课题采用BTF方式,精度差一些,但是显示速度比使用软件方式快。
我们使用volume_render模块来将转换后的体数据进行体视化显示。体视化模块用三维纹理映射合成体数据中的断层面,以便几何显示器进行显示,下图为体视化显示。
几何显示器模块(Uviewer3D模块)定义了一个图形应用显示组件的所有必要成分。它是一个高级的应用程序对象,其中包含了许多其他较低级别的对象。
几何显示器模块含有一个默认的图形窗口和用户界面编辑器。通过它使用者能够控制相关对象的显示。一个图形的处理仅仅对应一个单一的几何显示器模块。但是我们可以使用显示编辑面板来增加额外的图形窗口,从而通过多个显示图形窗口来观察被显示的对象。几何显示器模块包含“屏幕”(Scene),“屏幕选择器”(Scene Selector),“屏幕编辑器”(Scene Editor)。
“屏幕”定义一个最高层次的数据对象(Top),其下可以包含许多子对象。Top对象属性的任何改动都可能传递给其下面的子对象,从而可对整个对象层次进行统一处理。
在“屏幕选择器”中,我们可以选择当前屏幕并把该屏幕的显示图像进行编辑处理。“屏幕编辑器”定义了一些相关工具栏,允许用鼠标对显示图像进行交互处理,例如重新设置图像的属性,使图像规一化等等。
“屏幕编辑器”提供了一整套编辑面板,比如光线编辑、照相机编辑、颜色映射编辑等等,实现对显示图像的后期处理,以达到满意的效果。
(2)风场数据可视化过程
风场数据包括经向(U)和纬向(V)两个方向的数据,首先,要对两个方向的数据进行矢量合成,合成由Combine vect模块完成,再按照合成后的数据绘制风的流场图。
风场显示设置用户界面,通过“浏览”按钮选择要输入的风场数据文件。
显示剖面的方向有三个选择:0-X轴方向剖面;1-Y轴方向剖面;2-Z轴方向剖面;X/Y方向分辨率:分别定义风场流场线的疏密程度,windopt.downsize:实现X/Y方向分辨率的改变。
风场数据的流场显示由Parical Advector模块实现的,Parical Advector模块中的Advector模块包括AdvectUI、Advect、UIshell等模块,Uishell将用户的输入传递给AdvectUI中的相应参数,再由AdvectParam传递到Advect模块进行风场数据的流场显示。
(3)多媒体产品的定制和分发
我们使用动画生成器模块(animator模块)和图象捕捉模块(image capture模块)生成多媒体产品。动画生成器模块的主要功能是利用对象属性的关键帧进行差值,产生动画。并且可以将差值产生的动画在几何显示器模块中进行回放。图象捕捉模块的功能是抓取正在回放动画的图片,并将抓取的动画生成AVI图象文件并进行存盘。这样,我们就可以利用其它多媒体播放软件播放该文件,再现动画的过程。