开源引擎在煤矿三维可视化中的应用研究
2018-09-10董前林蒋样明刘赟蔡将军李卫东
董前林 蒋样明 刘赟 蔡将军 李卫东
摘 要:笔者选择OGRE 3D作为数字煤矿三维可视化渲染引擎,提出了基于OGRE 3D的煤层三维建模流程方法和煤层精细纹理的制作方法。其中,煤层模型构建的流程是:对于煤层,首先根据煤层底板等值线、断层、陷落柱和边界数据,采用基于线状信息源的分区综合插值法得到煤层底板的GRID文件,再加上煤厚数据,分块生成包含煤层体6个面的XML文件(每个XML文件存储的都是不规则三角网数据),然后生成可供OGRE 3D使用的包含层次细节信息的Mesh模型,最终通过OGRE 3D渲染生成模拟煤层。
关键词:数字煤矿;三维渲染引擎OGRE 3D;Mesh模型;不规则三角网
中图分类号:P208文献标识码:A文章编号:1003-5168(2018)26-0079-03
1 研究背景
煤矿的三维可视化系统是指采用计算机软件和相应的硬件设备,根据煤矿的实际地层数据、煤层数据、巷道数据、钻孔数据和地表工业广场数据模拟煤矿的实际生产的三维空间[1]。在煤矿的三维可视化系统中,用户可以身临其境煤矿设计、开采等过程,并能对相应的过程进行重现或跟踪。因此,构建煤矿三维可视化系统对实现煤矿的现代化管理、安全高效生产及提高整个行业的科技发展水平具有非常重要的意义。
开源三维引擎的优点是可以充分利用成熟的游戏级的三维渲染引擎类,减少引擎开发的时间,从而把主要精力用于数字煤矿三维模型的构建。开源三维引擎的种类繁多。常见的3D引擎有:Unreal、LithTech、OGRE等,其中开源免费的有:Fly3D、G3D、OGRE 3D等。OGRE 3D是全面支持跨平台的最主要的开源三维渲染引擎之一,能方便地插入到已有的应用程序框架中。OGRE 3D在免费、开源的引擎中评价最高:第一,其图形渲染质量较好;第二,其设计模式较为清晰;第三,其速度也不错。鉴于OGRE 3D具有上述优点,本文采用OGRE 3D作为煤矿三维开发引擎。
2 煤层三维建模流程
2.1 原始数据介绍
试验煤矿采煤层的基础数据分为5号、9号、15号三种。本文以5号煤层为例,介绍煤层模型的构建。煤层的数据范围是64km2,X:654 300~662 300m,Y:3 947 500~3 955 500m。基础数据包括:5号煤层(以下简称为“5”或“5煤”)底板等值线、5m煤厚等值线、5m陷落柱、5m断层等。这些数据都是以tab格式存储的。由于煤层的数据量较大,为了便于对煤层数据进行分析、处理和管理,本文将原始数据按500m×500m单元格网分为(16×16)块。
2.2 生成煤层GRID文件
本文中,GRID文件主要是根据煤层顶板、底板等值线运用线状信息源分区综合插值法[2]生成。所谓分区综合插值法,是根据线条包围区的不同情况,采用不同的方法进行插值推断。该方法可以充分利用煤矿实际生产中积累的大量地质资料,绘制精细的、准确度高的地质曲面图形。线状信息源分区综合插值法根据某地层的等值线、断层线、边界线等线状信息,将整个图形转换区划分成若干个小区,使整个图形转换区都划分为由边界线、断层线、等值线、陷落柱包围的若干局部区域,充分利用了这些信息,可以得到较精细的地层曲面图形[3]。本文采用综合插值法对5m底板、5m煤厚、5m陷落柱和5m断层数据进行插值,得到5m底板GRID文件(5m_2.grd)和3m厚度GRID文件(5mh_2.grd)。
2.3 生成煤层XML文件
生成煤层XML文件的过程是:采用已有的算法把2.2节中生成的GRID文件转化成不规则的三角形,然后按照规定的XML文件格式进行存储,分为下面两个主要的步骤。
2.3.1 读入GRID和DAT文件。Surfer的GS ASCⅡ[.GRD]文件的記录格式如下:
第一行为大写的DSAA,是ASCⅡ格网文件的标志;
第二行为两个整形数,分别表示格网数据的列数和行数;
第三行为两个浮点数,分别表示格网区中像素X坐标的最小值和最大值;
第四行为两个浮点数,分别表示格网区中像素Y坐标的最小值和最大值;
第五行为两个浮点数,分别表示格网区中像素Z值的最小值和最大值;
从第六行开始是以浮点数存储的数据。假设格网区分为M行N列,依次存放的是第M行第一列的数据、第M行第二列的数据……,直到第M行的第N列数据。然后另起一行存储第M-1行的数据,格式同前,依次类推直到第一行第N列数据。
Surfer还有一种常用的ASCⅡ XYZ格式的[.DAT]文件,该文件在A列中为X坐标,B列中为Y坐标和在C列中为Z值。
本文三维建模采用的数据包括3煤2m分辨率的底板GRID文件(5m_2.grd)、5煤底板边界的DAT文件(5mdbbj.dat)。根据GRID、DAT文件的不同格式分别读入5m_2.grd,5mh_2.grd,5mdbbj.dat。
2.3.2 生成不规则三角形并存储。煤层顶板的高度等于煤层底板的高度加上煤层的厚度。由于数据量较大,把已分块的煤层在Y方向(左下角为坐标原点,向右为X轴正方向,向上为Y轴正方向)上分为2段。煤层底板存在陷落柱,对陷落柱(空白值)的点确定一个假定的Z值:第一点为空白点时,从右边最靠近的非空白点取值;最后点为空白点时,从左边最靠近的非空白点取值;中间点为空白点时,从左右两边各取最靠近的非空白点后加权取值。根据2.3.1部分读入的数据按照由后向前、由左至右,上下层分别逐点组合生成三角面。每一点只考虑右上象限,只考虑4点都可用的情况。假定上下层可用点相同。对于生成的三角面片需要计算其法线,而顶点法线采用各有关三角面法线相加后再正规化的算法进行计算。
XML文件存储的信息包括:煤层Mesh模型材质的名称,不规则三角形的顶点信息以及每个不规则三角形顶点的坐标、法线和纹理坐标。通过执行编译后程序GRD-Mesh_A.exe,生成XML文件。
2.4 生成煤层模型
通过OgreXMLConverter程序可以把2.3中生成的XML文件转换为Mesh模型。该程序是一个对调试网格数据内容或者进行简单网格数据交换非常有用的工具,其可以将二进制在.Mesh、.Skeleton文件与XML文件之间进行转换。OgreXMLConverter可以很容易地把XML文件转换成二进制文件。同时,其还可以为网格数据的生成附加信息,如边界区域(bounding region)和层次细节信息(level-of-detail)。层次细节是指对于同一个场景中的对象,可以通过不同的细节描述来得到不同层次的模型。在实际渲染中,是根据被渲染的实体与观察点(摄像机)的距离来选择不同细节。一般情况下,与观察点距离较远时,具有更广的视觉空间,看到的实体比较多,但实体纹理比较模糊;相反,看到的实体较多,但实体的纹理较清晰。所以,为了节约计算机资源,提高渲染效率,距离较远的实体,渲染较少的纹理细节。这可以通过设定实体与观察点的距离阈值来实现。根据不同的阈值设置不同纹理细节。
3 煤层三维可视化
3.1 ORGE 3D渲染的关键技术
ORGE 3D渲染的关键技术主要有以下几方面。①场景管理器。OGRE 3D是通过场景管理器来创建和操作场景中的对象、灯光、摄影机和实体等。在通过场景管理器操纵整个场景之前,要建立一个场景管理器的实例,然后至少还要构建一个摄像机,并执行“放置一个实体到场景中”的操作。②场景管理器。摄像机的概念和真实世界中的一样,为场景进行“拍摄”每一帧的工作。摄像机既可以挂在场景节点上,也可以直接放到空间中。③灯光。灯光都会被绑定到某些场景节点上,用来产生特殊的效果,可以认为任何能够照亮场景的东西都是灯光。在场景中,灯光拥有其类型、位置及强度的属性。④天空面。天空面就是一个用来模拟现实世界中天空的一个平面。通常而言,其只是一个平面;不过如果需要,也可以把它当成“弯曲的”平面。当天空面弯曲时,类似穹顶所产生的效果,不过仍需要运用一些云雾的效果来掩饰其中的不足。
3.2 煤层三维模型的渲染
场景节点是在场景中实际移动变换的基本单元,其有自己的关联层次(可以有父节点或者子节点)。节点的操作支持三种不同的坐标系空间,即世界坐标空间、父节点空间和自身空间。在进行移动、缩放、旋转时,可以自由选择使用的坐标空间。场景节点将持续跟踪与其关联的实体的方位。当创建了一个实体以后,其直到与一个场景节点关联后才会被渲染。同样,一个场景节点也不能单独在屏幕上显示出来,只有与一个实体绑定后才能在屏幕上显示。本文是通过LoadCoalMesh函数实现煤矿三维模型的渲染,可以通过两种方式获取需要渲染的模型文件:①读取事先配置好的XML文件;②使用打开菜单选择渲染模型。文中规定为每个实体创建唯一的场景节点,并且场景节点和实体具有相同的名称。煤层三维模型的渲染结果如图1和图2所示。
4 煤矿三维空间查询
煤矿的三维空间查询包括以下两方面。①三维属性查询——由对象查询属性。OGRE 3D支持的Mesh模型,是一种网格模型,其无法存储对象的属性,即无法直接通过煤层或巷道的Mesh模型来获取煤层的厚度、巷道長度等信息,这需要进行额外处理。本文的实现方式是:把煤层和巷道的属性信息存放在Access数据库中,通过Mesh模型的名称来关联和查询所对应的属性信息。首先通过鼠标选择实体对象,然后通过对象的名称检索所在的数据库表,在数据库表中使用对象的名称,就可以查询到该对象的属性信息。②三维空间查询——由属性查询对象。三维空间查询即通过属性查询对象,并居中、高亮显示符合条件的对象。实现的基本原理是:首先,通过属性获取对象的名称(模型的名称),再获取对象对应的实体的名称,然后,获取该实体绑定的场景节点,通过场景节点的_getWorldAABB()方法获取场景节点的位置A,最后把摄像机移动到与该位置具有一定距离的位置B,并让摄像机朝向位置A。
5 结论
本文基于开源引擎对煤矿三维可视化进行研究。对于煤层数据,首先根据煤层底板等值线、断层、陷落柱和边界数据,采用基于线状信息源的分区综合插值法得到煤层底板的GRID文件,再加上煤厚数据,分块生成包含煤层体6个面的不规则三角网的XML文件,然后生成可供OGRE 3D使用的包含层次细节信息的Mesh模型,最终得到了较好的煤矿三维显示效果。在实现煤矿三维显示的同时,还实现了煤矿数据的三维空间和属性查询。
参考文献:
[1]韩瑞栋.煤矿三维可视化系统关键技术研究与实现[D].青岛:山东科技大学,2007.
[2]Sirayanone S. Comparative Studies of Kriging, Multiquadric-biharmonic, and other Methods for Solving mineral Resource Problems [D].Ames:Lowa State University,1988.
[3]曾坤.数字矿山插值方法研究[D].北京:中国矿业大学(北京),2007.