蔣冬梅, 彭成東
(1.安徽水利水電職業(yè)技術(shù)學(xué)院,安徽 合肥 231603;2.合肥明信軟件技術(shù)有限公司,安徽 合肥 230088)
將分布在不同地層、地質(zhì)環(huán)境的井下工程空間數(shù)據(jù)和井下環(huán)境監(jiān)控?cái)?shù)據(jù)融合在三維可視化系統(tǒng)中,通過(guò)逼真的場(chǎng)景渲染和直觀(guān)的數(shù)據(jù)展現(xiàn),對(duì)煤礦安全生產(chǎn)管理有重要的意義。
本文基于明信軟件MX-EMine三維可視化引擎,研究了對(duì)煤礦井下巷道的自動(dòng)建模算法,并使用示例數(shù)據(jù)進(jìn)行仿真,三維場(chǎng)景和虛擬漫游用戶(hù)體驗(yàn)好。
明信軟件MX-EMine三維可視化引擎具備場(chǎng)景物體的坐標(biāo)變換和投影變換處理、消除遮蓋處理、光源明暗度處理、顏色與紋理的表面細(xì)節(jié)等渲染處理。
構(gòu)建煤礦井下三維可視化環(huán)境,只需要使用適當(dāng)?shù)臄?shù)學(xué)模型和建模算法對(duì)井下巷道和巷道中的物體進(jìn)行對(duì)象建模,把對(duì)象變成MX-EMine可以加載的數(shù)據(jù),由引擎實(shí)現(xiàn)對(duì)象的渲染和虛擬現(xiàn)實(shí)呈現(xiàn)。
巷道由一系列的局部巷道組成。由巷道中心線(xiàn)和巷道斷面來(lái)表示局部巷道,其中巷道中心線(xiàn)確定巷道位置,斷面確定巷道的空間形態(tài),利用相鄰巷道的斷面對(duì)應(yīng)點(diǎn)、線(xiàn)、面的相連構(gòu)成三維模型[1]。巷道的建模的主要過(guò)程包括:巷道導(dǎo)線(xiàn)節(jié)點(diǎn)的網(wǎng)絡(luò)拓?fù)潢P(guān)系處理、巷道斷面加載及交叉處平滑、紋理處理。
(1) 巷道元素。主要有① 節(jié)點(diǎn)。節(jié)點(diǎn)表示同一水平巷道的交叉處,也表示水平巷道與上下山巷道的交叉處。② 弧段。在巷道網(wǎng)絡(luò)中2節(jié)點(diǎn)之間鏈接的部分是弧段。③ 巷道線(xiàn)。每1條巷道都稱(chēng)之為巷道線(xiàn)。其基本組成元素是巷道弧段。一般來(lái)說(shuō),它代表著1條完整的巷道。
(2) 巷道元素的拓?fù)潢P(guān)系。如圖1所示,巷道節(jié)點(diǎn)采用英文字母A、B、C、D表示,弧度采用數(shù)字1、2、3、4表示,采用希臘字母Ⅰ、Ⅱ、Ⅲ表示3條巷道。巷道的空間關(guān)系構(gòu)成包括巷道線(xiàn)、節(jié)點(diǎn),它們之間的拓?fù)潢P(guān)系就是巷道網(wǎng)絡(luò)的拓?fù)潢P(guān)系。
圖1 巷道元素及拓?fù)潢P(guān)系
(3)巷道中線(xiàn)計(jì)算方法。對(duì)井下巷道位置進(jìn)行測(cè)量時(shí),每個(gè)測(cè)點(diǎn)都有距離巷道兩邦的邦左距離sL、邦右距離sR、測(cè)點(diǎn)坐標(biāo)A(Xa,Ya,Za)、后視測(cè)點(diǎn)的方位角為α。通過(guò)中心線(xiàn)的逼近方法[2],可以逼近出巷道導(dǎo)線(xiàn)上的中心點(diǎn)坐標(biāo)C(Xc,Yc,Zc)。 連接巷道中線(xiàn)點(diǎn)坐標(biāo)即可形成巷道中線(xiàn)。
(4) 巷道斷面計(jì)算方法。井下巷道的斷面形狀有矩形、拱形和梯形[3]。以拱形巷道為例,巷道斷面算法描述如下:由已知拱形巷道斷面參數(shù)拱半徑r、寬度s、高度h可以計(jì)算出坐標(biāo)原點(diǎn)處的斷面數(shù)據(jù)如圖2(a)所示。通過(guò)巷道斷面的方位角a將圖2(a)的旋轉(zhuǎn)到圖2(b),再將圖2(b)巷道平移到實(shí)際位置如圖2 (c)所示。圖中P1和P2所在的斷面就是巷道的真實(shí)斷面。通過(guò)將巷道2個(gè)節(jié)點(diǎn)處斷面相應(yīng)的計(jì)算點(diǎn)相互連接起來(lái)就形成巷道表面模型。
圖2 拱形巷道斷面數(shù)據(jù)的計(jì)算
(1) 建模算法步驟。在巷道導(dǎo)線(xiàn)網(wǎng)絡(luò)拓?fù)潢P(guān)系和巷道斷面類(lèi)型、節(jié)點(diǎn)坐標(biāo)已知的情況下,巷道模型生成算法如下:
第1步在巷道導(dǎo)線(xiàn)結(jié)點(diǎn)處計(jì)算底面和頂面坐標(biāo),得出結(jié)點(diǎn)處斷面。對(duì)于交叉節(jié)點(diǎn)使用插入法插入斷面進(jìn)行平滑處理;第2步從巷道起始點(diǎn)開(kāi)始,以此斷面上坐標(biāo)向下一節(jié)點(diǎn)做平行線(xiàn),與下一結(jié)點(diǎn)斷面求得交點(diǎn);依次類(lèi)推,再向巷道導(dǎo)線(xiàn)中的下一節(jié)點(diǎn)做平行線(xiàn)和求交點(diǎn)。直至與導(dǎo)線(xiàn)中最后一個(gè)節(jié)點(diǎn)斷面求交。第3步將所有斷面上的交點(diǎn)坐標(biāo)依次連接形成巷道外立面的多個(gè)四邊形。將所有節(jié)點(diǎn)的斷面交點(diǎn)坐標(biāo)進(jìn)行數(shù)據(jù)存儲(chǔ)。通過(guò)以上3步實(shí)現(xiàn)巷道斷面坐標(biāo)計(jì)算和3D立體建模。
(2) 算法時(shí)間復(fù)雜度。假定巷道導(dǎo)線(xiàn)中結(jié)點(diǎn)的數(shù)量是 n,斷面輪廓線(xiàn)條數(shù)為m,任意相鄰的3個(gè)巷道中點(diǎn)都不在1條直線(xiàn)上,該算法的時(shí)間復(fù)雜度為:T(n)=O(n)+O(m)+O(n*m)=O(n*m)。
使用MX-EMine三維圖形渲染工具對(duì)上述算法構(gòu)建的巷道模型進(jìn)行渲染。如圖3所示。
圖3 巷道模型數(shù)據(jù)加載及渲染流程
流程中的關(guān)鍵點(diǎn)說(shuō)明如下:
(1) LoadContent()方法。使用素材管道加載計(jì)算好的巷道節(jié)點(diǎn)、斷面模型,并獲取模型面片和初始變換矩陣。
(2) Run()方法。開(kāi)始引擎的循環(huán),反復(fù)調(diào)用 Update()和 Draw()方法完成巷道模型的渲染和更新。
(3) Update()方法。讀取巷道模型計(jì)算結(jié)果數(shù)據(jù),對(duì)巷道模型中的節(jié)點(diǎn)和斷面對(duì)象進(jìn)行更新;通過(guò)子線(xiàn)程實(shí)現(xiàn)對(duì)設(shè)備對(duì)象實(shí)時(shí)數(shù)據(jù)的異步更新,以在場(chǎng)景中同步實(shí)時(shí)數(shù)據(jù)。
(4) Draw()方法。巷道斷面及場(chǎng)景中設(shè)備對(duì)象的3D渲染代碼實(shí)現(xiàn)。
以某礦1段交叉的3段巷道的部分測(cè)點(diǎn)數(shù)據(jù)為例,按照巷道節(jié)點(diǎn)法計(jì)算巷道中位線(xiàn)、加載巷道斷面、交叉點(diǎn)處理,形成巷道的空間模型。
巷道測(cè)點(diǎn)數(shù)據(jù)包括測(cè)量點(diǎn)位號(hào)、坐標(biāo)(X,Y,Z),及其幫距、高度、寬度、斷面、巖層屬性、支護(hù)方式(混凝土、錨網(wǎng)、錨噴、U型鋼棚等)屬性參數(shù)。3段巷道的測(cè)點(diǎn)坐標(biāo)數(shù)據(jù)如表1所列,導(dǎo)線(xiàn)拓?fù)潢P(guān)系如表2所列。
表1 巷道測(cè)點(diǎn)的坐標(biāo)數(shù)據(jù)
表2 巷道導(dǎo)線(xiàn)的測(cè)點(diǎn)數(shù)據(jù)
由每條巷道2相鄰節(jié)點(diǎn)構(gòu)造巷道導(dǎo)線(xiàn),由此可得到巷道的節(jié)點(diǎn)和導(dǎo)線(xiàn)網(wǎng)絡(luò)拓?fù)?如圖4所示。對(duì)U型斷面按左邦、右邦、頂面(8個(gè)插入點(diǎn)),依次鏈接形成巷道三維模型效果,如圖5所示。
圖4 巷道節(jié)點(diǎn)與導(dǎo)線(xiàn)空間關(guān)系
圖5 巷道斷面三維模型效果
(1) 巷道交叉處理。當(dāng)1個(gè)節(jié)點(diǎn)的度大于2時(shí),在生成巷道時(shí)已經(jīng)出現(xiàn)了面的交叉,需要進(jìn)行裁面或者補(bǔ)面才能夠保證巷道的完整性。遍歷每個(gè)節(jié)點(diǎn)的度,對(duì)于遍歷到的某個(gè)節(jié)點(diǎn)(后面稱(chēng)為基點(diǎn)),記錄所有與該基點(diǎn)相連接的邊的出點(diǎn),將記錄下來(lái)的點(diǎn)集合按照固定規(guī)則進(jìn)行排序形成1個(gè)新的點(diǎn)集合,依次取出點(diǎn)集合中的2個(gè)點(diǎn)并將其與基點(diǎn)構(gòu)成的邊所在平面進(jìn)行求相交處理,保存交點(diǎn)坐標(biāo),循環(huán)遍歷直到遍歷完點(diǎn)集合中的所有點(diǎn)。巷道交叉處理后的效果與井下實(shí)際環(huán)境就較為接近了,交叉處理后外部效果如圖6所示。
圖6 交叉處理后外部效果
(2)紋理貼圖處理。按支護(hù)方式(混凝土、錨網(wǎng)、錨噴、U型鋼棚等)對(duì)建模的巷道面進(jìn)行材質(zhì)加載,以是的生成巷道與實(shí)際環(huán)境一致,其紋理貼圖處理后內(nèi)部效果如圖7所示。
圖7 紋理貼圖處理后內(nèi)部效果
在系統(tǒng)中可以按照井下工作地點(diǎn)搜索定位到巷道的位置及巷道內(nèi)部情況,在3D場(chǎng)景下定位到巷道內(nèi)部,其2D效果如圖8所示。通過(guò)構(gòu)建的巷道虛擬場(chǎng)景,還可以渲染井下生產(chǎn)設(shè)備及采集設(shè)備的實(shí)時(shí)運(yùn)行數(shù)據(jù)的3D效果如圖9所示。
圖8 井下地點(diǎn)查詢(xún)定位
圖9 3D場(chǎng)景中加載生產(chǎn)設(shè)備數(shù)據(jù)
本文對(duì)井下巷道設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和算法建模,在3D引擎的基礎(chǔ)上實(shí)現(xiàn)巷道三維場(chǎng)景渲染,以虛擬現(xiàn)實(shí)的方式進(jìn)行效果呈現(xiàn),用戶(hù)體驗(yàn)逼真、數(shù)據(jù)展示直觀(guān)。