基于OpenGL的混凝土坝施工三维动态图形仿真
来源:第三维度
作者:申明亮 ,熊碧露 ,肖 宜
单位:水资源与水电工程科学国家重点实验室
武汉大学
摘要 :以 Visual C + + 和 OpenGL 为技术平台 ,对混凝土坝施工的三维图形仿真技术进行了研究。介绍了应用AutoCAD 建模以及模型数据转换的方法、增强图像真实感的基本手段以及实现坝体上升动态显示的策略。并将上述方法应用在向家坝大坝施工的三维动态图形仿真中。
1 混凝土坝施工图形仿真的设计与实现
应用 OpenGL 进行混凝土坝施工的三维动态图形仿真 ,需要借助其他的软件来完成建模以及数据转换工作 ,以达到减少重复劳动 ,降低工作强度的目的。其设计和实现方法如下 :首先在 AutoCAD 中建立模型 ,并将其导出为“. 3DS”格式的文件 ;然后在 OpenGL 中读取“. 3DS”格式的模型数据 ,并对模型进行光照、贴图以及雾化等处理 ,增强其真实感 ;结合 OpenGL的显示列表技术 ,由系统定时器控制产生动画效果。
1. 1 三维模型的建立
三维模型不仅有混凝土坝坝体模型 ,还包括坝址处的地形模型。OpenGL 是一种功能强大的三维计算机图形模型库 ,它提供了基本几何图元 ———点、线和多边形的绘制函数 ,但是单纯利用 OpenGL 图形库提供的基本几何体构造这些三维模型是非常困难的 ,而且大量绘图程序语句使得程序冗长 ,运行时占用内存资源增加 ,因而是不可取的。
借助一些优秀的三维图形软件 ,如 3DS MAX,AutoCAD等可以轻松地建立物体的三维模型 ,但是在后期的控制上又有困难 ,例如 3DS MAX 动画是基于关键帧而不是人机交互的 ,需要大量的重复劳动。为充分利用三维图形软件和 OpenGL的优点 ,可以采用一种比较理想的方法 :利用三维图形软件AutoCAD 建立仿真对象的三维模型 ,避免在 OpenGL 中用点、线和多边形来建模的繁重劳动 ,以提高建模效率和保证模型质量 ;然后通过数据转换 ,将三维图形软件建立的模型数据转换为 OpenGL 能够读取的数据格式 ;最后在 OpenGL 程序中实现模型的重构。
(1)地形模型
三维地形建模的方式有 3 种 :线框模型、表面模型和实体模型。在这 3 种模型中 ,表面模型可以满足表现三维地形的需要 ,数据量也不大 ,因而可以采用表面模型的方式来建立地形模型。
考虑到三维地形建模的需要 ,首先应对设计单位提供的地形图进行初处理 ,主要工作是线型统一处理 ,即在 AutoCAD中 ,将地形图中的等高线用多段线 (Polyline) 来描述 ;随后进行等高线矢量化 ,即为地形等高线赋高程值 ,建立三维地形图的线模型 ;最后通过面片建模 ,将单纯的地形线模型转化为面模型。为减少工作强度 ,等高线之间采用直纹曲面 (Ruled Sur2face) 填充 ,开挖处及局部缺陷处用边界曲面 ( Edge Surface) 填充 ,以控制精确度。地形建模的工作流程如图 1 所示。
图 1 地形模型建模的工作流程
需要指出的是 ,为模型数据转换的需要 ,应根据局部地貌的不同以不同图层来管理地形模型。例如在水电工程中 ,地形模型需要表示的不同地貌一般有山体、河谷、河漫滩以及开挖边坡等 ,地形模型中必须以不同的图层来区别它们。
(2) 坝体模型
根据已有的水工设计图纸资料 ,在 Auto2CAD 中建立坝体三维模型是很容易的。首先根据提供的坝体剖面图 ,用多段线(Polyline)描出各坝段的面模型 ;然后根据坝体结构数据 ,对面模型进行挤压、旋转等操作 ,可以得到坝段的初始实体模型 ;再将该实体模型与额外建立的简单模型进行取交、取差以及合并等处理 ,将排沙孔、导流底孔、表孔以及中孔等孔洞结构表现出来。通过这种方法建立与设计要求相符的坝体实体模型。
坝体模型建立后 ,为实现后续的动态图形仿真 ,还必须根据仿真计算的结果 ,将各个坝段按层厚划分成坝块 ,每个坝块即是一个实体 ,同样将其置于不同的图层 ,并按一定的规律进行编号。
(3) 模型数据转换
模型数据的转换 ,其核心是转换模型的构造数据 ,形成 OpenGL 的模型构造列表 ,作为 OpenGL 的显示列表以进行模型的重构。主要是处理 3 个关键数据集 :顶点集、多边形列表和相关三角形列表。其中多边形列表对应 1组三角形 ,是在 OpenGL 中进行模型重构的重要部分。
当三维模型建立完成后 ,在 AutoCAD 中将模型按图层导出为“. 3DS”数据格式文件。“. 3DS”数据格式只保存和转换模型的几何信息 ,模型的色彩、材质等非几何信息在转换时可能会丢失 ,但是考虑到后续工作中 OpenGL 要对这些非几何信息进行处理 ,而且“. 3DS”数据结构较小 ,在 OpenGL 中应用比较方便 ,所以采用“. 3DS”格式文件进行转换是可行的。
1. 2 真实感模拟
混凝土坝浇筑上升过程仿真的高度真实感 ,需要采用OpenGL 提供的相关指令与函数来实现 ,最基本的包括光照、贴图以及雾化。
(1)光照:没有设置光照的模型 ,当其表面按 OpenGL 的方式进行填充时 ,模型中所有的实体就会失去深度 ,没有立体感 ,可见光照对图形仿真的真实感至关重要。混凝土坝施工系统的空间跨度较大 ,在三维模型中根据需要可以设置多个光源。
(2)贴图:为了更加真实地模拟现实场景 ,需要给模型里的对象进行材质贴图 ,就是根据不同对象的表现需要 ,将已有的图像(通常是位图) 直接贴到对象实体的表面 ,例如将带有混凝土纹理的图片贴在坝体上。采用的贴图最好为无缝贴图 ,否则容易产生接缝 ,影响图形的真实感。采用许多的图像制作软件都可以完成无缝贴图 ,例如 corelDraw ,PhotoShop 等。
(3)雾化:雾化不仅可以增强图形的真实感 ,而且可以减少 3D 图形渲染的工作量。在混凝土坝施工图形仿真中 ,镜头前往往是包括大坝在内的河流的一段狭长区域 ,仿真中需要获得这个区域的深度感 ,通过 glFogi () 函数调用 OpenGL 支持的线性雾(Linear Fog)的雾化模式 ,可以很轻松达到目的。
1. 3 三维仿真动画的实现
用动画形式表现混凝土坝坝块的浇筑动态过程的关键是选择在浇坝块 ,即按照仿真计算得到的浇筑成果数据库中的坝块浇筑顺序 ,将各坝块依次绘制出来。表现在计算机上就是 ,显示在浇坝块 ,得到此时刻坝体面貌 ,跳入下一仓面 ,显示下一浇筑坝块 ,得到下一时刻坝体面貌 ,再跳入下一仓面 ……,依此循环。并通过调用 swapBuffers() 函数启动 OpenGL 的双缓存机制 ,实现后台视频缓存向前台视频缓存的图像传递 ,产生连续的坝体上升动画过程。
可以利用 0penGL 的显示列表来实现这个动画过程。
0penGL 显示列表是一系列 0penGL 命令的高速缓存 ,不必进行内存管理 ,执行效率较高。先在程序中将三维模型中的坝块分别定义为单独的显示列表 ,预先生成三维实体。在图形显示时 ,只需用 glCallList () 函数调用在浇坝块的显示列表即可将其绘制出来 ,这样就不需要重新计算该坝块在场景中的坐标 ,避免大量的浮点运算 ,提高动画的显示速度。
具体在程序可以这样实现坝块的连续绘制 :先访问浇筑成果数据库 ,读取在浇坝块 ,再通过函数 glCallList () 执行相应坝块的显示列表 ,就将该在浇坝块绘制出来 ,再读取下一浇筑坝块 ,执行其显示列表。这样按照浇筑成果数据库的坝块浇筑顺序 ,将所有坝块全部显示出来。两个坝块间显示的时间间隔通过 Set Timer() 函数设置系统定时器控制。值得注意的是 :时间间隔太大 ,会浪费过多的系统时间 ;时间间隔太小 ,则可能产生帧信息的丢失。因此在确定时间间隔时 ,需要结合系统的计算机的刷新频率和计算的复杂程度等因素来综合考虑。
模型中的三维实体是在三维坐标中定义的 ,要将其显示在计算机的屏幕上 ,还必须通过投影变换、裁剪、视口变换等操作 ,将几何实体的三维坐标转化为屏幕上的像素位置。
2 工程实例
向家坝水电站位于四川省宜宾县和云南省水富县境内 ,是金沙江下游河段梯级水电开发规划的最末一个梯级电站。大坝为混凝土重力坝 ,坝顶高程 383. 00 m ,最大坝高 161. 00 m ,坝顶长度 920. 27 m ,坝体混凝土量 804. 12 万 m3 。大坝从左至右依次为 :左岸非溢流坝段、导流底孔(缺口) 坝段、冲沙孔坝段(兼临时船闸坝段) 、升船机坝、左岸厂房坝段、泄水坝段、右岸非溢流坝段。本工程混凝土工程量大、工期紧、坝体结构复杂、施工难度大。
为紧密配合向家坝水电站施工组织设计工作 ,采用 VisualC + + 和 OpenGL 作为开发工具对大坝施工全过程进行了三维动态图形仿真。通过该系统可以直观地获得大坝的施工信息 ,例如坝体浇筑的跳仓顺序、各坝段任意时刻的浇筑面貌等。
3 结 语
基于 OpenGL 的三维图形仿真在水电工程施工仿真中优越性明显 ,如动画控制方便 ,可以获得高度的真实感及程序的高度可移植性等。实践证明 ,本图形仿真系统将数值计算仿真的成果图形化 ,形象地描绘了大坝浇筑上升的情景 ,实现了仿真结果的可视化 ,为工程设计提供了有力的可视化分析工具 ,能给工程的管理和决策提供有效的参考。
参考文献 :
[1] 向世明. OpenGL 编程与实例[M]. 北京 :电子工业出版社 ,1999.
[2] 周科志 ,毛建平 ,申明亮 ,等. 可视化技术在龙滩工程混凝土浇筑仿真中的应用[J ]. 武汉大学学报(工学版) ,2003 ,36(5) :48 - 49.
[3] 杨东梅 ,朱胜缘 ,路伟成. OPENGL 与 3D Studio MAX 结合实现三维仿真[J ]. 应用科技 ,2004 ,36(2) :34.
[4] 陆 品 ,朱根兴 ,李婷婷. 基于 OpenGL 的三维仿真系统开发. 机械设计与制造工程. 2002 ,31(4) :63.