程 芳,徐 華
(1.北京化工大學 信息科學與技術學院,北京 100029;2.北京石油化工學院 信息工程學院,北京 102617)
隨著數字化進程在金屬礦山領域的發展,視景仿真技術和虛擬漫游技術越來越多地運用到礦山生產等各個領域。而巷道是礦山的重要組成部分,在礦山開發建設過程中發揮著重要作用。為了實現礦山數字化,建立礦山井下三維虛擬顯示體系,最為基礎的部分在于構建礦山井下巷道的三維可視化模型。而虛擬漫游是虛擬現實技術的重要應用,它將真實的場景在屏幕上進行顯示,實現了對三維景觀的數字化和虛擬化。為了使三維地理場景的逼真性和精細程度有所提高,漫游路徑的設計成為了虛擬漫游最重要的內容[1-6]。
大多數虛擬漫游場景是校園、房屋或者山地、河流等開闊地帶,并且大多都是交互式漫游,但是用在礦山巷道的真實場景中的技術較少。由于礦山巷道環境的復雜性(拐彎處和坡道較多),目前基于給定路徑的自動漫游技術研究較少。文獻[4]運用Cardinal樣條曲線的方法處理路徑,但是對一些兩點之間較長的路徑效果不好;文獻[5-6]分別采用了三次B樣條和轉角處細分的方法對路徑進行光滑處理,但是對于較窄的轉彎處達不到預期效果;對此,文中提出基于線性插值和Cardinal[7]樣條曲線相擬合的方法對路徑中較長段和狹窄處進行處理,以實現礦山巷道虛擬漫游[6-7]。
文中實現了礦山三維巷道模型構建、三維巷道場景顯示,并基于OpenGL對模型進行繪制、模型變換、視點控制,實現虛擬巷道場景漫游。在線性插值的基礎上運用Cardinal樣條曲線對漫游路徑進行優化,從而達到視覺上的逼真性。
利用現有的礦山井下AutoCAD圖紙,篩選出礦井巷道實體對象并提取有用的二維巷道信息轉換為三維空間信息,并基于3ds MAX三維建模軟件構建巷道基本模型,在現有的巷道建模方法的研究基礎上,提出巷道中心線加巷道斷面模型方法建立巷道模型。
對巷道進行空間分析之后,將巷道模型分為巷道交叉部分和巷道非交叉部分。在構建這兩部分模型時,將礦山巷道非交叉部分的對象分為巷道中心線和巷道截面。巷道中心線的信息通過給定的AutoCAD圖紙信息提取出來,包括各個段的坐標點、導線點及傾斜角度,作為整個巷道體的基本骨架,如圖1(a)所示;巷道截面信息根據實際提供的具體情況而定。主要采用3ds Max基于樣條曲線的多邊形建模技術對兩個部分進行建模,如圖1所示。

圖1 巷道建模示意圖
1.1.1 巷道截面建模
根據某礦山提供的實際數據表明,巷道截面分為兩種:矩形截面和拱形截面。其中主巷道為拱形(上半部為半圓弧,下半部為矩形)截面,其他巷道如采掘巷道、上(下)巷道為矩形截面。選定中心線某一個開始點作為基礎點,在其垂直于中心線的部分做截面,矩形截面通過多邊形建模直接得到,對于拱形截面的半圓弧部分,為了使結果更加真實,將半圓弧等分成22段,每段長度為π/22。然后其他部分根據圖紙提供的數據高度值做出下半部分巷道,如圖1(b)所示。
1.1.2 巷道交叉部分建模
由于礦山巷道錯綜復雜的地形,巷道交叉處理使其交匯貫通實現無縫連接是重要的一步。采用基于面模型的建模方法對巷道交叉部分進行處理[8],巷道交叉有一條出入或者多條出入的情況,但最終都會在一個終點交匯。為了使其互相連通,對交叉部分進行探測,除去多余的部分。其實質是通過空間三角形相交探測求出巷道間的交線,交線將其分為兩個部分,然后再重新進行三角形剖分,刪除多余部分的三角形后得到最后的結果。利用3ds Max建模軟件,結合布爾運算等操作處理巷道交叉部分[9-10],如圖1(c)所示。
礦山開采面臨多種不確定的安全隱患,比如礦井突水、瓦斯爆炸、局部塌方等,其中礦井突水對于計算機仿真來說,其真實性最不容易保障。水流的模擬受多種因素的影響,為了使水流模擬更加真實有效,選用3D打印技術復原出礦井管道的實物來進行水流實驗[11]。實驗中使用熔融沉積制造(fused deposition modeling,FDM)3D打印技術。
FDM又稱熔絲沉積,是一種快速成型技術[12]。FDM是將低熔點材料熔化后,通過計算機數控的精細噴頭按CAD分層截面數據進行二維填充,噴出的絲材料經冷卻粘結固化生成一薄層截面,層層疊加成三維實體[13]。實驗中使用的打印機型號為MakerBot2,礦井管道打印的流程如下。
1.2.1 數據準備
把制作好的地礦模型轉化為快速成型領域的標準格式STL,導入Magics軟件中添加厚度為2 mm。
1.2.2 模型檢驗
根據分析和實際使用經驗,可以總結出4類基本錯誤:法向錯誤,屬于中小錯誤;面片邊不相連,如裂縫或空洞、懸面、不相接的面片等;相交或自相交的體或面;文件不完全或損壞。
1.2.3 模型分層
對管道模型進行檢查和修復后,因為受打印機大小的限制,先把模型截斷為適合打印機大小的部分,再進行分層,分層后的層片包括輪廓部分、內部填充部分和支撐部分。
1.2.4 模型建造
分層后得到的文件通過Makeware處理成打印機能識別的模式,放入打印機芯片中,開始建造模型。
1.2.5 后續處理
加工過程結束后,對每部分模型進行檢驗及后續處理。清理殘余物和一些粉末,然后對模型進行固化處理,用專用膠水對零散的模型進行粘貼,最后加上支撐,完成整個過程。由于模型太大,這里只展出部分模型,如圖2所示

圖2 礦井管道模型3D打印效果
為了實現礦山巷道的三維場景漫游,首先需要把建立好的巷道模型導入到.net環境中,基于OpenGL實現模型的繪制及漫游。由3ds MAX輸出的.3ds模型經過轉換把得到的點和三角形的數據信息存儲在.txt文件中,并對模型進行平移或放大(縮小)等變換,使模型跟實際數據相符合。其次,對所有坐標數值進行數據重置,并確定模型的中心點坐標位置,以便于對模型進行調整和移動。然后在場景中導入設定好的路徑文件,獲得其三維坐標信息,使用鍵盤響應函數實現“M”鍵按下時沿著既定路徑進行漫游[14]。模型(灰色)及其路徑(黑色)如圖3所示。

圖3 巷道模型示意圖
視點變換是虛擬漫游中重要的一步,根據鍵盤響應函數可以實現前后移動、左右移動、垂直移動、上下俯仰移動、左右旋轉、左右翻滾。文中運用了OpenGL圖形庫中的視點變換函數gluLookAt(),該函數通過改變視點參數中視點的位置和視點的觀察方向等,進而改變視窗內物體的相對位置。通過不斷更新視點位置來實現對場景的虛擬漫游[15]。
由于模型路徑在方向上的復雜性,需要對gluLook At()的原理進行分析后,創建一個新的函數LookAt(float*eye,float*center,float*upV)進行視點變換。通過改變函數的參數值,進而比較當前幀和前一幀的方向角是否大于(小于)90°,來確定是取反還是不變,輸出響應的函數值,避免了當場景漫游路徑為非直線時翻轉現象的發生。
2.2.1 路徑顯示
礦井巷道的視點路徑追蹤是根據指定的視點路徑數據進行位置的移動變化,從而實現對地下礦井巷道的虛擬漫游。其視點路徑數據主要取自礦井巷道中各個路段的中心軸線,然后應用OpenGL技術對路徑集合PPath中多個路徑進行繪制顯示,使用函數glPointSize與glLineWidth設定路徑視點數據的大小和線的寬度。再使用函數glBegin()與glEnd(),在函數之間放入視點路徑數據坐標,從而完成對視點路徑的繪制。
管道模型路徑數據顯示如圖3中黑色線所示,可以看出各個視點路徑均處在礦井的路段中,并且礦井管道是由多個路段組成的,在路段與路段連接處存在一定的彎度,路徑在拐彎處也有連接。
2.2.2 線性樣條路徑漫游
對場景進行視點路徑追蹤,其宗旨是其逼真性和精細程度,所以對漫游路徑的設計成為了虛擬漫游的重要內容。在對路徑不加任何優化的前提下進行追蹤發現點與點之間間隔太大,產生了跳躍和失真,在拐彎處尤其明顯,不能真實有效地對巷道進行觀察。
根據此類問題,首先采用了線性插值方式進行處理。如圖4(a)所示,視點路徑數據點由P1P2…Pn組成,在漫游過程中攝像機視點依次通過各坐標點來實現對場景實體對象的觀察。該方法存在的問題是PiPi+1之間的距離過大會忽略敏感重點區域的觀察,PiPi+1之間的方位角或俯仰角過大會造成視點在漫游中的跳躍突變與急速轉向,造成視覺上的壓力。

圖4 數據插值處理示意圖
如圖4所示,在路徑視點線性插值之前,視點是直接從P1-P2,再從P2-P3,而P1P2或者P2P3距離過大導致視點快速移動。為解決因采樣視點路徑點之間距離過大而忽略敏感重點區域觀察,可以在路徑視點之間進行線性插值,在敏感區域進行細分、非敏感區域進行粗分,從而實現對各采樣點進行等分插值處理。在集合Pi{P1,P2,…,Pg}中前后兩個視點之間距離是不一致的。根據序號在點集合中查找兩點坐標,計算兩個連續視點之間的距離PathVertex[Pj+1]-PathVertex[Pj],在集合CV{C1,C2,…,Cg}查找當前等分的數目,根據需要進行插值點的個數,逐個計算出產生的各個插值點坐標,如圖4(a)(白色點)展示了插入的Q11Q12Q21…Qni路徑點。
當P1P2構成的向量同XZ平面(水平)產生的角度較大,就會有明顯的視點俯仰跳躍。線性插值仍然無法解決存在的問題,當在連接點處的視點移動改變成Q12-P2-Q21這個過程,∠Q12P2Q21角度如果等于180°,那么表示三點在一條直線上,視點漫游的過渡非常平滑,如果角度很小,一旦∠Q12P2Q21≤90°,那么Q12-P2-Q21視點漫游會存在短暫的突變,降低了視覺展示效果。視點路徑在漫游中的突變、跳躍與急速轉向可以通過擬合光滑曲線數據來解決,文中提出基于線性插值和Cardinal樣條曲線相結合的擬合算法,并對該算法進行改進以提升視點漫游的效果。
2.2.3 Cardinal曲線擬合算法
Cardinal樣條的實質是插值的分段三次曲線,并且每條曲線段的端點位置均指定切線。Cardinal[16-17]算法的優點是一個控制點的斜率數值可以由相鄰的控制點坐標計算得出。一個Cardinal樣條完全由四個連續控制點給出。中間的兩個點是生成的曲線線段的端點,其他的兩個控制點用來計算端點的斜率。如圖4(a)所示,可以簡單歸納為Pn-3,Pn-2,Pn-1,Pn四個點生成了曲線P(u),其中P(u)的兩個端點為Pn-2和Pn-1,端點Pn-2的切線方向平行于Pn-3Pn-1,端點Pn-1的切線方向平行于Pn-2Pn。
Pn-3到Pn之間四個控制點用于建立Cardinal樣條段的邊界條件,決定P(u)曲線,其中設定:
P(0)=Pn-2
(1)
P(1)=Pn-1
(2)
(3)
(4)

(5)
其中Mc表示為:
(6)
將上述矩陣展開得到:
P(u)=Pk-1·CAR0(u)+Pk·CAR1(u)+Pk-1·
CAR2(u)+Pk+2·CAR3(u)
(7)
其中,CAR0(u)、CAR1(u)、CAR2(u)、CAR3(u)表示為:
(8)
2.2.4 線性等分插值與Cardinal曲線擬合的組合算法
如圖4所示,根據Cardinal樣條曲線插值原理對線性插值后的各個數據點進行處理,通過計算得到P1-Q11-Q12-S1-S2…的曲線。可以看出,在轉彎處對直線轉彎轉化為對曲線轉彎,使效果更加真實。圖4(b)、(c)、(d)是對巷道中視點路徑進行線性插值和Cardinal樣條曲線擬合后的結果,其中圖(b)是截取的有較大轉角的路徑,圖(c)是圖(b)中黑色圓圈部分的擴大圖,且經過線性插值處理后半徑較小的黑色插值點,圖(d)是圖(c)中黑色圓圈部分的擴大。經過Cardinal樣條曲線插值處理后,能更加清晰地看出,在線性插值后1和2兩個點之間生成曲線并且插值得到9個點來形成一段曲線。
具體的算法流程如圖5所示。
Step1:讀取坐標數據,計算兩點之間距離,然后計算線性等分插值次數。
Step2:根據插值次數值,生成坐標數值并存入數據集合中,判斷計數器的值。
Step3:輸入Cardinal曲線擬合的張量參數與曲線點數量,計算生成的坐標點數據存入數據集合,運用OpenGL顯示得到的Cardinal曲線。
基于某礦山的實際數據,通過上述的建模分析及構造,將輸出的.3ds格式文件導入到.net環境中,在OpenGL環境下成功地繪制出模型,并對模型進行表面填充,使模型更加逼真。然后成功導入視點追蹤路徑后對兩種插值方式進行仿真和分析,并對兩種仿真結果進行比較,結果表明基于線性插值和Cardinal樣條曲線相結合的擬合算法達到了預期效果。選取圖4中一條路徑進行模擬和分析,如圖6所示。

圖5 線性等分插值與Cardinal曲線擬合組合算法流程

圖6 視點路徑圖及插值漫游結果
圖(a)分別對應圖4(d)中1和2的位置,即線性插值后在拐角處的漫游轉彎需要兩步即可完成,但明顯發生圖像跳變現象,而經過Cardinal插值處理后在1和2之間形成了9個點來完成轉彎處的漫游;圖(b)是提取出的四幅圖,表明轉彎平穩且無跳躍現象。表明當只有線性插值的情況下,漫游失真,沒有真正達到逼真性的要求;而在兩者相結合的情況下,效果最好。
研究并實現了對三維巷道場景中虛擬漫游路徑的優化。利用基于樣條曲線的多邊形建模方法成功建立三維巷道模型,并在VS平臺下使用OpenGL導入模型、繪制模型、模型渲染及沿給定路徑實現場景的自動漫游。在基于線性等分差值和Cardinal樣條曲線擬合的算法下對漫游路徑進行優化,實現了視點在三維巷道場景中的漫游,避免了視覺抖動和場景跳躍現象。該算法適用于各種復雜三維虛擬場景,并能夠生成光滑的漫游路徑,實現場景虛擬漫游。
[1] 修春華,孫秀娟,車德福,等.三維場景中虛擬漫游路徑的優化設計方法[J].金屬礦山,2015(4):242-245.
[2] BANDI S,THALMANN D.Path finding for human motion in virtual environments[J].Computational Geometry,2000,15(1):103-127.
[3] 侯建光,朱月霞,宋 震.礦山巷道三維建模數據組織與算法研究[J].國土資源信息化,2014(5):29-33.
[4] 吳玲達,趙 健,楊 冰,等.一種虛擬場景的自動漫游方法[J].小型微型計算機系統,2010(8):1562-1566.
[5] 胡 英,侯 悅,徐心和.基于雙距離場的三維中心路徑提取算法[J].中國圖象圖形學報,2003,8(11):1272-1276.
[6] 劉雁菲,邵曉東,李 申.基于Vega的虛擬漫游場景中的路徑規劃研究[J].計算機技術與發展,2008,18(6):9-12.
[7] 尚建嘎,劉修國,鄭 坤.三維場景交互漫游的研究與實現[J].計算機工程,2003,29(2):61-62.
[8] 陳良周,任蘭花.一種基于面模型的巷道三維自動建模方法研究[J].上海地質,2010,31:262-264.
[9] 高紅森,栗繼祖.基于3D和VIRTOOLS的煤礦安全行為模擬[J].太原理工大學學報,2010,41(1):106-109.
[10] 孫 卡,翁正平,張志庭,等.基于帶約束三角剖分的三維巷道建模方法[J].礦業研究與開發,2007,27(5):64-65.
[11] 張嘉易,劉偉軍,王天然,等.快速成型數據處理系統研究[J].機械設計與制造,2004(1):80-82.
[12] 郭新貴,汪德才,劉亞東,等.快速成型的切片數據優化[J].制造技術與機床,2002(3):30-32.
[13] 劉偉軍.快速成型技術應用[M].北京:機械工業出版社,2004.
[14] 王 玉,徐 華,楊 歡.基于OpenGL的視點追蹤與系統實現[J].北京石油化工學院學報,2014,22(2):20-25.
[15] TIAN C,ZHANG J,GUO H P.The design of hydraulic virtual roaming system based on virtual reality technology[C]//International conference on fluid power and mechatronics.[s.l.]:IEEE,2011:775-778.
[16] FANG G.Recovery of band limited functions via cardinal splines[J].Science in China,2001,44(9):1126-1131.
[17] HEARN D,BAKER M P.計算機圖形學[M].蔡士杰,譯.第3版.北京:電子工業出版社,2010.