logo资料库

基于OSG的三维河流的可视化研究——以长江澄通河段为例 .pdf

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
http://www.paper.edu.cn 基于OSG的三维河流的可视化研究 —以长江澄通河段为例 刘现锋 1 ,王船海 1.河海大学水文水资源学院,南京(210098) 1 ,唐海涛 2 ,孙奇 3 ,张文静 1 2.华东勘测设计研究院,杭州 (310014) 3.余姚市水利局,浙江余姚 (315400) E-mail: liuxianfeng83511@163.com 摘 要:本文以长江澄通河段为研究对象,在 Visual C++平台上,以三维图形开发应用库 Open Scene Graph (简称 OSG)为基础,实现三维河流的可视化。本文所实现的三维河流的 可视化不仅仅是河面和河床的三维可视化,河面和河床之间的内部水体的也以六层三维网格 的形式展现出来了。当后台的数学模型开始计算后,河流也开始动态地流动,达到计算和显 示同步进行的目的。同时可以方便地对河流的实时信息进行查询,比如当前 U 方向流速、V 方向流速、W 方向流速等信息。这样,人们可以直观地看到河道中水流的变化情况。通过系 统的运行表明,该系统能逼真地显示河流的三维动态变化,取得了较好的效果。 关键词:OSG; 三维河流; 可视化; 长江澄通河段 中图分类号:P33 1.引言 水流的实际运动呈现的是三维形态,要全面如实地反映水流的真实特性,必须用三维的 形式来模拟水流的运动[1] 。近三十年来,三维水流数学模型的研究取得了显著进展,已经 逐渐成为了研究水流实际运动状态的强有力工具[1]。但是这些模型的计算结果大多以文件形 式来表示,文件中依次包含了各网格点的 U、V、W 流速等信息。显然这种数字表达不够直 观,本文利用 Visual C++平台,在 Open Scene Graph(简称 OSG)基础上对河道三维水流数 学模型的计算结果进行动态显示,以更好的展示河流的运动过程,实现水流的动态流动,使 人们更直观的看到河道中水流的变化,使得水流信息得以更直观的表达。 目前关于河流可视化的研究大多是河流河面的三维可视化,没有表现河流内部的动态变 化。本文不仅仅实现了河流河面的三维表达,其内部形态也能够展现出来。 关于三维河流的可视化的研究,G.Drogue 等人[2](2002)利用 ArcView 的可视化工具对水 文过程进行了三维可视化研究,他们表现的是线状河川径流的三维动态变化。Bo Huang 等 人[3](2002)采用 ArcView 的宏语言 Avenue 编程,把水文模型 TOPMODEL 和地理信息系 统的可视化和空间分析功能集成起来(AVTOP),能够显示三维地形,但河流的可视化停留在 三维河面上。袁艳斌等人[4](2002)以 Visual C++为系统开发平台,结合 GIS 和 OpenGL 技 术模拟了流域洪水的三维演进过程,其表现的是水面的三维可视化。陈鹏霄[5](2004)等人 应用 3DMAX 的插件 Realflow 和 Realwave 来实现水流的仿真,仿真的仍是河流河面的情景, 未对河流内部的状况进行表达。罗维佳等人[6](2005)以 Visual C++6.0 调用 OpenGL 函数 对流域空间水文过程三维可视化进行了研究,其研究的可视化是流域径流表面的可视化,其内 部状态没有表现出来;另外其空间水文过程和水文模型计算是分离的,以文件形式来达到数 据通讯,未能实现水文过程真正意义上的实时动态显示。唐海涛[7](2008)对二维河网计算模 型的结果数据进行了动态显示, 在 Visual C++开发平台上,以三维图形开发应用库 Open Scene Graph 为基础,来构建三维场景,显示的仍然是河流河面的三维形态。 - 1 -
http://www.paper.edu.cn 2.研究区域概况 本文选取长江澄通河段,作为研究区域。该区域属于长江河道下游河段(如图 1 所示), 澄通段上起江阴黄田港,下至常熟徐六泾,由福姜沙水道、如皋沙水道、通洲沙水道、狼山 沙水道及徐六泾节点段等组成。该段河道形状呈“Z”字型(如图 2 所示),属于多汊型河 段,河道内沙洲密布,水流结构复杂。该河段主要特点是江面宽窄相差悬殊,鹅鼻嘴节点处 江面宽仅 1.4 公里左右,狼山沙水道处河床宽度达 10 公里左右,至徐六泾又缩窄为 5~6 公 里。该段河道两岸为广阔的冲积平原,地势低平,是粮棉油的重要产区。该河段处于经济高 度发达地区,辖区两岸大中型企业林立,有江阴港等 5 大港口,有万吨级深水码头 38 座, 吞吐量约 4700 万吨,是长江流域经济最发达地区[8-10]。 图 1 长江澄通河段地理位置示意图 Fig.1 Location of Yangtze River ChengTong Reach 图 2 长江澄通河段形状示意图 Fig.2 Sketch of Yangtze River ChengTong Reach - 2 -
http://www.paper.edu.cn 3.Open Scene Graph 简介 Open Scene Graph (以下简称 OSG)是一款高效实时的三维图形开发包,OSG 构建于 OpenGL 图形函数库之上,全部采用标准 C++语言开发,主要应用于游戏、虚拟现实和科学 计算可视化与仿真领域的高性能图形程序的开发[11]。 OSG 包含了一系列的开源图形库,主要为图形图像应用程序的开发提供场景管理和图 形渲染优化的功能[12]。它采用自顶向下的树状结构的场景图来管理和组织空间数据集。场 景图大量定义的节点类型及其内部的空间组织结构能力,使传统的底层渲染 API 无法实现 的数据存储特性得到了实现,提高了渲染的效率。 根节点 地形节点 河流节点 图 3 场景图形示例 场景图形树结构的顶部是一个根节点。从根节点向下延伸,各个组节点中均包含了几 Fig.3 A sample of scene graph 何信息和用于控制其外观的渲染状态信息。根节点和各个组节点都可以有零个或多个子成 员。在场景图形的最底部,各个叶节点包含了构成场景中物体的实际几何信息。图 3 描述了 一个简单的场景图形,根节点包含地形节点和河流节点,分别对应地形和河流模型。 4. 理论及方法 本文采用成熟的河道三维水流数学模型[1]作为系统的后台计算模型。该数学模型在平面 上采用正交曲线拟合坐标,在垂向上采用无量纲变换,模型的节点变量布置采用交错网格布 置。如图 4-6 所示。 - 3 -
http://www.paper.edu.cn 图 4 ξ η− 平面节点布置图 Fig.4 Layout of ξ η− node 图 5 σ ξ− 平面节点布置图 Fig.5 Layout of σ ξ− node 图 6 σ η− 平面节点布置图 Fig.6 Layout of σ η− node - 4 -
http://www.paper.edu.cn 该数学模型原来的计算结果就是以文件形式来表示的,文件中依次包含了各网格点的 U、V、W 流速等信息。本文的主要工作就是把这些数据生动的展现出来,不仅仅实现河流 水面的三维表达,其内部形态也要能够展现出来。另外一点值得注意的是,数学模型的结果 是直接显示的,即结果数据不再输出到文件中,再从文件中读取数据来显示,而是计算和显 示同步进行,达到一边计算一边演示的效果,真正意义上实现实时动态显示。 研究思路,首先是地形的构建,构造河流的地理环境;其次是初始河流的构建,即后台 数学模型没有开始计算时的河流;最后是流动的河流,即开始计算后河流的演示及其信息查 询。在 Visual C++平台上,以 OSG2.2 版本为基础,进行开发。难点是河流的构建,我们知 道河流包括河床、河面及其内部水体。本文把河床和河面之间的水体分为六层,通过这六层 河层来组成河流的内部水体。从而由河床、六层河层、河面来组成三维河流。当然也可以把 河床和河面之间的水体分为其他层数,本文采用的是六层。 在 OSG 中构造一个根节点,其包括两个子节点,一是地形节点,二是河流节点。河流 节点又包括三个子节点:河床节点、六层河层节点、河面节点(如图 7 所示)。 根节点 地形节点 河流节点 河床节点 六层河层节点 河面节点 图 7 OSG 的树状数据结构 Fig.7 Dendriform data structure of OSG 4.1 三维地形的构建 选取包含长江澄通河段的数字高程模型(DEM)数据,经 ArcGIS 软件处理成规则格 网类型的 DEM,并输出到文本格式的文件中去,利用 osg::HeightField 类来构造地形,如图 8 所示。贴上该地区的遥感图片,则更加逼真,如图 3 中地形所示。 - 5 -
http://www.paper.edu.cn 图 8 长江澄通河段地形 Fig8 Terrain of Yangtze River ChengTong Reach 由于 DEM 的分辨率小,研究区域范围大,再加上该区域本身比较平坦,为平原地区, 所以构造的地形起伏不大。看上去像平面一样,在窗口的西部有些小山包,河床也比较浅, 其他地区就非常平坦了。osg::HeightField 类是地形类,专门用来构建地形,只需给定单元格 大小、左下角坐标、格网点高程值即可构建出地形。 4.2 初始河流的构建 初始河流的构建包括河床、六层河层以及河面的构建。 4.2.1 河床的构建 裁取河道的 DEM 数据,经过河海大学研制的“数字流域”系统处理成只包含 X、Y、Z 坐标的文本文件。这次不用 osg::HeightField 类,而用 OSG 提供的多边形绘图命令,利用这 些 简单 图元 的绘 制函 数绘 制多 个三 角形 或四 边形 来近 似模 拟河 床。 定义 图元 的类型 osg::PrimitiveSet::QUAD_STRIP,即四边形条带的形式。把 DEM 数据点按顺序读到河床的 顶点数组中去,即依次输入相邻的两排 DEM 数据点的三维坐标便构成一个四边形条带,多 个相邻的四边形条带便构成了河床的空间模型,如图 9 所示。这样可以体现河道弯曲形状, 如图 10 所示。如果用 osg::HeightField 类,则构造成一个矩形区域的地形,无法显示河流的 弯曲特点。 - 6 -
http://www.paper.edu.cn 图 9 用 OSG 的四边形条带来构图 Fig8 Use QUAD_STRIP of OSG 图 10 河床的整体图 Fig10 The whole river bed 4.2.2 六层河层的构建 在河道数学模型的计算网格中(如图 4~6 所示),选取三维水位节点下方的压强节点 (如图 5、6 中的红点)作为河层的节点,其他信息诸如 U 方向流速、V 方向流速、W 方向 流速等则附加在该节点上。这些压强节点的坐标可以从对应的 DEM 数据中获取,而垂向的 高程值为河面的水位值和河床高程值之间的插值。因为采用交错网格,压强节点的数目比河 床规则格网 DEM 的高程点的数目少一半。我们采用一层一层构建的方法,来组织河流。原 理 与 构 建 河 床 相 同 , 为 了 与 计 算 网 格 类 似 , 我 们 采 用 四 边 形 条 带 osg::PrimitiveSe- t::QUAD_STRIP 图元类型来模拟河层,如图 11 所示。 - 7 -
http://www.paper.edu.cn 图 11 六层河层局部 我们在构造初始河流时后台的数学模型尚未开始计算,因而河流的水位是未知的。我们 Fig.11 Six-storey river section 暂时采用河床一侧的岸边的高程值作为初始水面的水位值,通过与河床高程值的插值来构建 初始河流的内部六层河层。 4.2.3 河面的构建 最后河流水面的的构造。实际在计算开始后由于河面水位值的变化,对应的节点的垂向 值也随之变化,从河流的侧面看比较明显,但是从河流的上面看便不明显了。为此给该河流 加一个流动的河面。OSG 已经和着色语言结合起来,采用着色语言的方式来表现河面,实 现水流的动态模拟,如图 12 所示。同样们暂时采用河床一侧的岸边的高程值作为初始水面 的水位值,来构建初始河流的河面。因而河道中的江心洲、露滩则未显示出来,等开始计算 后随着水位值的更新而逐渐显示出来。 图 12 基于着色语言的河面 Fig.12 River surface based on Shading language - 8 -
分享到:
收藏