張學(xué)鋒,濮 程,湯亞玲
(安徽工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,馬鞍山 243002)
近些年來鋼鐵企業(yè)的生存壓力空間加大,環(huán)保問題、成本問題都?jí)旱搅髓F前,在這種情況下,各鋼鐵廠都在尋找所謂降成本的靈丹妙藥.鐵前所有的工作最終要表現(xiàn)在生鐵成本上,因?yàn)樗性?、燃料影響成本占?0%,原燃料有劣次之分,如何選擇,也就是經(jīng)常說的性價(jià)比問題,這是系統(tǒng)降成本的思路[1].因此,如何選擇煉鐵的配料對(duì)于現(xiàn)代鋼鐵企業(yè)非常重要,方便高效的配料計(jì)算方式對(duì)于降低煉鐵成本具有重要意義.
我國(guó)鋼企的高爐配料計(jì)算方式主要有3 種,分別是手工計(jì)算、Excel 計(jì)算和高爐配料應(yīng)用軟件計(jì)算,它們主要通過正向計(jì)算和驗(yàn)證調(diào)整來實(shí)現(xiàn).其原理就是通過高爐配料計(jì)算預(yù)定條件下的理論出鐵量和理論爐渣量,將它們與設(shè)定目標(biāo)對(duì)比,滿足誤差允許要求則為可行配比,否則再對(duì)配比進(jìn)行調(diào)整,直至配比可行[2].由以上原理可已看出,其存在計(jì)算頻繁、效率低、結(jié)果差的問題,但是通過線性規(guī)劃理論優(yōu)化后的高爐配料系統(tǒng)相對(duì)而言有一下優(yōu)勢(shì):效率高、上手快、界面規(guī)范化、可以根據(jù)不同的需求選擇不同的優(yōu)化方向[2].例如,張瑞軍[3]等采用線性規(guī)劃法建立模型,并利用Matlab完成模型求解;新余鋼鐵集團(tuán)有限公司[4]采用線性規(guī)劃法建立模型,并采用LINGO 工具求解模型;河鋼集團(tuán)承鋼公司[5]采用了IData 技術(shù)進(jìn)行數(shù)據(jù)庫(kù)數(shù)據(jù)、求解設(shè)置參數(shù)直接與Excel 連接的方法,通過Excel 求解線性規(guī)劃問題.文獻(xiàn)[3-5]都采用的線性規(guī)劃的方法建立了模型,但是對(duì)于線性規(guī)劃模型的求解均是采用數(shù)學(xué)求解工具求得結(jié)果,這樣會(huì)進(jìn)一步提高對(duì)于優(yōu)化煉鐵軟件工作環(huán)境的要求,不利于工程人員使用.
本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于線性規(guī)劃的跨平臺(tái)(Windows 和Linux)智能煉鐵配料系統(tǒng),采用單純形法求得最低成本的配料方案,并可將配料方案進(jìn)行二維展示(表格)、煉鐵數(shù)據(jù)進(jìn)行二維展示(表格、折線圖、柱狀圖)、煉鐵模型進(jìn)行二維(圖片、動(dòng)畫)和三維展示(三維模型).本系統(tǒng)節(jié)省了工程人員計(jì)算煉鐵配料的時(shí)間,降低了煉鐵配料的成本,多元化的輔助功能很大程度上提高了工程人員的工作效率,為指導(dǎo)生產(chǎn)提供理論依據(jù).
線性規(guī)劃是運(yùn)籌學(xué)中研究較早、發(fā)展較快、應(yīng)用廣泛、方法較成熟的一個(gè)重要分支,它是輔助人們進(jìn)行科學(xué)管理的一種數(shù)學(xué)方法.線性規(guī)劃是求一個(gè)線性函數(shù)在滿足一組線性等式或不等式方程條件極值的統(tǒng)稱,它一般由三部分組成:
(1)由決策變量(如本文中的鐵礦粉)構(gòu)成的反映決策目標(biāo)(使配礦成本最低)的線性目標(biāo)函數(shù);
(2)一組包含決策變量的線性等式或不等式構(gòu)成的約束方程(燒結(jié)礦成分范圍);
(3)限制決策變量取值范圍的非負(fù)約束[6].
一般線性規(guī)劃問題中當(dāng)線性方程組的變量數(shù)大于方程個(gè)數(shù),這時(shí)會(huì)有不定數(shù)量的解,而單純形法是求解線性規(guī)劃問題的通用方法.單純形法就是秉承“保證每一次迭代比前一次更優(yōu)”的基本思想:先找出一個(gè)基本可行解,對(duì)它進(jìn)行鑒別,看是否是最優(yōu)解;若不是,則按照一定法則轉(zhuǎn)換到另一改進(jìn)后更優(yōu)的基本可行解,再鑒別;若仍不是,則再轉(zhuǎn)換,按此重復(fù)進(jìn)行.因基本可行解的個(gè)數(shù)有限,故經(jīng)有限次轉(zhuǎn)換必能得出問題的最優(yōu)解[7].
一個(gè)非常流行的模型導(dǎo)入庫(kù)是Assimp,它是Open Asset Import Library(開放的資產(chǎn)導(dǎo)入庫(kù))的縮寫.Assimp 能夠?qū)牒芏喾N不同的模型文件格式(并也能夠?qū)С霾糠值母袷?,它會(huì)將所有的模型數(shù)據(jù)加載至Assimp 的通用數(shù)據(jù)結(jié)構(gòu)中.當(dāng)Assimp 加載完模型之后,我們就能夠從Assimp 的數(shù)據(jù)結(jié)構(gòu)中提取我們所需的所有數(shù)據(jù)了.由于Assimp 的數(shù)據(jù)結(jié)構(gòu)保持不變,不論導(dǎo)入的是什么種類的文件格式,它都能夠?qū)⑽覀儚倪@些不同的文件格式中抽象出來,用同一種方式訪問我們需要的數(shù)據(jù).
FFMPEG 是一個(gè)集成了各種編解碼器的庫(kù),可以說是一個(gè)全能型的工具,從視頻采集、視頻編碼到視頻傳輸(包括RTP、RTCP、RTMP、RTSP 等等協(xié)議)都可以直接使用FFmpeg 來完成,更重要的一點(diǎn)FFmpeg是跨平臺(tái)的,Windows、Linux、Android、IOS 這些主流系統(tǒng)都支持.
智能煉鐵配料系統(tǒng)具體工作流程為讀入煉鐵基準(zhǔn)案例,輸入各種原料用量的約束條件,通過線性規(guī)劃建立標(biāo)準(zhǔn)型公式,再通過單純形法求得成本最優(yōu)解.
智能煉鐵配料系統(tǒng)將各種礦石數(shù)據(jù)庫(kù)數(shù)據(jù)、副料數(shù)據(jù)庫(kù)數(shù)據(jù)、燒結(jié)配礦參數(shù)、高爐配料和操作參數(shù)、勻礦配比、副料配比全部集成在一個(gè)自定義格式的文本文件中,用自定義格式的文本文件作為煉鐵優(yōu)化的基本案例,通過讀入基準(zhǔn)案例即可獲得工程人員所需要的所有數(shù)據(jù).煉鐵基準(zhǔn)案例包含十三張表格,數(shù)據(jù)文件由以下幾個(gè)部分組成:
(1)表頭:表頭一般會(huì)以圖1形式給出.
圖1 表頭格式
(2)GUI 頁(yè)面標(biāo)簽:以“#>”開頭,在建立頁(yè)面時(shí),根據(jù)其內(nèi)容確定頁(yè)面的標(biāo)題.典型的頁(yè)面標(biāo)簽行如下所示:“#>燒結(jié)礦粉數(shù)據(jù)庫(kù)”.
(3)關(guān)鍵字:options 關(guān)鍵字不寫入GUI 頁(yè)面,用來分隔數(shù)據(jù)類型,但在寫文件時(shí),該關(guān)鍵字需要寫入.
(4)注釋行:以“#”開頭,且“#”后面不帶“>”號(hào),注釋行內(nèi)容不寫入GUI 頁(yè)面,但在寫文件時(shí),應(yīng)該寫回.
(5)數(shù)據(jù)庫(kù)表頭行:緊跟數(shù)據(jù)標(biāo)簽行后的第一個(gè)非說明行,數(shù)據(jù)庫(kù)表頭行以逗號(hào)分隔,例如:“類別,代碼,單價(jià),平均粒度,H2O,全鐵,二氧化硅,氧化鈣,三氧化二鋁,氧化鎂,二氧化鈦,氧化錳,五氧化二磷,氧化亞鐵”.
(6)數(shù)據(jù)庫(kù)數(shù)據(jù)區(qū):每行數(shù)據(jù)段的不同數(shù)據(jù)以逗號(hào)分隔,數(shù)據(jù)可以為空,其對(duì)應(yīng)的GUI 表格應(yīng)寫入符合“-”,在寫回文件時(shí),應(yīng)寫入表格中的“-”而不是空字符.
(7)操作參數(shù)區(qū):操作參數(shù)區(qū)緊跟在關(guān)鍵字options后面.操作參數(shù)的數(shù)據(jù)格式為數(shù)據(jù)名=數(shù)據(jù)內(nèi)容.在將數(shù)據(jù)寫入GUI 頁(yè)面時(shí),以=為分隔,=左邊數(shù)據(jù)寫入第一列.數(shù)據(jù)內(nèi)容可以是單個(gè)數(shù)據(jù),也可以是多個(gè)數(shù)據(jù),用逗號(hào)分隔.
建立燒結(jié)礦優(yōu)化配料模型的步驟為:
(1)確定決策變量.以第i種原料的配量作為決策變量xi,i=1,2,···n,n為原料的種類數(shù)量.
(2)確定目標(biāo)函數(shù).以燒結(jié)礦成本最低為目標(biāo),構(gòu)成的目標(biāo)函數(shù)為:minz=∑ci×xi,i=1,2,···n.其中,ci為第i中原料的價(jià)格,xi為第i種原料的配量,n為原料的種類數(shù)量[8].
(3)確定約束條件.根據(jù)必要的燒結(jié)工藝性能要求、燒結(jié)礦質(zhì)量要求及原料資源量等建立約束條件如下:
1)成分條件約束
根據(jù)燒結(jié)礦成分的限制范圍上下限建立約束方程,燒結(jié)礦配料中溶劑的堿度要大于1.8,若其堿度低于1.8 則會(huì)阻礙鐵酸鈣系形成固結(jié)相,從而影響到燒結(jié)礦的質(zhì)量.燒結(jié)礦需要較高的鐵品位,TFe 的比例需要大于等于60%,SiO2小于等于4.5%[9].根據(jù)現(xiàn)場(chǎng)生產(chǎn)需要,確定了燒結(jié)礦主要控制的化學(xué)成分有:TFe、SiO2、CaO、Al2O3、MgO、TiO2、P2O5.構(gòu)成的公式為:
2)配比約束
由于現(xiàn)實(shí)狀況下礦粉資源的限制,某些超過實(shí)際礦粉配比需求的計(jì)算結(jié)果是無(wú)用的,因此加入礦石配比約束,更加符合實(shí)際情況,使得配礦結(jié)果更準(zhǔn)確.
3)平衡約束
由于各種原料在煉鐵過程中存在損失的情況,不同的原料燒損情況不一,但各種原料在燒結(jié)后的燒成比之和應(yīng)等于1.構(gòu)成公式為:1= ∑(1-燒損i)×xi,i=1,2,···,n.其中燒損i為不同原料燒損比,xi為第i種原料的配量.
線性規(guī)劃建立的模型為非標(biāo)準(zhǔn)型公式,首先需要將非標(biāo)準(zhǔn)型公式轉(zhuǎn)換成為標(biāo)準(zhǔn)型公式,轉(zhuǎn)換標(biāo)準(zhǔn)如下:
(1)目標(biāo)函數(shù)極小化轉(zhuǎn)換為極大化.minz= -max(-z),一個(gè)數(shù)的極小化等價(jià)于其相反數(shù)的極大化.
(2)不等式約束的轉(zhuǎn)換
∑aijxj≤bi,加入松弛變量;
∑aijxj≥bi,減去剩余變量.
(3)非正變量:即xk≤0,則令x'k=-xk;
自由變量:即xk無(wú)約束,則令xk=x'k-x"k.
引入松弛變量,用單純形法求解.單純形法是一個(gè)迭代過程,它是從線性規(guī)劃問題的一個(gè)基本可行解轉(zhuǎn)移到另一個(gè)基本可行解而目標(biāo)函數(shù)值不增加的過程(對(duì)于求最小值問題),如果存在最優(yōu)解,此過程將持續(xù)到求得最優(yōu)解為止[10].
基于Qt5.9,使用Mingw 編譯器編譯實(shí)現(xiàn)Windows和Linux 雙平臺(tái)的智能煉鐵配料系統(tǒng),實(shí)現(xiàn)了成本最低、多重約束條件的多目標(biāo)優(yōu)化配料和多元化展示煉鐵結(jié)果的功能.當(dāng)用戶讀入煉鐵過程分析案例后,根據(jù)展示在界面上的各種配料的數(shù)據(jù)庫(kù)數(shù)據(jù),方便的選擇需要選取的配料,再根據(jù)實(shí)際需要設(shè)定約束條件,即可根據(jù)設(shè)定求得成本最低的配料方案,可以為工程人員提供理論參考.
為了簡(jiǎn)化操作流程,方便操作人員快速上手,本系統(tǒng)自定義了煉鐵所需數(shù)據(jù)的基準(zhǔn)案例,具體定義的基準(zhǔn)案例格式在煉鐵案例設(shè)計(jì)中已經(jīng)介紹過,這里就不再贅述.對(duì)于煉鐵數(shù)據(jù)的管理主要有以下幾個(gè)部分:
(1)讀入數(shù)據(jù).對(duì)于煉鐵數(shù)據(jù)的讀入就是基于基準(zhǔn)案例設(shè)計(jì)的格式將每一種配料和需要修改的部分?jǐn)?shù)據(jù)解析為需要的數(shù)據(jù)格式,通過QTableView 類的函數(shù)以表格的形式展示在GUI 上,這樣可以做到一次性將需要選擇的配料和需要修改的操作表格展示給用戶.
(2)更新數(shù)據(jù).對(duì)于煉鐵數(shù)據(jù)中數(shù)據(jù)庫(kù)的更新則是將CSV 格式的各種配料數(shù)據(jù)提取到系統(tǒng)中,再對(duì)獲得的數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換,進(jìn)而替換掉展示在GUI 上對(duì)應(yīng)配料的表格數(shù)據(jù),最后對(duì)當(dāng)前操作的基準(zhǔn)案例文件進(jìn)行保存操作則可以實(shí)現(xiàn)對(duì)當(dāng)前煉鐵案例的更新.
(3)操作數(shù)據(jù).對(duì)于煉鐵數(shù)據(jù)在表格上的插入、刪除、基本計(jì)算、復(fù)制、粘貼等操作,通過Qt 特有的信號(hào)與槽機(jī)制實(shí)現(xiàn)表格數(shù)據(jù)的刷新.對(duì)于操作數(shù)據(jù)的撤銷和恢復(fù),通過重寫QUndoCommand 中的undo 和redo 函數(shù)實(shí)現(xiàn).
讀入煉鐵數(shù)據(jù)后的效果如圖2所示,當(dāng)前煉鐵基準(zhǔn)案列共有十三張表.
圖2 讀入基準(zhǔn)案例
煉鐵配料的優(yōu)化主要是根據(jù)用戶選定的礦種和配料以及對(duì)于燒結(jié)礦化學(xué)成分和工藝條件的約束,以成本最低為導(dǎo)向輸出配料方案.實(shí)現(xiàn)的基本流程如下:
(1)獲取所需數(shù)據(jù).用戶讀入煉鐵案例后,在勻礦配比和副料配比頁(yè)面選擇需要的所有原料,并在燒結(jié)配料優(yōu)化頁(yè)面設(shè)置約束條件的上下限,最后將選擇的原料的數(shù)據(jù)和所有約束條件的數(shù)據(jù)儲(chǔ)存為QStandard ItemModel 類型數(shù)據(jù).
(2)建立線性規(guī)劃的標(biāo)準(zhǔn)型公式.根據(jù)線性規(guī)劃建模的方法將獲取的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,進(jìn)而將建立好的公式以圖3格式輸出到文本文件中,具體的轉(zhuǎn)換方法在線性規(guī)劃模型建立和單純形法求解中已介紹過.文件中第一行包含了自變量和約束變量的個(gè)數(shù),第二行為目標(biāo)函數(shù)自變量前的系數(shù),接下來的所有行包含了對(duì)應(yīng)約束的自變量前的系數(shù)和約束<=號(hào)右邊的數(shù)值.
(3)獲得最低成本配料方案.讀取線性規(guī)劃公式文件中的數(shù)據(jù),將數(shù)據(jù)以矩陣的形式存儲(chǔ),按照單純形法求解的方法變換矩陣,進(jìn)而獲得最低成本配料方案.
(4)驗(yàn)證單純形法正確性.根據(jù)建立的數(shù)學(xué)模型文件中的數(shù)據(jù),將其采用Lingo 語(yǔ)言輸入到Lingo 軟件中,通過Lingo 軟件求得線性規(guī)劃的結(jié)果.將智能煉鐵配料系統(tǒng)求得的結(jié)果和Lingo 軟件求得的結(jié)果進(jìn)行對(duì)比后證明對(duì)于該數(shù)學(xué)模型的計(jì)算無(wú)誤.
燒結(jié)配料優(yōu)化頁(yè)面如圖4所示,其中左上方為優(yōu)化配料結(jié)果,左下方為燒結(jié)礦化學(xué)成分的約束,右側(cè)為選擇的礦種和配料.
圖3 線性規(guī)劃公式文件
圖4 燒結(jié)配料優(yōu)化
智能煉鐵配料系統(tǒng)可以根據(jù)提供的煉鐵數(shù)據(jù)按照一定的函數(shù)關(guān)系繪制精美的折線圖和柱狀圖,煉鐵數(shù)據(jù)的格式為CSV 格式.繪制曲線需要用到一個(gè)用Qt開發(fā)的開源的第三方工具QCustomPlot,將QCustom Plot 移植到開發(fā)的系統(tǒng)中,調(diào)用QCustomPlot 相關(guān)的類就可以繪制出精美的曲線.用戶可以根據(jù)需要設(shè)定x軸和y軸的數(shù)據(jù)源以及對(duì)圖形樣式進(jìn)行設(shè)置,繪制圖線的效果如圖5和圖6所示.
圖5 折線圖
圖6 柱狀圖
智能煉鐵配料系統(tǒng)可以對(duì)高爐數(shù)模的結(jié)果進(jìn)行二維圖片的展示和動(dòng)畫的播放,動(dòng)畫播放效果如圖7所示.傳統(tǒng)的多媒體文件解碼方式有any chat,gstreamer,FFmpeg,ffdshow,vfw 和directshow 等,由于FFmpeg的功能強(qiáng)大和編解碼速度較高,目前得到了普遍的應(yīng)用[11].除此之外,因?yàn)橄到y(tǒng)需要能夠在Windows 和Linux雙平臺(tái)下運(yùn)行,所以采用了在Linux 下開發(fā)可用來采集和轉(zhuǎn)換數(shù)字音視頻并將其轉(zhuǎn)換為流暢的FFmpeg.高爐數(shù)模動(dòng)畫的播放需要在系統(tǒng)中加入Windows 環(huán)境和Linux 環(huán)境下編譯出來的FFmepg 庫(kù),利用FFmpeg解碼和Qt 顯示的基本流程可以分為如下幾步:
(1)注冊(cè)所支持的所有文件(容器)格式及其對(duì)應(yīng)的CODEC.函數(shù)av_register_all( )將獲得的FFmpeg支持的編碼器、解碼器以及混合器的相關(guān)信息以鏈?zhǔn)浇Y(jié)構(gòu)存放在內(nèi)存中.
(2)打開視頻文件.函數(shù)avformat_open_input()通過解析多媒體文件或流的頭信息及其他的輔助數(shù)據(jù),能夠獲取足夠多的關(guān)于文件、流和CODEC 的信息,并將這些信息填充到AVFormatContext 結(jié)構(gòu)體中.
(3)從文件中提取視頻流信息.首先利用函數(shù)av_find_stream_info( )將文件中的流信息提取出來,再循環(huán)判斷提取出的流信息,找到類型為MEDIA_TYPE_VIDEO 的視頻流,進(jìn)而通過avcodec_find_decoder( )函數(shù)查找視頻流相對(duì)應(yīng)的解碼器.
(4)獲取圖像.根據(jù)視頻流信息中的codec_id 找到相應(yīng)的解碼器,通過函數(shù)avcodec_open2()函數(shù)打開解碼器,利用函數(shù)av_frame_alloc( )為解碼幀分配內(nèi)存,并通過av_read_frame()函數(shù)從流數(shù)據(jù)中一幀一幀的提取數(shù)據(jù),進(jìn)而通過函數(shù)avcodec_decode_video2()對(duì)視頻幀進(jìn)行解碼,這樣就獲得了YUV420 格式的圖像數(shù)據(jù).
(5)顯示圖像.對(duì)于圖像的顯示需要利用Qt 的控件來實(shí)現(xiàn),首先需要將解碼之后的YUV 數(shù)據(jù)轉(zhuǎn)換成RGB32 格式的數(shù)據(jù),同時(shí)將轉(zhuǎn)換后的RGB32 數(shù)據(jù)存入QImage 對(duì)象中,在主線程中通過Qpainter 直接繪制.
(6)解碼完成,釋放解碼器,關(guān)閉視頻文件.
智能煉鐵配料系統(tǒng)可以加載STL、OBJ 等多種常見格式的三維模型,并可對(duì)加載后的模型進(jìn)行放大、縮小、還原、移動(dòng)、旋轉(zhuǎn)等操作.OpenGL 即開放性圖形庫(kù),是一個(gè)三維的計(jì)算機(jī)圖形和模型庫(kù).OpenGL 適用于多種硬件平臺(tái)及操作系統(tǒng),用戶用這個(gè)圖形庫(kù)不僅能方便的制作出有極高質(zhì)量的靜止三維彩色圖像,還能創(chuàng)建出高質(zhì)量的動(dòng)畫效果[12].由于在Qt5.5 以上的版本已經(jīng)集成了OpenGL,本系統(tǒng)直接利用Qt 封裝好的OpengGL 庫(kù).由于不同種類的文件格式有很多,它們之間通常并沒有一個(gè)通用的結(jié)構(gòu),因此需要利用一個(gè)非常流行的模型導(dǎo)入庫(kù)Assimp.Assimp 能夠?qū)牒芏喾N不同的模型文件格式,它會(huì)將所有的模型數(shù)據(jù)加載至Assimp 的通用數(shù)據(jù)結(jié)構(gòu)中,進(jìn)而將這些數(shù)據(jù)轉(zhuǎn)換為OpenGL 能夠理解的格式.利用Assimp 解析模型文件和OpenGL 展示的基本流程分為以下幾步:
圖7 高爐流動(dòng)動(dòng)畫
(1)創(chuàng)建OpenGL 窗口.虛函數(shù)initializeGL()中自定義初始化視口的大小、背景、平滑、深度緩存等參數(shù).
(2)構(gòu)造并且編譯著色器.著色器是使用一種叫GLSL 的類C 語(yǔ)言寫成的.GLSL 是為圖形計(jì)算量身定制的,它包含一些針對(duì)向量和矩陣操作的有用特性.本系統(tǒng)編寫了一個(gè)頂點(diǎn)著色器和一個(gè)片段著色器,用來對(duì)模型文件網(wǎng)格進(jìn)行渲染.頂點(diǎn)著色器主要功能為對(duì)場(chǎng)景中的物體進(jìn)行矩陣變換,將物體的位置信息轉(zhuǎn)換為屏幕位置;片段著色器主要功能為計(jì)算每個(gè)片段的顏色值,對(duì)每個(gè)片段進(jìn)行著色.
(3)提取模型文件網(wǎng)格.網(wǎng)格代表的是單個(gè)可繪制的實(shí)體,一個(gè)模型文件包含一個(gè)或多個(gè)網(wǎng)格.首先聲明一個(gè)importer 對(duì)象,調(diào)用它的ReadFile()函數(shù)獲得assimp 中的數(shù)據(jù)結(jié)構(gòu)—scene 對(duì)象.scene 對(duì)象中的節(jié)點(diǎn)符合遞歸結(jié)構(gòu),每個(gè)節(jié)點(diǎn)包含一個(gè)網(wǎng)格集合的索引,每個(gè)索引指向一個(gè)場(chǎng)景中特定的網(wǎng)格位置.遞歸遍歷場(chǎng)景節(jié)點(diǎn),檢查每個(gè)節(jié)點(diǎn)的網(wǎng)格索引以獲取相應(yīng)的網(wǎng)格并將網(wǎng)格對(duì)象存儲(chǔ)起來.
(4)將assimp 提取的網(wǎng)格對(duì)象轉(zhuǎn)換為自己定義的網(wǎng)格對(duì)象.訪問提取出來的網(wǎng)格對(duì)象的相關(guān)屬性,包括所有的頂點(diǎn)數(shù)據(jù)、網(wǎng)格索引和相關(guān)的材質(zhì)數(shù)據(jù),將這些數(shù)據(jù)儲(chǔ)存在三個(gè)vector 中,并將其構(gòu)建一個(gè)自定義的網(wǎng)格對(duì)象.
(5)三維模型移動(dòng)、旋轉(zhuǎn)、放大和縮小的實(shí)現(xiàn).OpenGL 本身沒有攝像機(jī)的概念,本系統(tǒng)通過把場(chǎng)景中的所有物體往相反方向移動(dòng)的方式模擬出攝像機(jī),產(chǎn)生一種物體在移動(dòng)的感覺,而不是場(chǎng)景在移動(dòng).首先初始化一個(gè)攝像機(jī)對(duì)象,即定義一個(gè)攝像機(jī)位置,一個(gè)目標(biāo)位置和一個(gè)表示世界空間中的上向量的向量.接著利用GLM (OpenGL Mathematics)庫(kù)創(chuàng)建一個(gè)LookAt矩陣,將該矩陣當(dāng)作觀察矩陣.對(duì)物體進(jìn)行移動(dòng),構(gòu)造模型矩陣變換攝像機(jī)位置向量;對(duì)物體的旋轉(zhuǎn),通過鼠標(biāo)移動(dòng)獲得偏航角和俯仰角,再計(jì)算出真正的方向向量,進(jìn)而變換目標(biāo)位置向量;對(duì)物體的縮放,根據(jù)滾輪獲得參數(shù),調(diào)用glm::perspective 函數(shù)去將透視投影矩陣上傳到GPU,達(dá)到放縮視野的目的.
(6)繪制模型到窗口.遍歷存儲(chǔ)的自定義的網(wǎng)格對(duì)象,通過函數(shù)glBindVertexArray 綁定VAO (Vertex Array Object),再利用函數(shù)glDrawArrays 繪制當(dāng)前網(wǎng)格,最后函數(shù)glBindVertexArray 解除綁定.
圖8 高爐模型加載
現(xiàn)在國(guó)內(nèi)煉鐵行業(yè)同質(zhì)化競(jìng)爭(zhēng)現(xiàn)象越來越嚴(yán)重,低煉鐵成本變得尤為重要.基于寶鋼中央研究院的需求合作研發(fā)的智能煉鐵配料系統(tǒng),其具備跨平臺(tái),操作簡(jiǎn)單,降低煉鐵成本,多元化的輔助功能等特點(diǎn),可以滿足工程人員對(duì)于煉鐵優(yōu)化系統(tǒng)的需求,為實(shí)際生產(chǎn)提供理論依據(jù)和技術(shù)支持.
計(jì)算機(jī)系統(tǒng)應(yīng)用2019年4期