基于OpenGL三维地质模型构建
2019-08-19
(成都理工大学地球科学学院 四川 成都 610059)
煤矿的三维建模对于研究地下煤层的构造、储煤量等诸多地质问题提供直观上的模型数据,满足研究人员对于地层认识和空间分析的需求,摆脱了二维模式下抽象的地质符号以及繁杂的钻孔数据(钻孔最重要数据成果是三图一表,即钻孔柱状图、工程布置图、勘探线剖面图和样品分析结果表)对研究地下煤层带来的不便。基于模型的数值模拟和空间分析,能够辅助用户进行科学决策和规避风险。对于提高煤矿开采的工作效率和增加经济效益具有重大的意义。所谓的煤矿三维地质模型构建,就是以计算机技术为支持,在三维环境下,把空间信息的分析管理、地质环境的译、空间信息的分析和预测、地学统计、实体资料分析以及计算机图形可视化工具相结合,并在地质分析上得以运用的技术。构建地质三维模型是为了表达地质资料的空间信息,实现三维模拟是模型显示和分析根本。
一、数据库设计
钻孔数据库是实现三维模型构建的数据支持,根据具体的建模需求调用不同的表格数据是能否完成模型构建的基础。钻井勘探数据是地质研究的主要资料来源,更是地下地层理论研究的重要依据。数据库的设计能够影响可视化实现的正确性。
二、三维地质建模的实现方法
地质三维建模以插值拟合地层层面为重要的建模过程,所以插值算法在建模过程中有着举足轻重的地位。钻孔数据是一组离散的点集,使用插值的方法可以拟合符合地层的曲面,选择合适的插值方法可以快速有效解决资料数据的不连续性从而实现地层的可视化。
根据实地钻探获取的钻孔数据,调用OpenGL方法,完成长坪矿地质三维模型的构建。矿山建模对于地层模型的效果及功能需求包括模型显示(真实地质效果、光照、纹理)、交互操作(旋转、缩放、视点)、模型变换等。此次毕业设计目的成果:通过ADO.NET的方式读取数据库中的钻孔数据,将三维建模显示用的数据存储在C#的List中,再根据List中的数据,绘制出煤矿的边界,钻孔的开孔位置以及构建出主要的地质体三维模型,并能够通过键盘交互。
三、主要模型的构建
构建地质模型主要包括地层建模、钻孔建模以及陷落柱建模。而地层建模中标志层的选择需根据不同的研究需求加以区分,本次建模的标志层选择k1-k10含水层以及M3煤层为建模的层面,同钻孔、井田边界线模型共同显示,最后通过键盘实现退出、放大、缩小、顺时针旋转、逆时针旋转等人机交互操作。
地层是指某一地质年代因沉积作用以及岩浆喷出活动形成的地层总称。地层模型选择K1-K10的标志层数据建立三维可视化模型,每一个标志层赋予不同的颜色加以区分,并实现视角旋转效果。
钻孔又称钻井,是从地表开始利用专业的钻探设备向地下钻成的深度较大直径较小的柱状圆孔。通过钻孔勘探得到的钻孔数据是后期地下地层形成状态和构造关系研究的数据来源,钻孔模型依据实地勘探的钻孔数据构建三维模型,实现三维柱状模型,并实现模型显示、视角变换和人机交互的功能。
四、程序实现
(一)数据处理与坐标轴转换
在数据库中存储的位置信息是基于世界坐标系。屏幕上显示的图形都是二维坐标里图形,而真实地质体却是三维模型所以世界坐标是三维坐标,在计算机处理图形数据时,必然要把三维数据转换到二维坐标系下。如果要想将其显示到设备屏幕上,需要进行坐标变换。进行坐标变换之前,首先要能从数据库中读取到整个煤矿的X最大值及最小值,Y最大值和最小值,分别向减就可以得到煤矿的长度和宽度。每个点相对坐标等于每个点的坐标值减去X和Y的最小值。再求出屏幕的长度和宽度。
(二)绘制钻孔
1.绘制钻孔界限。通过与数据库连接,调用Geography数据库中的拐点坐标表格,把拐点坐标表格中的每条记录当做一个对象,把该记录的某些字段与InflectionPoint类中的属性进行绑定,遍历每一条记录,然后将其加入到borderPoints列表中,即可把所有边界点信息都存储起来。
2.绘制离散点。调用的钻孔数据在屏幕坐标系上是离散的坐标点,建立钻孔的地层层面编号,得到各地层层面的采样点,为插值拟合地层层面做准备,然后采用反距离权重插值算法对各地层层面进行曲面拟合。
(三)绘制并渲染地层
把钻孔数据的离散点通过反距离插值的方法获得格网点的高程值,然后通过绘制不规则三角网拟合地层层面。对拟合过的三角网可见面添加自然光照效果,可以实现场景的真实显示。基本光照模型中的发光体一般限于点光源。基于单个点的光强度的计算模型称为光照模型。基本光照模型包括环境光、漫反射、镜面反射,表面光照效果包括光的反射、透射性、表面纹理和阴影。
图1 三维地质模型
五、结论
三维地质建模项目终于实现了坐标轴、地层层面(K1-K10标志层)建模、钻孔建模以及钻孔边界线建模。虽然实现了Geology数据库所存储的两种模型的构建,但是陷落柱模型与巷道模型构建却没有实现。陷落柱建模与地层建模大体是相似的,只是少了网格的拟合,而是通过不规则三角网直接形成模型,构建三角网的有许多常用插值方法,包括样条插值、二次插值以及Delaunay插值。