林 敏
(武漢工程職業(yè)技術(shù)學(xué)院 湖北 武漢:430080)
現(xiàn)代大型高爐要保持長壽有兩個(gè)瓶頸,一個(gè)是爐缸爐底容易燒穿,另一個(gè)是爐腹、爐腰及爐身下部壽命短。高爐生產(chǎn)實(shí)踐表明,隨著冶煉強(qiáng)度的不斷提高,由于爐缸爐底燒穿而導(dǎo)致高爐停爐的現(xiàn)象在國內(nèi)外屢見不鮮。因此,確保爐缸爐底的長壽對整個(gè)高爐生命周期的延長至關(guān)重要。由于高爐具有“暗箱操作”的特點(diǎn),不能將其剖開對爐缸爐底侵蝕情況進(jìn)行檢測,只能借助于現(xiàn)代計(jì)算機(jī)技術(shù)對高爐侵蝕情況進(jìn)行分析、判斷并加以預(yù)測。很多鋼鐵企業(yè)都建有自己的高爐侵蝕預(yù)測系統(tǒng),用以直觀地反映高爐斷面的溫度分布情況。
圖1為高爐二維斷面溫度分布示意圖,能有效輔助工程人員對爐內(nèi)情況進(jìn)行判斷。此類系統(tǒng)的圖形繪制主要基于GDI技術(shù)。該技術(shù)具有繪圖便捷以及與硬件無關(guān)的優(yōu)點(diǎn),但是由于其屏蔽硬件細(xì)節(jié)是建立在損失部分效率的基礎(chǔ)之上,故采用GDI繪圖的場景一般繪圖速度較慢,工程人員為提高其顯示效率和減小繪圖閃爍做出了不少努力。
圖1 高爐斷面溫度分布示意圖
相比于GDI,DirectX有直接訪問顯示硬件的特點(diǎn),能快速的進(jìn)行復(fù)雜圖形繪制。本文在分析了DirectX繪圖原理的基礎(chǔ)上,以某鋼鐵企業(yè)高爐侵蝕預(yù)測系統(tǒng)為應(yīng)用背景,詳細(xì)說明了如何在實(shí)際開發(fā)中基于DirectX實(shí)現(xiàn)繪制高爐三維模型斷面功能。
以某鋼鐵企業(yè)為例,在高爐建造過程會(huì)在爐壁和爐底埋設(shè)許多熱電偶,高爐運(yùn)行時(shí)利用熱電偶采集高爐爐缸爐壁溫度數(shù)據(jù)。其采集的溫度數(shù)據(jù)存放于Oracle數(shù)據(jù)庫中,利用Oracle公司提供的instant client動(dòng)態(tài)鏈接庫可以將溫度數(shù)據(jù)提取出來用于數(shù)值計(jì)算,并模擬爐內(nèi)溫度分布情況。程序完成數(shù)值計(jì)算后得到一系列的二維斷面溫度數(shù)據(jù),利用計(jì)算機(jī)圖像顯示技術(shù)將二維斷面溫度顯示出來以供工程人員參考。顯示平臺(tái)采用C/S和三層架構(gòu),以客戶端的形式與Oracle數(shù)據(jù)服務(wù)器交互。
圖2 斷面顯示結(jié)構(gòu)示意圖
如圖2所示,底層對應(yīng)數(shù)據(jù)訪問層依賴于運(yùn)行于Windows平臺(tái)上的.NET框架以及DirectX圖形編程接口,采用Oracle提供的輕量級(jí)客戶端訪問存儲(chǔ)熱電偶的數(shù)據(jù)庫。業(yè)務(wù)邏輯層利用下層接口構(gòu)造滿足需要處理數(shù)據(jù)的邏輯以及通信需求。最上層則是UI呈現(xiàn)負(fù)責(zé)同用戶的交互功能實(shí)現(xiàn)以及對必要的數(shù)據(jù)進(jìn)行輸入及校驗(yàn)其合法性。
DirectX是微軟提供的三維圖形編程接口,廣泛地應(yīng)用于工業(yè)仿真領(lǐng)域。DirectX中模型由頂點(diǎn)構(gòu)成的三角形組成,渲染中只渲染模型表面,內(nèi)部則是中空狀態(tài),故DirectX很少用于模擬模型內(nèi)部狀況。粒子是DirectX中用于模擬微小顆粒如煙霧和火花等的數(shù)據(jù)結(jié)構(gòu)。由于其具備坐標(biāo)及顏色屬性,與數(shù)值計(jì)算獲得的斷面溫度數(shù)據(jù)特點(diǎn)相符,適合用以模擬斷面溫度分布。根據(jù)DirectX的工作原理,有如下幾種方法對模型進(jìn)行切割:
方法1:用SetClipPlane函數(shù)對模型進(jìn)行切割,用粒子填充斷面;
利用SetClipPlane切割,其函數(shù)原型如下:
HRESULT SetClipPlane(
[in] DWORD Index, //裁剪面編號(hào)
[in] const float*pPlane, //裁剪面參數(shù)
);
Index參數(shù)表明裁剪面編號(hào),pPlane指針指向含有4個(gè)參數(shù)float型數(shù)組,記為A、B、C和D,用以確定Ax+By+Cz+Dw=0平面。如果模型中頂點(diǎn)(x,y,z)滿足Ax+By+Cz+Dw>=0則可見,否則不可見。通過以上方法對模型進(jìn)行裁剪并用粒子填充斷面,如果粒子離切面較近,在DirectX中旋轉(zhuǎn)模型會(huì)將某些粒子剔除,太遠(yuǎn)則斷面與模型邊緣脫離,顯示效果較差。
方法2:利用平面對模型切割,將模型位于平面一側(cè)的頂點(diǎn)剔除并取得處于切面上的頂點(diǎn),利用多邊形三角化算法生成三角形組成斷面;
由方法1的原理可以自行設(shè)置切面,計(jì)算切面附近的頂點(diǎn),將獲得頂點(diǎn)順時(shí)針連接可以形成多邊形斷面。但DirectX渲染以三角形為單位,不能直接繪制多邊形。方法2將頂點(diǎn)組成的多邊形轉(zhuǎn)化為若干三角形后進(jìn)行繪制,三角化使用較多為Delaunay算法。
由于DirectX著色只支持flat、gouraud以及phong幾種模式而不能自由改變頂點(diǎn)間顏色,與繪制斷面需要靈活改變某點(diǎn)顏色需求不符,因此不適合本應(yīng)用場景。
方法3:高爐完整模型和斷面模型交替渲染顯示斷面模型,用點(diǎn)精靈覆蓋于斷面處形成斷面。
利用該方法可以精確控制斷面坐標(biāo)及顏色,在合理設(shè)置粒子坐標(biāo)的前提下,繪制斷面時(shí)不會(huì)出現(xiàn)斷面與模型脫離,適合作為模型切割的解決方案。
顯示三維斷面需要完成三個(gè)步驟:第一步根據(jù)用戶輸入的角度,利用插值計(jì)算出斷面的溫度數(shù)據(jù);第二步,根據(jù)監(jiān)控系統(tǒng)是否處于斷面顯示狀態(tài),讀入并顯示利用3ds MAX設(shè)計(jì)好高爐爐缸完整或者斷面模型;第三步,將第一步計(jì)算好的溫度數(shù)據(jù)進(jìn)行坐標(biāo)變換置于三維坐標(biāo)系中,同時(shí)根據(jù)不同的溫度計(jì)算對應(yīng)的RGB值,以點(diǎn)精靈的方式在斷面處顯示出來。以下是詳細(xì)步驟介紹。
目前許多高爐侵蝕預(yù)測系統(tǒng)只能提供固定位置的二維斷面示意圖,這給工程人員的監(jiān)控帶了許多不便之處。如某鋼鐵公司的提供的斷面顯示功能只能在0°、45°、90°和135°這四個(gè)位置提供溫度截面圖,其他角度溫度只能依靠工程人員的經(jīng)驗(yàn)進(jìn)行判斷。為了克服上述缺點(diǎn),筆者在新的三維預(yù)測模型中加入了可對任意位置提供三維斷面顯示的功能。
假設(shè)通過數(shù)值計(jì)算得到的溫度數(shù)據(jù)一共有10個(gè)半截面,可將整個(gè)高爐爐缸(360°)分為[0,36)、[36,72)、[72,108)、[108,144)以及[144,180)共5個(gè)區(qū)間,并按1,2,…,5進(jìn)行編號(hào),然后按公式1確定斷面上某點(diǎn)的具體數(shù)值。
(1)
公式中TC為由計(jì)算得到的三維溫度矩陣,angle為用戶輸入的斷面角度,k為角度所在的區(qū)間序號(hào),data為用以保存數(shù)據(jù)的數(shù)組。計(jì)算出輸入角度位于哪兩個(gè)半截面之間后,利用兩個(gè)斷面處于相同位置的溫度數(shù)據(jù)TCk+1ij及TCkij進(jìn)行插值運(yùn)算,逐一計(jì)算出需要顯示斷面上每點(diǎn)的溫度數(shù)據(jù)。由此可以確定整個(gè)爐缸中任意一點(diǎn)的溫度值,為斷面顯示提供三維數(shù)據(jù)。
在3ds MAX中有很多現(xiàn)成的模型可以使用,如長方體、球體、圓柱體和比較有代表性的茶壺。高爐的爐底在立體上可以視作是一個(gè)對稱的凹槽,可以利用3ds MAX的車削功能將一個(gè)半斷面進(jìn)行旋轉(zhuǎn)360度得到一個(gè)完整的爐底形狀。
假設(shè)通過計(jì)算生成半個(gè)斷面的溫度數(shù)據(jù)是一個(gè)670*675的矩陣,為了方便將每個(gè)溫度數(shù)據(jù)與高爐斷面空間上的點(diǎn)對應(yīng)起來,在3ds MAX中制作三維斷面模型時(shí)將模型斷面的長寬設(shè)定為長67*2,高67.5,以0.1為步長可以將斷面分為1340*675個(gè)區(qū)域,每個(gè)區(qū)域溫度與計(jì)算得到的溫度數(shù)據(jù)矩陣一一對應(yīng)。模型導(dǎo)出為.X文件后,利用Mesh類的FromFile()方法將該模型加載至程序,同時(shí)將模型置于世界坐標(biāo)系中的原點(diǎn)利于后續(xù)斷面坐標(biāo)計(jì)算。
計(jì)算所得二維溫度數(shù)據(jù)與三維空間中的位置關(guān)系如圖3所示,為將數(shù)據(jù)映射到三維空間,首先固定Z軸坐標(biāo),然后將計(jì)算的溫度數(shù)組在XY平面中進(jìn)行轉(zhuǎn)置。偽代碼1完成此功能,其中i、j為溫度數(shù)據(jù)數(shù)組下標(biāo)。
圖3 坐標(biāo)轉(zhuǎn)換示意圖
偽代碼1:points[ParticleCount].Position=((j*0.1),(67-(i*0.1)),-0.1)
為直觀地反映溫度高低,需要建立一個(gè)由溫度值到RGB值的映射,滿足溫度越高的部位越紅,溫度越低的部位越藍(lán)。對照某鋼鐵廠的溫度表,獲取紅(255,0,0)、黃(255,255,0),綠(0,255,0)、青(0,255,255)、藍(lán)(0,0,255)、黑(0,0,0)對應(yīng)的溫度,將這6個(gè)溫度作為端點(diǎn)將整個(gè)溫度范圍劃分成5個(gè)區(qū)間。對位于某一區(qū)間內(nèi)的溫度數(shù)據(jù)利用其區(qū)間兩端點(diǎn)對應(yīng)的RGB值進(jìn)行線性插值計(jì)算,以R分量為例,利用公式2進(jìn)行計(jì)算獲得某點(diǎn)的R值。
(2)
其中T為該點(diǎn)的溫度值,Tb、Ta分別為所在區(qū)間端點(diǎn)的溫度值,Ra、Rb為該區(qū)間兩端點(diǎn)R分量的值。同理確定該點(diǎn)的G、B值,最終得到漸變過渡的顏色效果。在偽代碼1后加入一函數(shù)Tem2RGB完成此功能。
在渲染過程中記錄監(jiān)控系統(tǒng)是否處于斷面顯示狀態(tài),如果是則渲染斷面模型,否則渲染完整模型,并將計(jì)算獲得的粒子渲染到斷面表層加以顯示。為顯示頂點(diǎn)自身顏色,需要關(guān)閉場景中的燈光。
試驗(yàn)中指明了粒子大小、數(shù)量、格式以及粒子緩存等信息,當(dāng)觀察點(diǎn)離原點(diǎn)越近粒子越小,反之則越大,符合人的視覺規(guī)律,避免出現(xiàn)粒子覆蓋斷面不完全或者超過斷面邊界的現(xiàn)象。
本文的實(shí)驗(yàn)環(huán)境為Intel(R) Core(TM) i5 M430 2.27GHz處理器,3GB RAM,ATI Mobility Radeon HD 4350 (512MB)顯卡,開發(fā)環(huán)境為VS 2013。渲染效果如圖4所示,可以對模型進(jìn)行旋轉(zhuǎn),在不同角度查看斷面溫度分布。
圖4 三維渲染效果圖
以完成一幅圖片渲染耗時(shí)為目標(biāo)與某鋼鐵企業(yè)目前使用的系統(tǒng)進(jìn)行速度對比測試,測試結(jié)果如表1所示。由表1可知,利用本文方法大幅度提高了繪制斷面所需時(shí)間,平均耗時(shí)為某鋼鐵企業(yè)使用的系統(tǒng)的1/800。
表1 斷面渲染速度對比
本文提出基于DirectX模型進(jìn)行切割的方法并用于高爐斷面中為目前高爐侵蝕預(yù)測系統(tǒng)中關(guān)鍵部分—斷面顯示提供了一種更優(yōu)的方案。利用該方法可以快速地對高爐斷面進(jìn)行模型渲染,在提供更強(qiáng)大功能和更好顯示效果的同時(shí)大幅減少斷面繪制所消耗的時(shí)間,同時(shí)本文提出的方法對于其他需要利用DirectX繪制模型內(nèi)部的場景也有一定的參考價(jià)值。
[1]張繼超,馬洋洋,董塞漠.基于C#和DirectX的三維虛擬校園構(gòu)建探討[J].測繪工程,2015,(1):44-47.
[2]楊鵬,李業(yè)麗,等.一種新的加載展示3D模型的方法[J].北京印刷學(xué)院學(xué)報(bào),2016,(4):46-50,55.
[3]杜旭,黃亞明.基于高爐冷卻壁熱流強(qiáng)度的爐缸爐底侵蝕研究[J].電腦知識(shí)與技術(shù):學(xué)術(shù)交流,2017,(3X):212-213,221.
[4]江建國,溫少營,張瑞楠.基于雙緩沖技術(shù)的GDI+無閃爍繪圖[J].計(jì)算機(jī)應(yīng)用,2012,32(S2):136-139.