李 東 高何璇 何玉英 賈尚云 李紅嶺 金 李 張 旭 高曉陽(yáng)③
(1 甘肅農(nóng)業(yè)大學(xué)機(jī)電工程學(xué)院 甘肅蘭州 730000;2 甘肅省干旱生境作物學(xué)重點(diǎn)實(shí)驗(yàn)室 甘肅蘭州 730000;3 蘭州銀行網(wǎng)絡(luò)金融部 甘肅蘭州 730000;4 中國(guó)人民銀行蘭州支行 甘肅蘭州 730000)
農(nóng)業(yè)在整個(gè)國(guó)家的經(jīng)濟(jì)中扮演著舉足輕重的角色。早在20世紀(jì)60年代中期國(guó)外就開(kāi)始研究農(nóng)作物模型,模擬農(nóng)作物的生長(zhǎng)過(guò)程,探索預(yù)測(cè)作物產(chǎn)量[1-2]。隨著科學(xué)技術(shù)的飛速進(jìn)步,國(guó)內(nèi)外相繼涌現(xiàn)出了許多作物模型系統(tǒng)和虛擬植物可視化軟件。目前,虛擬植物研究主要是解決農(nóng)作物生長(zhǎng)的虛擬模型[3-5]。
利用OpenGL的繪圖函數(shù),對(duì)其主要器官的莖、葉和根進(jìn)行了仿真設(shè)計(jì)。該系統(tǒng)基于WIN‐DOWS,基于OpenGL的 Visual Studio 2010作為開(kāi)發(fā)平臺(tái)。
OpenGL系統(tǒng)是一個(gè)專業(yè)圖形庫(kù),具有很多圖形編程接口和功能函數(shù)。本文利用OpenGL提供的圖形繪制功能,實(shí)現(xiàn)黃芪生長(zhǎng)的不同形態(tài)和生長(zhǎng)過(guò)程可視化[6]。
1.1.1 繪制模型[7]
首先利用該方法在植株的各個(gè)部位上輸入一個(gè)節(jié)點(diǎn),并在該圖形庫(kù)中調(diào)用該功能,比如glver‐tex3f()并指定各頂點(diǎn),將這些點(diǎn)繪制成多邊形,再進(jìn)行變形拼接等構(gòu)建出三維模型。
1.1.2 模型坐標(biāo)變換
使用 OpenGL的 glTranslate()、glscale()、glscale()轉(zhuǎn)換功能對(duì)該模型的坐標(biāo)進(jìn)行平移、旋轉(zhuǎn)和縮放,從而設(shè)定該模型的座標(biāo)值。
1.1.3 顯示圖畫(huà)
為了防止在建模過(guò)程中出現(xiàn)的卡頓,使用兩種不同的緩存技術(shù)進(jìn)行繪制[8]。通過(guò)調(diào)用glflush()函數(shù)來(lái)顯示緩存中的內(nèi)容,再調(diào)用swapbuf‐fers函數(shù)交換2個(gè)緩存的數(shù)據(jù),實(shí)現(xiàn)邊繪制邊顯示的雙緩存顯示,節(jié)省繪制等待時(shí)間,提高動(dòng)畫(huà)顯示流暢效果。
1.1.4 顏色光照設(shè)定
為了讓本論文的模型更加真實(shí),利用OpenGL的RGB色彩空間處理功能設(shè)置了glcolor3f()的模式色彩,然后進(jìn)行了光照。
1.1.5 動(dòng)畫(huà)顯示效果
為了防止在建模過(guò)程中出現(xiàn)卡頓,使用2種不同的緩存技術(shù)進(jìn)行繪制。使用glflush()功能來(lái)表示快取中的內(nèi)容,然后調(diào)用swapbuffers功能對(duì)兩個(gè)高速緩存進(jìn)行交換,從而達(dá)到了“邊渲染即顯示”的雙重緩沖效應(yīng),節(jié)約了繪圖延遲,改善了動(dòng)畫(huà)的流暢性。
本論文中的黃芪生長(zhǎng)仿真系統(tǒng)由場(chǎng)景、黃芪器官、黃芪植株、rule等組成。在這些分類中,or‐gan類是指確定各個(gè)器官特征的所有虛擬器官的總稱。根據(jù)不同組織之間的父子聯(lián)系,以黃芪的主莖為根,構(gòu)建了一個(gè)具有代表性的虛擬器官;根據(jù)試驗(yàn)所得的黃芪生長(zhǎng)規(guī)律,確定了其生長(zhǎng)規(guī)律;最后,根據(jù)植物與生長(zhǎng)規(guī)律的組合,進(jìn)行了黃芪的可視化仿真[9-11]。
要實(shí)現(xiàn)黃芪的形態(tài)可視化,必須先建立一個(gè)立體的器官幾何模型。根據(jù)植物形態(tài)建成模擬模型輸出的葉片和其他器官的形態(tài)參數(shù),對(duì)其器官進(jìn)行觀察[12]。
葉片的幾何建模,黃芪的葉子包括葉柄,葉柄在葉的下面是柱狀的,多片相并著生于枝條節(jié)間。本文對(duì)葉片選用NURBS曲面來(lái)建模[8]。NURBS 曲面表示如下:
(i=0、1、......m,j=0、1、...n) -一組控制點(diǎn)。wi,j-加權(quán)系數(shù),它與最高點(diǎn)di,j相關(guān)聯(lián)。Ni,k(i=0、 1、 ......m),Nj,l(j=0、1、......n),即u次k,v次標(biāo)準(zhǔn)B樣條,其中,u和v方向的結(jié)點(diǎn)向量U=(u0,u1,..., um+ k+1),按照德布爾遞推公式確定V=(v0,v1,...,vn+l+1)。在NURBS平面上,確定了其控制點(diǎn),并進(jìn)行了數(shù)學(xué)建模。在NURBS的各個(gè)表面上,有10行的控制點(diǎn),5行的刀片和刀柄,每行7個(gè)控制點(diǎn)。刀片的前行是一個(gè)由7個(gè)控制點(diǎn)組成的矩形,并將其作為一個(gè)外切型的圓形[13]。
本文采用 OpenGL圖形庫(kù)的相關(guān)功能函數(shù),在visual Studio 2010 平臺(tái)上[12,14-16]。首先,建立了一個(gè)基于植物的器官模型,并以一個(gè)類的形式進(jìn)行了封裝。以黃芪為對(duì)象,分別進(jìn)行了植株繪制類、莖類類編程,具體內(nèi)容如下。
2.2.1 繪制植株
Class CCapsicum:public CObeject//植株繪制類的定義
2.2.2 莖繪制類
2.2.3 繪制葉類
本文主要實(shí)現(xiàn)黃芪生長(zhǎng)過(guò)程中形態(tài)變化功能,設(shè)計(jì)的程序運(yùn)行后將開(kāi)始從幼苗期到成熟期的黃芪植株虛擬生長(zhǎng)仿真。程序的主要功能是顯示黃芪從幼苗期到成熟期的植株生長(zhǎng)過(guò)程,分別顯示黃芪在幼苗期、分支期(生長(zhǎng)期)和成熟期等的生長(zhǎng)狀態(tài),也可單獨(dú)顯示在生長(zhǎng)過(guò)程中黃芪各器官(葉、莖)的發(fā)育變化[11,14-15]。
本程序的主菜單及選項(xiàng)操作有:
“文件”選項(xiàng)卡。下面的選擇是:“幼苗期”——表示在苗期的成長(zhǎng)。“分支期”——在枝葉發(fā)育過(guò)程中的表現(xiàn)。“成熟期”——在成熟階段的表現(xiàn)?!巴顺觥薄x開(kāi)該體系。
選擇“控制”。下面的選擇是:“暫?!薄V股L(zhǎng)并在這個(gè)時(shí)候查看它的成長(zhǎng)狀況?!叭?夜”——可以在白天或晚上之間進(jìn)行轉(zhuǎn)換[16]。
在“生長(zhǎng)過(guò)程”中選擇“整株植物”——展示了整個(gè)黃耆的整個(gè)成長(zhǎng)歷程?!叭~”——觀察了不同時(shí)期的紅花葉片的生長(zhǎng)情況?!扒o”——說(shuō)明了不同時(shí)期的黃芪根的生長(zhǎng)情況。
“程序說(shuō)明”選項(xiàng)位于“幫助”菜單下。
研究在WINDOWS操作系統(tǒng)下,以visual stu‐dio為開(kāi)發(fā)平臺(tái),運(yùn)用OpenGL圖形庫(kù),首先設(shè)計(jì)建立了黃芪虛擬生長(zhǎng)系統(tǒng)的主要功能模塊和結(jié)構(gòu)框架[17]?;谛螒B(tài)建成模型輸出的葉莖等器官的形態(tài)特征參數(shù),采用NURBS曲面方法建立了黃芪葉片及莖稈3維模型[18],并對(duì)所建幾何模型進(jìn)行顏色和光照等渲染處理,提高了仿真顯示效果及逼真度。然后,根據(jù)黃芪田間實(shí)驗(yàn)取得的植株生長(zhǎng)變化規(guī)則,以建立的植物器官為基本圖形單元,采用類封裝方法,實(shí)現(xiàn)了植物類繪制、莖類、葉類的虛擬程序[19]。最后,結(jié)合植物和植物的生長(zhǎng)規(guī)律,形成一個(gè)情景,進(jìn)行黃芪生長(zhǎng)可視化模擬仿真,并對(duì)黃芪生長(zhǎng)可視化系統(tǒng)的操作功能進(jìn)行了簡(jiǎn)要說(shuō)明。仿真運(yùn)行結(jié)果表明本研究基本實(shí)現(xiàn)設(shè)計(jì)要求。隨著虛擬仿真技術(shù)的不斷進(jìn)步還仍要繼續(xù)完善改進(jìn)。