馬穎,劉文,趙汝程,尹燕芳
(山東科技大學(xué),濟南250000)
基于Direct3D巷道自動建模中的點處理
馬穎,劉文,趙汝程,尹燕芳
(山東科技大學(xué),濟南250000)
人工手動建立巷道模型工作量巨大。通過對CAD圖紙文件(.dxf)的信息進行分析和讀取,針對文件中龐大的點信息進行分析和處理,實現(xiàn)由簡單圖紙文件到復(fù)雜三維模型的自動生成,并且針對復(fù)雜度較高的巷道也有很好的建模表現(xiàn)。實驗表明對CAD圖紙文件中的點信息進行優(yōu)化處理,簡化復(fù)雜度較高的三維巷道的建模。
三維巷道;自動建模;數(shù)據(jù)處理;插值算法
隨著計算機技術(shù)的不斷發(fā)展及普及,信息化與數(shù)字化逐漸成為全球各行各業(yè)的發(fā)展趨勢,礦山巷道方面也不例外,礦山巷道的信息化與數(shù)字化在我國有很廣闊的應(yīng)用前景。在煤礦開采中巷道是煤礦高效、合理開發(fā)的重要保障,是構(gòu)建數(shù)字礦山的基礎(chǔ),而地下巷道錯綜復(fù)雜、縱橫交錯,怎樣才能夠多方位的、準(zhǔn)確的、甚至更為直觀、形象的表現(xiàn)井下巷道,是我們面臨的主要問題[1]。
目前,針對巷道建模自動化的程度總體上可以分為兩大類,一類是基于三維建模軟件的手動巷道建模方法,另一類是巷道自動建模方法。由于每個礦井的實際構(gòu)造不同,使用三維建模軟件構(gòu)建礦井不適宜推廣。而在巷道自動建模中,針對整體和局部而言,在局部上需要解決巷道的局部彎曲處理,增加巷道的逼真度,在整體上又需要解決大型巷道龐大的點信息。本文基于對煤礦安全培訓(xùn)系統(tǒng)的研究,編寫出根據(jù)具體巷道數(shù)據(jù)信息生成礦井巷道的具體模型的自動建模系統(tǒng)[2]。
Direct3D[3]是一款基于點信息繪制圖形的3D圖形API,繪制圖形時,Direct3D會讀取頂點緩沖區(qū)中的頂點信息和索引緩沖區(qū)的連接信息,從而將點連成線,線構(gòu)成面[4]。
實現(xiàn)Direct3D的巷道自動建模需要3D巷道中每一個點的坐標(biāo),從巷道參數(shù)文件或巷道圖紙文件中可以得到巷道的點信息和截面參數(shù)信息。
本文將論述如何完成點信息的轉(zhuǎn)化,使之能用于Direct3D建模。本文將從AutoCAD中的圖紙文件(.dxf文件)讀取初始點信息并保存,再通過DirectX 11自動建立巷道模型,最后生成3D軟件通用的.obj文件,從而完成了將巷道平面圖轉(zhuǎn)化為三維立體巷道模型的巷道自動建模(圖1)。
圖1 建模思路流程
2.1 巷道模型的建立方法
巷道斷面是垂直于巷道中心線的橫斷面,主要有矩形,梯形和拱形三種,其中,拱形巷道應(yīng)用廣泛,尤其是在工程項目中。拱形巷道建立的難點之一是兩相交直巷道的彎道彎曲處理,本文中將彎巷道和直巷道分開處理,彎曲處采用了貝塞爾曲線算法實現(xiàn)了彎曲處的光滑。
(1)直線巷道模型
對于巷道截面為拱形的直線巷道(圖2),它由一個半圓的弧和一個長方形的三條邊構(gòu)成,從提取的點信息中可以得到拱形底邊的中心坐標(biāo),截面的高H和半徑R,由此可以確定圖中每一點的坐標(biāo)。將兩個拱形的對應(yīng)點按照索引信息相連即可得到一段三維直線巷道模型,但是當(dāng)一個拐點為三岔口或更多岔口時,如果直接使用上述巷道模型作為直線巷道基本模型,在彎道平滑處理后,仍會出現(xiàn)曲面交叉,重疊的現(xiàn)象(圖3)。為避免上述現(xiàn)象發(fā)生,在基于拱形建造模型時,采用改進的半拱形作為基本圖形(圖4),連接得到的半拱形巷道作為巷道基本模型建立巷道。
使用半拱形巷道,每次只建造巷道的一半,當(dāng)所有點建立完畢,巷道兩側(cè)自動銜接成為立體巷道。對于每個半拱形,包括一個1/4圓弧和兩條線,為保證圓弧的光滑,須將圓弧劃分為等距離的點,并依次連線得到1/4的正多邊形以此表示圓弧,本文將半圓劃分為8段,整個拱形使用11個點表示。
半拱形巷道實現(xiàn)偽代碼
Vertices[11]//保存所有點信息
H //為巷道的矩形高
R //為巷道的半徑
Vertices[0]={0,0,0}
Vertices[1]={-R,0,0}
for i從2到11
x=-R*cos((i-2)*π/16)
y=H+R*sin((i-2)*π/16)
Vertices[i]={x,y,0}
end
(2)曲線巷道模型
貝塞爾曲線算法是依據(jù)四個任意位置的點,通過詳細的曲線參數(shù)方程,計算得到一條光滑曲線的算法。本文運用了貝塞爾曲線的二次方公式求解曲線巷道。
貝塞爾曲線的二次方公式:
本文使用了基于貝塞爾曲線算法的巷道建模方法來對巷道的曲線部分進行建模,貝塞爾曲線算法可根據(jù)四點坐標(biāo)自動實現(xiàn)對中間的點平滑過渡,在本文中,通過四個“半拱形”的點信息,可實現(xiàn)巷道彎曲部分的平滑過渡(圖5)。
為防止相鄰點所構(gòu)造的曲線巷道重疊,采用每個點僅延伸到相鄰點與中間點連線距離的一半,當(dāng)所有巷道構(gòu)造完成,巷道自動拼接完整,對于巷道端點,則直接連接。
若有3個點A,B,C都與點O向連(圖6),即點O為巷道的交叉點,利用半拱形巷道建模,分別建立巷道AOB,BOC,COA,三個巷道組合即得到了點O所延伸的拱形巷道。
2模型建立中的點處理
(1)點提取
首先我們從.dxf文件中提取到點的坐標(biāo)信息,并從截面參數(shù)文件中讀取到截面的高和寬。為保存這些數(shù)據(jù),建立結(jié)構(gòu)體Vexcet存儲點信息,因為點的數(shù)量不確定,采用指針依次存放點信息,結(jié)構(gòu)體中包括標(biāo)識點的關(guān)鍵字信息,點的坐標(biāo)數(shù)據(jù),其相連接的點數(shù)據(jù),與連接點之間的截面數(shù)據(jù)以及指向下一個點信息的指針。截面信息結(jié)構(gòu)體Section中包括截面的高度和寬度信息。
圖2 拱形巷道截面
圖3 曲面交叉,重疊
圖4 半拱形巷道截面
圖5 曲線巷道模型
圖6 巷道交叉點
圖7 點信息處理流程
其中對與點的連接關(guān)系的保存有多種方法,這里直介紹兩種。其中一種是:因為整個巷道可以近似認(rèn)為是一個包含點和連接信息的圖,故可以采用圖的鄰接表或鄰接矩陣的方式保存點的連接信息,但由于點信息數(shù)量很多,當(dāng)使用鄰接矩陣存儲時,會浪費大量內(nèi)存空間;當(dāng)使用鄰接表保存時,對于連接信息的查找和排序又會造成很大困難。
本文采用新的方法實現(xiàn)對點的連接信息的保存,即每個點的結(jié)構(gòu)體中包含存儲該點的連接信息的數(shù)組,數(shù)組中依次排列著與該點相連的點。這樣,既節(jié)省了內(nèi)存空間,又方便了對連接信息的排序和查找。
結(jié)構(gòu)體的代碼如下:
structVexcet{
intKey;//點的關(guān)鍵字
Pointpoint;//點的坐標(biāo)
intconnect[10];//點的連接信息
intsection[10];//與連接點之間的截面信息
Vexcet*next;//下一個點
};
(2)點存儲
通過數(shù)據(jù)提取與巷道基本模型的建立,我們已經(jīng)確定了點的數(shù)據(jù)和巷道的建立方式。我們需要確定每一組相連的點,假設(shè)共有n組點需要相連,構(gòu)造數(shù)組posCreat[n][3],如上述OABC在數(shù)組中的存儲方式即為:
表1 posCreat數(shù)據(jù)存放
為方便保存,我們在posCreat中存放點所對應(yīng)的關(guān)鍵字,從而通過關(guān)鍵字快速提取點信息。由于每段巷道的建造都不會對其他巷道產(chǎn)生影響,即建造巷道的順序不唯一,整個巷道是由許多小的基本曲線巷道拼接而成的。
(3)建立模型
通過posCreat數(shù)組,可以依次建造每組點的巷道基本模型,首先,要通過點的關(guān)鍵字獲得點的坐標(biāo)和截面的寬和高。我們首先在三維坐標(biāo)系的原點根據(jù)截面信息建立相應(yīng)大小的半拱形截面,再通過旋轉(zhuǎn)和平移將半拱形移動到制定位置,并保證半拱形面的法向量的方向正確。
由余弦定理可知,0≤θ≥π,在Direct3D中,圖像的旋轉(zhuǎn)方向為順時針,這樣,當(dāng)法向量方向相反時,旋轉(zhuǎn)方向相同,從而造成模型建立錯誤。為避免模型建立錯誤,應(yīng)在posCreat數(shù)組建立時保證每個中心點與相連點的連接順序成順時針。
圖8 點的連接順序
點的連接順序應(yīng)遵循A→B→C→D,起始點的選擇可以改變(圖8),但順序不可以變,例如:BoC,CoD,CoA,AoB的順序可以,但不可以出現(xiàn)BoA或AoC等。確定初始三點位置后,便可以用曲線插值算法得到彎曲部分的截面點,本文中巷道共生成5組截面點,結(jié)合兩個端點,每個截面有11個點,則一段巷道有77個點連接所得。
(4)設(shè)置貼圖向量
在Direct3D中貼圖需要設(shè)置對應(yīng)的貼圖向量,Di?rect3D中圖形的構(gòu)造已三角形為基本圖形,但貼圖是以四方體為單位的(圖9)。
圖9 貼圖向量表示
貼圖向量共有4個值:(0,0),(0,1),(1,0),(1,1)。構(gòu)造模型時,每個點都將多次使用,且要使模型正反兩面均完整貼圖,如果直接在點信息數(shù)組中加入貼圖向量,工作量大且實現(xiàn)復(fù)雜,故采用將每一個點所對應(yīng)的所有貼圖向量均存放到點信息數(shù)組中,最終的點信息數(shù)組vertices的大小為308*曲面巷道數(shù),將其保存至頂點緩沖區(qū)。
(5)生成索引
根據(jù)點信息數(shù)組vertices,相鄰兩組點的索引間隔為308,對于貼圖向量的選擇,當(dāng)使用(0,0)時,點索引即為原索引;當(dāng)使用(1,0)時,點索引為原索引加上77;當(dāng)使用(0,1)時,點索引即為原索引加上154;當(dāng)使用(1,1)時,點索引即為原索引加上231。
(6)生成模型
將點信息數(shù)組vertices和索引信息數(shù)組indices按指定格式導(dǎo)出至.obj和.x文件,則可以通過其他3D軟件,如3Dmax,AutoDesk等打開即可查看。
圖10 max打開生成的.obj文件
[1]張思卿,譚同德.VR技術(shù)在鎢礦山巷道可視化研究中的應(yīng)用[J].有色金屬(礦山部分),2014,66(4):91-95.
[2]欒東麗,劉明.基于曲線插值算法的巷道自動建模[J].信息技術(shù),2008(12):34-36.
[3]德才楊關(guān)勝孫玉萍.精通DirectX 3D圖形與動畫程序設(shè)計[M].人民郵電出版社,2007.
[4]王德才,楊冉.Direct3D中的坐標(biāo)系與基本圖元繪制[J].電腦編程技巧與維護,2007(4):4-6.
作者簡介:
馬穎(1995-),女,山東濟南人,本科,研究方向為軟件工程
劉文(1996-),男,山東滕州人,本科,研究方向為虛擬現(xiàn)實、機器學(xué)習(xí)
趙汝程(1996-),男,山東聊城人,本科,研究方向為虛擬現(xiàn)實、人工智能
尹燕芳,女,講師,研究方向為人工智能
Point Processing Based on Direct3D Roadway Automatic Modeling
MA Ying,LIUWen,ZHAORu-cheng,YINYan-fang
(Shandong University ofScienceand Technology,Jinan 250000)
Manualestablishmentof roadwaymodel ishugeworkload.According to the analysis and read of drawings(.dxf)information of CAD,for the file in a large point of information for analysis and processing,in the realization of three-dimensional tunnel in automaticmodeling,the roadwaymodelwith high complexity,the huge information for automatic processing realized by simple drawings to complex three-dimen?sionalmodel.And for the higher complex roadway also has a good modeling performance.Experiments show that optimize the processing with point information ofdrawings(.dxf)information ofCAD,which can simplify the construction ofhigher complex three-dimensionalmod?el.
2017-05-25
2017-08-01
1007-1423(2017)22-0039-05
10.3969/j.issn.1007-1423.2017.22.009
Three-Dimensional Tunnel;Automatic Modeling;Data-Processing;Interpolation Method