试议仿真基于OpenGL地下储备库三维仿真系统设计与实现

更新时间:2024-03-08 作者:用户投稿原创标记本站原创
摘要:本文介绍了一种利用OpenGL和3D max相结合开发的地下储备库三维仿真系统,首先利用3D MAX建立地下工程的三维模型,通过第三方软件转换成OpenGL可以识别的代码,再利用OpenGL实现对模型的实时控制,包括进度显示、模型平移、缩放和旋转,分层模型的消隐等。用户通过这套系统可以直观的了解工程建设的进展情况,并且通过自主控制多角度、全方位了解地下工程的情况。
关键词:OpenGL;3D;MAX;地下储备库;仿真
1007—9599 (2012) 14—0000—02
二、引言
地下水封岩洞储备库是国家进行原油、成品油、天然气战略储备的重要方式之一,对保障国家能源安全有重要的作用和意义。具有安全、环保、经济、使用年限长、免维护、抗震等优势,是欧美、日本等发达国家主要的战略储备方式,我国也陆续在沿海地质条件适宜地区开工建设大型地下水封岩洞储备库。地下工程建设周期较长,地下结构复杂,施工情况受地下不确定因素影响较大,通常施工作业面较多,作业工序交叉多,传统的进度计算和表述方法只能抽象描述整个工程进展情况,描述方法过于单调。而且由于绝大多数单项工程都在地下进行,人们无法直观的看到工程进展到何种程度,因此,结合地下储备库工程特点开发一套图形仿真系统是十分必要的,可及时地反映最新工程进展情况,并可个性化模拟地下储备库的整体情况,用户能够通过自主控制从任意角度观察储备库的模拟。
要实现这套系统的开发,用到的主要工具是SGI公司开发的的三维图形标准库OpenGL,OpenGL是一个功能强大的图形库,它具有很强的交互式三维图形处理能力且独立于窗口系统和操作系统,用户可以利用它绘制出二维或三维图形,以它为基础开发的应用程序可以方便地在各个平台间移植。但由于OpenGL只能通过基本的几何图元即点、线、多边形来建立模型,并没有提供三维模型的高级命令,因此建立复杂物体的三维模型是非常繁琐和枯燥的,所以就需要应用另外一种工具,Autodesk公司开发的三维建模、动画制作软件3Dstudio MAX。利用3Dmax建立复杂物体的模型要简单得多,但它不能进行信息交互,不能实现实时控制,但这又恰好是OpenGL所长,因此,利用OpenGL和3D MAX结合起来实现地下储备库的三维模拟可以得到事半功倍的效果。

二、建模与仿真

(一)利用3D MAX建立地下储备库模型

利用3D MAX建立物体模型,这里只是建立模型,并不对模型赋予材质和灯光,这些工作可以利用OpenGL完成。建模过程中,将各个单项工程分别建模,施工巷道、水幕系统、主洞室、竖井、连接巷道和密封塞六部分。建模完成后将其输出为.3ds格式的文件。3ds文件是3D Max的一种二进制存储格式,它基于“块”存储的,这些块描述了诸如场景数据,编辑窗口的状态,材质,网格数据等。

(二)将3ds文件导入OpenGL中

将3ds文件导入OpenGL可以采用文件转换法或者直接通过编程平台读入3DS文件。文件转换法是利用第三方工具如View3d等直接将3ds文件转换成OpenGL所需的c文件,将生成的.h和.gl文件导入到OpenGL程序框架中,添加相应代码编译执行即可得到所需模型。这种方法较简单,但导入过程中存储在3ds文件中的材质纹理等信息会丢失。开发人员也可以自定义一个读取3ds文件的类,用于3DS文件的读入与重绘。但这需要基于开发人员对3ds文件充分理解的基础上,分别读取3ds文件中的编辑块、颜色块、材质块、纹理块等信息。由于本系统建模阶段并没有进行材质赋予等工作,所以采用第一种方法将3ds文件导入OpenGL。

(三)利用OpenGL建立地下储备库仿真系统

1.在VC++6.0中建立一个基于MFC的单文档应用程序,并将opengl32.lib、glu32.lib、glaux.lib库文件加入到应用程序项目中,在View类的头文件中加入gl.h、glu.h、glaux.h三个头文件。
2.建立窗口着色描述表、OpenGL渲染描述表、设置像素格式、添加view类的消息函数,还需要添加绘图初始化函数和显示函数等。
3.将之前3ds文件转换形成的modle.h和modle.gl文件拷贝到工程文件中,在modle.h文件中会自动生成一个函数GL3DS_initialize_modle(),在int DrawGLScene(GLvoid)中调用该函数,从而完成模型的导入。
4.材质的赋予
OpenGL 用材料对光的红、绿、蓝三原色的反射率来近似定义材料的颜色。由于整个模型是地下洞库的三维示意模型,为了美观和便于观察,并不要求模型的材质和真实环境一样,因此这里我们采取用户自定义颜色的方式,默认设置施工巷道为棕色(0.5f,0.0f,0.0f),水幕系统为绿色(0.0f,1.0f,0.0f),主洞室为紫色(1.0f,0.0f,1.0f),竖井为蓝色(0.0f,0.0f,1.0f)。用户也可按照自己的审美习惯来设置各子系统的颜色,用MFC的CColorDialog类来获取用户定义的颜色。
5.光照
为了增加模型的立体感,还需要在合适的位置增加一些光源,使模型呈现出明暗效果。我们采用glLight*()函数来设置光源的所有属性。它有三个参数,分别用来代表光源标识、需设置的属性及期望的属性值。使用光源必须对光源进行启动,启动光源使用函数GlEnable()实现。
完成上述步骤并编译运行,即可得到地下储备库的三维仿真模型,侧视图如图1所示。

三、仿真系统人机交互的实现

(一)进度实时显示

进度实时显示的思路是采用不用颜色来区分工程完成部分和未完成部分,模型未完成部分用灰白色显示,已完成部分用其他色彩显示,同样这些色彩都是可以由用户来定义的。但地下工程有其复杂性,单项工程并不是从起点坐标开始,而是根据施工方法,施工工序等各种因素确定,有可能从起点开始,也有可能从中间的某一个点开始,为了精确显示进度的完成情况,我们对从用户那里采集的数据做了统一要求,都以起点+里程的格式,如施工巷道SAT2+00~SAT3+50,表示施工巷道起点开始200—350米。把采集到的用户数据通过数学变换转换为和系统一致的坐标信息,对这部分模型赋予新的材质,就实现了施工进度的立体显示。

(二)平移、旋转和缩放

实时平移、旋转和缩放是查看地下储备库三维模型时所必须的操作,通过这些操作就能够实现从任意角度观察模型,从而解决了遮挡及视觉死角等问题。用户可以通过鼠标键盘来控制模型的显示情况。
1.平移变换
在OpenGL绘图时,只需对视点位置和参考点位置进行简单的变换操作就可以实现平移变换,下面是实现水平移动的部分代码。
//以下代码表示物体的水平移动
2.旋转
//以下代码实现沿z轴旋转,其中angle为旋转角度
3.缩放
//以下代码实现缩放功能

(三)局部显示

很多时候用户仅仅需要看到某一单项工程的情况,每一次用户选择不同的单项工程,都需要对该工程进行重绘,这种方法会消耗较多的资源,降低程序运行效率。为了提高系统效率,采用OpenGL提供的显示列表来解决这一问题。OpenGL显示列表是一组预先存储起来的OpenGL命令。显示列表可以在任何地方被调用,并按顺序立即执行。下面是创建显示列表的伪代码:
//同样建立其他5个单项工程的显示列表
程序中根据用户的选择情况,在绘图函数中,来调用相应的单项工程的显示列表,就可以实现单项工程的局部显示。

(四)仿真系统结果

下图是某地下储备库工程水幕系统进度显示效果图。
四、结论
采用3D MAX和OpenGL相结合实现了对地下储备库的三维仿真模拟,利用3D MAX建立模型方便和OpenGL容易实现人源于:论文书写格式www.808so.com
机交互的特点,避免了各自的缺陷,从而使三维仿真的实现变得更加轻松。通过地下储备库三维模拟系统,用户可以直观的了解工程进展情况,同时通过实时人机交互,较为方便的显示自己想要了解的具体情况,施工单位也可以运用此系统合理布置施工工序,减少工序的不合力交叉。此外,系统还留有接口,可以同地下储备库的传感系统相连接,在将来工程竣工投入使用后,能够通过采集传感器数据来实时显示整个储备库的情况以及重点部位的应力分布等,当然,要实现这些功能,还必须要对整个系统进行大量的优化。

点赞:5645 浏览:13575