董前林 蔣樣明 劉赟 蔡將軍 李衛(wèi)東
摘 要:筆者選擇OGRE 3D作為數(shù)字煤礦三維可視化渲染引擎,提出了基于OGRE 3D的煤層三維建模流程方法和煤層精細(xì)紋理的制作方法。其中,煤層模型構(gòu)建的流程是:對(duì)于煤層,首先根據(jù)煤層底板等值線(xiàn)、斷層、陷落柱和邊界數(shù)據(jù),采用基于線(xiàn)狀信息源的分區(qū)綜合插值法得到煤層底板的GRID文件,再加上煤厚數(shù)據(jù),分塊生成包含煤層體6個(gè)面的XML文件(每個(gè)XML文件存儲(chǔ)的都是不規(guī)則三角網(wǎng)數(shù)據(jù)),然后生成可供OGRE 3D使用的包含層次細(xì)節(jié)信息的Mesh模型,最終通過(guò)OGRE 3D渲染生成模擬煤層。
關(guān)鍵詞:數(shù)字煤礦;三維渲染引擎OGRE 3D;Mesh模型;不規(guī)則三角網(wǎng)
中圖分類(lèi)號(hào):P208文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1003-5168(2018)26-0079-03
1 研究背景
煤礦的三維可視化系統(tǒng)是指采用計(jì)算機(jī)軟件和相應(yīng)的硬件設(shè)備,根據(jù)煤礦的實(shí)際地層數(shù)據(jù)、煤層數(shù)據(jù)、巷道數(shù)據(jù)、鉆孔數(shù)據(jù)和地表工業(yè)廣場(chǎng)數(shù)據(jù)模擬煤礦的實(shí)際生產(chǎn)的三維空間[1]。在煤礦的三維可視化系統(tǒng)中,用戶(hù)可以身臨其境煤礦設(shè)計(jì)、開(kāi)采等過(guò)程,并能對(duì)相應(yīng)的過(guò)程進(jìn)行重現(xiàn)或跟蹤。因此,構(gòu)建煤礦三維可視化系統(tǒng)對(duì)實(shí)現(xiàn)煤礦的現(xiàn)代化管理、安全高效生產(chǎn)及提高整個(gè)行業(yè)的科技發(fā)展水平具有非常重要的意義。
開(kāi)源三維引擎的優(yōu)點(diǎn)是可以充分利用成熟的游戲級(jí)的三維渲染引擎類(lèi),減少引擎開(kāi)發(fā)的時(shí)間,從而把主要精力用于數(shù)字煤礦三維模型的構(gòu)建。開(kāi)源三維引擎的種類(lèi)繁多。常見(jiàn)的3D引擎有:Unreal、LithTech、OGRE等,其中開(kāi)源免費(fèi)的有:Fly3D、G3D、OGRE 3D等。OGRE 3D是全面支持跨平臺(tái)的最主要的開(kāi)源三維渲染引擎之一,能方便地插入到已有的應(yīng)用程序框架中。OGRE 3D在免費(fèi)、開(kāi)源的引擎中評(píng)價(jià)最高:第一,其圖形渲染質(zhì)量較好;第二,其設(shè)計(jì)模式較為清晰;第三,其速度也不錯(cuò)。鑒于OGRE 3D具有上述優(yōu)點(diǎn),本文采用OGRE 3D作為煤礦三維開(kāi)發(fā)引擎。
2 煤層三維建模流程
2.1 原始數(shù)據(jù)介紹
試驗(yàn)煤礦采煤層的基礎(chǔ)數(shù)據(jù)分為5號(hào)、9號(hào)、15號(hào)三種。本文以5號(hào)煤層為例,介紹煤層模型的構(gòu)建。煤層的數(shù)據(jù)范圍是64km2,X:654 300~662 300m,Y:3 947 500~3 955 500m?;A(chǔ)數(shù)據(jù)包括:5號(hào)煤層(以下簡(jiǎn)稱(chēng)為“5”或“5煤”)底板等值線(xiàn)、5m煤厚等值線(xiàn)、5m陷落柱、5m斷層等。這些數(shù)據(jù)都是以tab格式存儲(chǔ)的。由于煤層的數(shù)據(jù)量較大,為了便于對(duì)煤層數(shù)據(jù)進(jìn)行分析、處理和管理,本文將原始數(shù)據(jù)按500m×500m單元格網(wǎng)分為(16×16)塊。
2.2 生成煤層GRID文件
本文中,GRID文件主要是根據(jù)煤層頂板、底板等值線(xiàn)運(yùn)用線(xiàn)狀信息源分區(qū)綜合插值法[2]生成。所謂分區(qū)綜合插值法,是根據(jù)線(xiàn)條包圍區(qū)的不同情況,采用不同的方法進(jìn)行插值推斷。該方法可以充分利用煤礦實(shí)際生產(chǎn)中積累的大量地質(zhì)資料,繪制精細(xì)的、準(zhǔn)確度高的地質(zhì)曲面圖形。線(xiàn)狀信息源分區(qū)綜合插值法根據(jù)某地層的等值線(xiàn)、斷層線(xiàn)、邊界線(xiàn)等線(xiàn)狀信息,將整個(gè)圖形轉(zhuǎn)換區(qū)劃分成若干個(gè)小區(qū),使整個(gè)圖形轉(zhuǎn)換區(qū)都劃分為由邊界線(xiàn)、斷層線(xiàn)、等值線(xiàn)、陷落柱包圍的若干局部區(qū)域,充分利用了這些信息,可以得到較精細(xì)的地層曲面圖形[3]。本文采用綜合插值法對(duì)5m底板、5m煤厚、5m陷落柱和5m斷層數(shù)據(jù)進(jìn)行插值,得到5m底板GRID文件(5m_2.grd)和3m厚度GRID文件(5mh_2.grd)。
2.3 生成煤層X(jué)ML文件
生成煤層X(jué)ML文件的過(guò)程是:采用已有的算法把2.2節(jié)中生成的GRID文件轉(zhuǎn)化成不規(guī)則的三角形,然后按照規(guī)定的XML文件格式進(jìn)行存儲(chǔ),分為下面兩個(gè)主要的步驟。
2.3.1 讀入GRID和DAT文件。Surfer的GS ASCⅡ[.GRD]文件的記錄格式如下:
第一行為大寫(xiě)的DSAA,是ASCⅡ格網(wǎng)文件的標(biāo)志;
第二行為兩個(gè)整形數(shù),分別表示格網(wǎng)數(shù)據(jù)的列數(shù)和行數(shù);
第三行為兩個(gè)浮點(diǎn)數(shù),分別表示格網(wǎng)區(qū)中像素X坐標(biāo)的最小值和最大值;
第四行為兩個(gè)浮點(diǎn)數(shù),分別表示格網(wǎng)區(qū)中像素Y坐標(biāo)的最小值和最大值;
第五行為兩個(gè)浮點(diǎn)數(shù),分別表示格網(wǎng)區(qū)中像素Z值的最小值和最大值;
從第六行開(kāi)始是以浮點(diǎn)數(shù)存儲(chǔ)的數(shù)據(jù)。假設(shè)格網(wǎng)區(qū)分為M行N列,依次存放的是第M行第一列的數(shù)據(jù)、第M行第二列的數(shù)據(jù)……,直到第M行的第N列數(shù)據(jù)。然后另起一行存儲(chǔ)第M-1行的數(shù)據(jù),格式同前,依次類(lèi)推直到第一行第N列數(shù)據(jù)。
Surfer還有一種常用的ASCⅡ XYZ格式的[.DAT]文件,該文件在A列中為X坐標(biāo),B列中為Y坐標(biāo)和在C列中為Z值。
本文三維建模采用的數(shù)據(jù)包括3煤2m分辨率的底板GRID文件(5m_2.grd)、5煤底板邊界的DAT文件(5mdbbj.dat)。根據(jù)GRID、DAT文件的不同格式分別讀入5m_2.grd,5mh_2.grd,5mdbbj.dat。
2.3.2 生成不規(guī)則三角形并存儲(chǔ)。煤層頂板的高度等于煤層底板的高度加上煤層的厚度。由于數(shù)據(jù)量較大,把已分塊的煤層在Y方向(左下角為坐標(biāo)原點(diǎn),向右為X軸正方向,向上為Y軸正方向)上分為2段。煤層底板存在陷落柱,對(duì)陷落柱(空白值)的點(diǎn)確定一個(gè)假定的Z值:第一點(diǎn)為空白點(diǎn)時(shí),從右邊最靠近的非空白點(diǎn)取值;最后點(diǎn)為空白點(diǎn)時(shí),從左邊最靠近的非空白點(diǎn)取值;中間點(diǎn)為空白點(diǎn)時(shí),從左右兩邊各取最靠近的非空白點(diǎn)后加權(quán)取值。根據(jù)2.3.1部分讀入的數(shù)據(jù)按照由后向前、由左至右,上下層分別逐點(diǎn)組合生成三角面。每一點(diǎn)只考慮右上象限,只考慮4點(diǎn)都可用的情況。假定上下層可用點(diǎn)相同。對(duì)于生成的三角面片需要計(jì)算其法線(xiàn),而頂點(diǎn)法線(xiàn)采用各有關(guān)三角面法線(xiàn)相加后再正規(guī)化的算法進(jìn)行計(jì)算。
XML文件存儲(chǔ)的信息包括:煤層Mesh模型材質(zhì)的名稱(chēng),不規(guī)則三角形的頂點(diǎn)信息以及每個(gè)不規(guī)則三角形頂點(diǎn)的坐標(biāo)、法線(xiàn)和紋理坐標(biāo)。通過(guò)執(zhí)行編譯后程序GRD-Mesh_A.exe,生成XML文件。
2.4 生成煤層模型
通過(guò)OgreXMLConverter程序可以把2.3中生成的XML文件轉(zhuǎn)換為Mesh模型。該程序是一個(gè)對(duì)調(diào)試網(wǎng)格數(shù)據(jù)內(nèi)容或者進(jìn)行簡(jiǎn)單網(wǎng)格數(shù)據(jù)交換非常有用的工具,其可以將二進(jìn)制在.Mesh、.Skeleton文件與XML文件之間進(jìn)行轉(zhuǎn)換。OgreXMLConverter可以很容易地把XML文件轉(zhuǎn)換成二進(jìn)制文件。同時(shí),其還可以為網(wǎng)格數(shù)據(jù)的生成附加信息,如邊界區(qū)域(bounding region)和層次細(xì)節(jié)信息(level-of-detail)。層次細(xì)節(jié)是指對(duì)于同一個(gè)場(chǎng)景中的對(duì)象,可以通過(guò)不同的細(xì)節(jié)描述來(lái)得到不同層次的模型。在實(shí)際渲染中,是根據(jù)被渲染的實(shí)體與觀察點(diǎn)(攝像機(jī))的距離來(lái)選擇不同細(xì)節(jié)。一般情況下,與觀察點(diǎn)距離較遠(yuǎn)時(shí),具有更廣的視覺(jué)空間,看到的實(shí)體比較多,但實(shí)體紋理比較模糊;相反,看到的實(shí)體較多,但實(shí)體的紋理較清晰。所以,為了節(jié)約計(jì)算機(jī)資源,提高渲染效率,距離較遠(yuǎn)的實(shí)體,渲染較少的紋理細(xì)節(jié)。這可以通過(guò)設(shè)定實(shí)體與觀察點(diǎn)的距離閾值來(lái)實(shí)現(xiàn)。根據(jù)不同的閾值設(shè)置不同紋理細(xì)節(jié)。
3 煤層三維可視化
3.1 ORGE 3D渲染的關(guān)鍵技術(shù)
ORGE 3D渲染的關(guān)鍵技術(shù)主要有以下幾方面。①場(chǎng)景管理器。OGRE 3D是通過(guò)場(chǎng)景管理器來(lái)創(chuàng)建和操作場(chǎng)景中的對(duì)象、燈光、攝影機(jī)和實(shí)體等。在通過(guò)場(chǎng)景管理器操縱整個(gè)場(chǎng)景之前,要建立一個(gè)場(chǎng)景管理器的實(shí)例,然后至少還要構(gòu)建一個(gè)攝像機(jī),并執(zhí)行“放置一個(gè)實(shí)體到場(chǎng)景中”的操作。②場(chǎng)景管理器。攝像機(jī)的概念和真實(shí)世界中的一樣,為場(chǎng)景進(jìn)行“拍攝”每一幀的工作。攝像機(jī)既可以?huà)煸趫?chǎng)景節(jié)點(diǎn)上,也可以直接放到空間中。③燈光。燈光都會(huì)被綁定到某些場(chǎng)景節(jié)點(diǎn)上,用來(lái)產(chǎn)生特殊的效果,可以認(rèn)為任何能夠照亮場(chǎng)景的東西都是燈光。在場(chǎng)景中,燈光擁有其類(lèi)型、位置及強(qiáng)度的屬性。④天空面。天空面就是一個(gè)用來(lái)模擬現(xiàn)實(shí)世界中天空的一個(gè)平面。通常而言,其只是一個(gè)平面;不過(guò)如果需要,也可以把它當(dāng)成“彎曲的”平面。當(dāng)天空面彎曲時(shí),類(lèi)似穹頂所產(chǎn)生的效果,不過(guò)仍需要運(yùn)用一些云霧的效果來(lái)掩飾其中的不足。
3.2 煤層三維模型的渲染
場(chǎng)景節(jié)點(diǎn)是在場(chǎng)景中實(shí)際移動(dòng)變換的基本單元,其有自己的關(guān)聯(lián)層次(可以有父節(jié)點(diǎn)或者子節(jié)點(diǎn))。節(jié)點(diǎn)的操作支持三種不同的坐標(biāo)系空間,即世界坐標(biāo)空間、父節(jié)點(diǎn)空間和自身空間。在進(jìn)行移動(dòng)、縮放、旋轉(zhuǎn)時(shí),可以自由選擇使用的坐標(biāo)空間。場(chǎng)景節(jié)點(diǎn)將持續(xù)跟蹤與其關(guān)聯(lián)的實(shí)體的方位。當(dāng)創(chuàng)建了一個(gè)實(shí)體以后,其直到與一個(gè)場(chǎng)景節(jié)點(diǎn)關(guān)聯(lián)后才會(huì)被渲染。同樣,一個(gè)場(chǎng)景節(jié)點(diǎn)也不能單獨(dú)在屏幕上顯示出來(lái),只有與一個(gè)實(shí)體綁定后才能在屏幕上顯示。本文是通過(guò)LoadCoalMesh函數(shù)實(shí)現(xiàn)煤礦三維模型的渲染,可以通過(guò)兩種方式獲取需要渲染的模型文件:①讀取事先配置好的XML文件;②使用打開(kāi)菜單選擇渲染模型。文中規(guī)定為每個(gè)實(shí)體創(chuàng)建唯一的場(chǎng)景節(jié)點(diǎn),并且場(chǎng)景節(jié)點(diǎn)和實(shí)體具有相同的名稱(chēng)。煤層三維模型的渲染結(jié)果如圖1和圖2所示。
4 煤礦三維空間查詢(xún)
煤礦的三維空間查詢(xún)包括以下兩方面。①三維屬性查詢(xún)——由對(duì)象查詢(xún)屬性。OGRE 3D支持的Mesh模型,是一種網(wǎng)格模型,其無(wú)法存儲(chǔ)對(duì)象的屬性,即無(wú)法直接通過(guò)煤層或巷道的Mesh模型來(lái)獲取煤層的厚度、巷道長(zhǎng)度等信息,這需要進(jìn)行額外處理。本文的實(shí)現(xiàn)方式是:把煤層和巷道的屬性信息存放在Access數(shù)據(jù)庫(kù)中,通過(guò)Mesh模型的名稱(chēng)來(lái)關(guān)聯(lián)和查詢(xún)所對(duì)應(yīng)的屬性信息。首先通過(guò)鼠標(biāo)選擇實(shí)體對(duì)象,然后通過(guò)對(duì)象的名稱(chēng)檢索所在的數(shù)據(jù)庫(kù)表,在數(shù)據(jù)庫(kù)表中使用對(duì)象的名稱(chēng),就可以查詢(xún)到該對(duì)象的屬性信息。②三維空間查詢(xún)——由屬性查詢(xún)對(duì)象。三維空間查詢(xún)即通過(guò)屬性查詢(xún)對(duì)象,并居中、高亮顯示符合條件的對(duì)象。實(shí)現(xiàn)的基本原理是:首先,通過(guò)屬性獲取對(duì)象的名稱(chēng)(模型的名稱(chēng)),再獲取對(duì)象對(duì)應(yīng)的實(shí)體的名稱(chēng),然后,獲取該實(shí)體綁定的場(chǎng)景節(jié)點(diǎn),通過(guò)場(chǎng)景節(jié)點(diǎn)的_getWorldAABB()方法獲取場(chǎng)景節(jié)點(diǎn)的位置A,最后把攝像機(jī)移動(dòng)到與該位置具有一定距離的位置B,并讓攝像機(jī)朝向位置A。
5 結(jié)論
本文基于開(kāi)源引擎對(duì)煤礦三維可視化進(jìn)行研究。對(duì)于煤層數(shù)據(jù),首先根據(jù)煤層底板等值線(xiàn)、斷層、陷落柱和邊界數(shù)據(jù),采用基于線(xiàn)狀信息源的分區(qū)綜合插值法得到煤層底板的GRID文件,再加上煤厚數(shù)據(jù),分塊生成包含煤層體6個(gè)面的不規(guī)則三角網(wǎng)的XML文件,然后生成可供OGRE 3D使用的包含層次細(xì)節(jié)信息的Mesh模型,最終得到了較好的煤礦三維顯示效果。在實(shí)現(xiàn)煤礦三維顯示的同時(shí),還實(shí)現(xiàn)了煤礦數(shù)據(jù)的三維空間和屬性查詢(xún)。
參考文獻(xiàn):
[1]韓瑞棟.煤礦三維可視化系統(tǒng)關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[D].青島:山東科技大學(xué),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]曾坤.數(shù)字礦山插值方法研究[D].北京:中國(guó)礦業(yè)大學(xué)(北京),2007.