三维地层可视化系统
煤矿安全开采决策最大的特点,就是必须面对复杂多变的地质和开采技术条件。而不能够根据具体的地质条件进行针对性的开采设计,特别是在采场推进过程中对上覆岩层赋存情况的变化以及由此变化导致的覆岩运动规律及支承压力分布规律的差异认识不清,是当前煤矿事故频繁,特别是重大事故和环境灾害没有能从根本上得到控制、开采经济效益不好的重要原因之一。基于上述目的,我们开展了《三维地层可视化系统》的研究工作。
一.系统目标
主要针对煤矿主采煤层、主采区域进行三维地层可视化工作。基本思想是以煤层底板等高线和地质柱状图为建模基础信息,采用三维可视化技术,将二维抽象的等高线信息以三维可视化的图形效果直观形象地表达出来,为开采决策提供依据。
本课题采用Visual Basic 程序设计语言 和基于 OpenGL类库的开发思路,成功的实现了三维地层的可视化。
OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。值得一提的是,随着Microsoft公司在Windows NT和最新的Windows 95中提供了OpenGL标准及OpenGL三维图形加速卡的推出,OpenGL将在微机中有广泛地应用,同时也为广大用户提供了在微机上使用以前只能在高性能图形工作站上运行的各种软件的机会。
OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能:
1、建模
OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面(例如Bezier、Nurbs等曲线或曲面)绘制函数。
2、变换
OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法与机器人运动学中的坐标变换方法完全一致,有利于减少算法的运行时间,提高三维图形的显示速度。
3、颜色模式设置
OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。
4、光照和材质设置
OpenGL光有辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。
5、纹理映射(Texture Mapping)
利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。
6、位图显示和图象增强
图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。以上三条可是被仿真物更具真实感,增强图形显示的效果。
7、双缓存动画(Double Buffering)
双缓存即前台缓存和后台缓存,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。从而实现了消隐算法。
我们选用的开发工具是Visual Basic 6.0。在VB中调用OPenGL函数,所以开始就要对程序初始化,连接库函数。我们在Windows 下窗口程序必须首先处理设备描述表(Device Contexts,DC),DC包括许多如何在窗口上显示图形的信息,既指定画笔和刷子的颜色,设置绘图模式、调色板、映射模式以及其它图形属性。同样,OpenGL for Windows的程序也必须使用DC,这与其它Windows 程序类似。但是,OpenGL for Windows 必须处理特殊的DC图形操作描述表,这是DC中专为OpenGL使用的一种。一个OpenGL应用图形操作描述表内有OpenGL与Windows 窗口系统相关的各种信息。一个OpenGL应用首先必须创建一个图形操作描述表,然后再启动它,最后在所定义的窗口内按常规方式调用OpenGL函数绘制图形。
一个图形操作描述表不同于其它DC,它们调用每个GDI函数都需要一个句柄,而图形操作描述表方式下只需一个句柄就可以任意调用OpenGL函数。也就是说,只要当前启用了某个图形操作描述表,那么在未删除图形操作描述表之前可以调用任何OpenGL函数,进行各种操作。
在创建一个图形操作表之前,首先必须设置像素格式。像素格式含有设备绘图界面的属性,这些属性包括绘图界面是用RGBA模式还是颜色表模式,像素缓存是用单缓存还是双缓存,以及颜色位数、深度缓存和模板缓存所用的位数,还有其它一些属性信息。
像素格式结构
每个OpenGL显示设备都支持一种指定的像素格式。一般用一个名为PIXELFORMATDESCRIPTOR的结构来表示某个特殊的像素格式,这个结构包含26个属性信息。Win32定义PIXELFORMATDESCRIPTOR如下所示:
typedef struct tagPIXELFORMATDESCRIPTOR
{
WORD nSize;
WORD nVersion;
DWORD dwFlags;
BYTE iPixelType;
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE iLayerType;
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR;
对像素结构初始化后,然后创建图形操作描述表并启用它后,就可以在WINDOWS下进行OPenGl编程了。
二.系统实现的功能
本系统实现的功能如下:
(1)
底板等高线图信息的数字化;
(2)
三维地层建模;
(3)
三维地表模型的建模。
(4)
三维地层模型的剖分;
(5)
三维地层模型的渲染;
1.底板等高线图信息的数字化
(1)首先,在AutoCAD中,利用数字化仪对已有的等高线图纸进行数字化处理。然后利用专门编制的AutoLISP软件对等高线进行直接采点,并将这些点的三维坐标(x,y,z)写入文件中。图1为潞安矿区常村煤矿某区域的等高线图。
图 1 常村煤矿某区域的等高线图
通过数字化采点以后,形成数据文件“3d_xyz_常村3煤.txt”。部分内容如下:
(407567.0
4.026e+006 0.0) 530
(407552.0
4.02595e+006 0.0) 530
(407537.0
4.0259e+006 0.0) 530
(407524.0
4.02585e+006 0.0) 530
……
……
……
……
(408250.0
4.02405e+006 0.0) 558.663
(408250.0
4.0241e+006 0.0) 558.665
(408250.0
4.02415e+006 0.0) 558.738
(408250.0
4.0242e+006 0.0) 558.952
(408250.0
4.02425e+006 0.0) 559.453
在此基础上,采用Visual Basic 编制了专门的数据处理软件:3Dprocessor,对这些数据进行处理。该软件能够对数据中的错误进行纠正,并且在矩形边界上进行合理的插值。处理完成后,形成三维地层建模数据文件:“3D_xyz_sort.txt”。
2.三维地层建模
部分结果如下: