劉 峰,陳 媛,范 偉
(重慶理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,重慶 400054)
虛擬實(shí)驗(yàn)是使用計(jì)算機(jī)技術(shù)實(shí)現(xiàn)的一種虛擬實(shí)驗(yàn)環(huán)境,操作者可以像在真實(shí)的實(shí)驗(yàn)環(huán)境中一樣完成各種實(shí)驗(yàn)項(xiàng)目[1-3]。虛擬實(shí)驗(yàn)有實(shí)驗(yàn)開(kāi)設(shè)不受時(shí)間、地點(diǎn)限制,能降低實(shí)驗(yàn)設(shè)備運(yùn)行及維護(hù)成本投入,緩解高校招生規(guī)模不斷擴(kuò)大與實(shí)驗(yàn)室建設(shè)相對(duì)滯后的矛盾等特點(diǎn)。同時(shí)利用計(jì)算機(jī)系統(tǒng)強(qiáng)大的數(shù)據(jù)存儲(chǔ)和處理能力,虛擬實(shí)驗(yàn)還可以擴(kuò)展出許多現(xiàn)場(chǎng)實(shí)驗(yàn)無(wú)法完成的功能,進(jìn)一步提高實(shí)驗(yàn)管理和實(shí)驗(yàn)效果評(píng)價(jià)的效率。
目前,國(guó)內(nèi)外很多高校和科研機(jī)構(gòu)都在進(jìn)行虛擬實(shí)驗(yàn)方面的探索性應(yīng)用研究[4-7]。經(jīng)過(guò)多年發(fā)展,虛擬實(shí)驗(yàn)的應(yīng)用還未到成熟及普及的階段。虛擬實(shí)驗(yàn)主流開(kāi)發(fā)多采用“建模+交互”的方式,即先用3dMax、Pro/E、VRML、Flash等軟件建立模型,然后使用編程工具(如Java、VRML EAI等)讀取、控制模型,完成場(chǎng)景和模型的控制與交互功能[8-10]。這種開(kāi)發(fā)方式存在對(duì)第三方軟件依賴性大、不同軟件間數(shù)據(jù)融合導(dǎo)致模型讀取效率低等缺點(diǎn)。即便使用了三維模型和場(chǎng)景,但如果沒(méi)有虛擬現(xiàn)實(shí)系統(tǒng)輔助反饋設(shè)備的支持,設(shè)計(jì)完成的虛擬實(shí)驗(yàn)系統(tǒng)仍然存在參與感不強(qiáng)、現(xiàn)場(chǎng)感缺失等缺點(diǎn)。
本文提出了一種基于“.NET”框架下的虛擬實(shí)驗(yàn)系統(tǒng)的開(kāi)發(fā)方法,以對(duì)象的方式來(lái)存儲(chǔ)及處理實(shí)驗(yàn)場(chǎng)景中的虛擬器件。器件模型使用二維矢量圖繪制,在本虛擬實(shí)驗(yàn)系統(tǒng)中創(chuàng)建和管理,避免了與第三方建模軟件或系統(tǒng)的交互,具有運(yùn)行效率高的特點(diǎn)。
虛擬實(shí)驗(yàn)系統(tǒng)是一個(gè)基于網(wǎng)絡(luò)的實(shí)驗(yàn)教學(xué)及技術(shù)交流平臺(tái),由系統(tǒng)管理、器件庫(kù)管理、實(shí)驗(yàn)控制調(diào)度、實(shí)驗(yàn)輔助管理等功能模塊構(gòu)成,如圖1所示。系統(tǒng)管理模塊完成操作用戶定義及權(quán)限分配等功能。操作用戶分管理教師和學(xué)生2類角色,分別有不同的操作權(quán)限。器件庫(kù)管理模塊完成虛擬實(shí)驗(yàn)圖形庫(kù)及參數(shù)庫(kù)的管理,并完成實(shí)驗(yàn)中需要的多種虛擬實(shí)驗(yàn)設(shè)備外觀圖形的定制,器材接口參數(shù)(個(gè)數(shù)、類型)定義,非幾何屬性定義等功能。實(shí)驗(yàn)控制與調(diào)度模塊完成具體實(shí)驗(yàn)的定義功能,是虛擬實(shí)驗(yàn)系統(tǒng)的核心,包括從器件庫(kù)中選取器件來(lái)搭建實(shí)驗(yàn)環(huán)境、設(shè)置各器件間的關(guān)聯(lián)參數(shù)及控制表達(dá)式、為虛擬設(shè)備綁定及注冊(cè)相應(yīng)事件等功能。實(shí)驗(yàn)輔助管理模塊提供實(shí)驗(yàn)相關(guān)幫助、實(shí)驗(yàn)重現(xiàn)及回放、實(shí)驗(yàn)成績(jī)?cè)u(píng)價(jià)、成績(jī)查詢等功能。
圖1 虛擬實(shí)驗(yàn)系統(tǒng)功能
面向?qū)ο?object oriented,OO)是一種編程技術(shù),對(duì)象和類是面向?qū)ο缶幊碳夹g(shù)的核心。面向?qū)ο蠼M件式虛擬實(shí)驗(yàn)系統(tǒng)將需要管理的實(shí)驗(yàn)設(shè)備(虛擬器件或元件)抽象為對(duì)象模型,以“對(duì)象”的方式來(lái)管理。
從圖形、描述屬性和輸入輸出(IO)參數(shù)3方面可以完整地表述一個(gè)虛擬實(shí)驗(yàn)器件。圖形描述表達(dá)了實(shí)驗(yàn)器件的外觀信息。描述屬性指虛擬實(shí)驗(yàn)器件所具有的如編號(hào)、名稱、分類等描述性信息。輸入輸出參數(shù)是虛擬實(shí)驗(yàn)場(chǎng)景中器件間關(guān)聯(lián)的控制參數(shù)。描述屬性和輸入輸出參數(shù)也稱虛擬實(shí)驗(yàn)器件的非圖形屬性。
定義1 虛擬設(shè)備圖形描述。定義為:Obj=(Id,n,{E1,E2,…,En}),其中:Id 為設(shè)備編號(hào),具有全局唯一性;n為該虛擬設(shè)備的構(gòu)成圖元個(gè)數(shù);En為具體圖元的定義信息,En=(Eid,Etype,Line-Type,LineWidth,LineColor,HatchColor,F(xiàn)eature-Poins),Eid為子圖元序號(hào),Etype為圖元類型(含點(diǎn)、直線、折線、圓形、圓弧、橢圓、矩形、多邊形等),LineType為線型(實(shí)線、點(diǎn)劃線、虛線),Line-Width為線條寬度,LineColor為線條顏色,Hatch-Color為填充顏色,F(xiàn)eaturePoins為序列特征點(diǎn)。
定義2 虛擬設(shè)備非圖形屬性。定義為:D=(P,S),其中 P=I∪O∪T,P 為設(shè)備接口參數(shù)集合,I={I1,I2,…,In}為虛擬設(shè)備的輸入?yún)?shù),O={O1,O2,…,Om)為虛擬設(shè)備的輸出參數(shù);T={t1,t2,...tk},為虛擬設(shè)備的臨時(shí)參數(shù)(為了簡(jiǎn)化控制表達(dá)式的書(shū)寫(xiě)需定義臨時(shí)參數(shù));S是虛擬設(shè)備的描述屬性,對(duì)于任意一個(gè)屬性Si,有Si={SName,SKind,SValue},SName為屬性名,SKind為屬性類型,SValue為屬性值。
虛擬實(shí)驗(yàn)場(chǎng)景中,某些設(shè)備之間是有關(guān)聯(lián)的。一個(gè)虛擬設(shè)備屬性的變化會(huì)引起關(guān)聯(lián)設(shè)備屬性的變化,這種關(guān)聯(lián)可通過(guò)虛擬對(duì)象綁定事件來(lái)驅(qū)動(dòng),當(dāng)“對(duì)象的屬性值改變”事件發(fā)生時(shí),執(zhí)行相應(yīng)的行為。
定義3 虛擬設(shè)備行為。定義為A=(Aname,Asender,Areceiver,Aparam),其中:Aname為行為名;Asender為行為的發(fā)送者;Areceiver為行為的接受者;Aparam為行為相關(guān)參數(shù)。
虛擬設(shè)備庫(kù)是實(shí)驗(yàn)場(chǎng)景定義時(shí)器件取用的資源庫(kù)。虛擬器件分類保存在庫(kù)中,圖形屬性信息和非圖形屬性信息分開(kāi)存儲(chǔ)。虛擬實(shí)驗(yàn)設(shè)備圖形信息以二進(jìn)制流的方式記錄了如線段端點(diǎn)坐標(biāo)、圓弧半徑、起始角度、線條顏色、背景色等特征信息。器件復(fù)用時(shí),系統(tǒng)為實(shí)例化的器件指定唯一的設(shè)備ID編號(hào)。在虛擬實(shí)驗(yàn)場(chǎng)景中,按該設(shè)備編號(hào)綁定該虛擬器件所具有的非圖形屬性類信息,讀取虛擬場(chǎng)景中圖形對(duì)象的特征數(shù)據(jù)。采用“.NET”框架下GDI+Graphics對(duì)象提供的繪圖方法,在Graphics畫(huà)布上繪圖完成虛擬場(chǎng)景的圖形展現(xiàn)。處理Graphics畫(huà)布的鼠標(biāo)事件,使用“點(diǎn)在直線上”、“點(diǎn)在區(qū)域內(nèi)”等判斷算法[11],實(shí)現(xiàn)虛擬場(chǎng)景中器件的選擇等操作。
各虛擬器件輸入、輸出參數(shù)之間存在復(fù)雜的控制邏輯,這些控制邏輯在定義虛擬實(shí)驗(yàn)場(chǎng)景時(shí),由操作者以表達(dá)式的方式定義。表達(dá)式分為邏輯表達(dá)式和算術(shù)表達(dá)式。其中對(duì)算術(shù)表達(dá)式的解析求值是一項(xiàng)復(fù)雜且關(guān)鍵的任務(wù)[12]。中綴表達(dá)式因?yàn)闀?shū)寫(xiě)直觀、符合傳統(tǒng)習(xí)慣,在表達(dá)式定義和存儲(chǔ)時(shí)被采用。后綴表達(dá)式求值過(guò)程編程實(shí)現(xiàn)簡(jiǎn)單,因此可先將中綴表達(dá)式轉(zhuǎn)成后綴表達(dá)式,再進(jìn)行后綴表達(dá)式的解析計(jì)算。將中綴表達(dá)式轉(zhuǎn)成后綴表達(dá)式的流程如圖2所示。設(shè)置操作符棧,用來(lái)暫存操作符。按從左至右順序掃描中綴表達(dá)式,當(dāng)遇到操作數(shù)時(shí)直接輸出。如遇到操作符,則比較該操作符與棧頂操作符的優(yōu)先級(jí)(當(dāng)前操作符優(yōu)先級(jí)記為mcp,棧頂操作符優(yōu)先級(jí)記為msp),若mcp大于msp,則當(dāng)前操作符入棧,否則操作符棧退棧輸出,再進(jìn)行比較,如此循環(huán)直到當(dāng)前操作符得到處理。當(dāng)掃描完畢并且操作符棧為空,則轉(zhuǎn)換完成。
圖2 中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式處理流程
后綴表達(dá)式求值流程:①初始化2個(gè)實(shí)型數(shù)據(jù)棧,一個(gè)是操作數(shù)棧,用于暫時(shí)存放操作數(shù),另一個(gè)是參數(shù)棧,用于暫存計(jì)算函數(shù)時(shí)的函數(shù)參數(shù)。②從左至右順次掃描后綴表達(dá)式各項(xiàng),根據(jù)取得的符號(hào)類型作相應(yīng)操作。若為操作數(shù),則將其壓入操作數(shù)棧;若為算術(shù)運(yùn)算操作符,則從操作數(shù)棧取相應(yīng)操作數(shù)作相應(yīng)的運(yùn)算,再將結(jié)果壓入操作數(shù)棧;若是逗號(hào),則從操作數(shù)棧彈出一個(gè)數(shù)據(jù)壓入?yún)?shù)棧;若為函數(shù)操作符,則從操作數(shù)棧中取第1個(gè)參數(shù),從參數(shù)棧依次取其余的參數(shù)作相應(yīng)的函數(shù)計(jì)算,并壓棧。③表達(dá)式掃描完成,棧頂數(shù)為最終計(jì)算結(jié)果。
從器件庫(kù)中取出虛擬器件,由操作用戶按照一定的連接規(guī)則,在虛擬實(shí)驗(yàn)場(chǎng)景中搭建出實(shí)驗(yàn)場(chǎng)景。使用“.NET”框架下的委托和事件機(jī)制來(lái)實(shí)現(xiàn)關(guān)聯(lián)實(shí)驗(yàn)器件間控制參數(shù)及狀態(tài)值的傳遞時(shí)機(jī)和行為[13],處理方法為:
基于“.NET”框架,按照面向?qū)ο蟮脑O(shè)計(jì)方法,使用GDI+圖形圖像編程等技術(shù),實(shí)現(xiàn)了一個(gè)組件式虛擬實(shí)驗(yàn)系統(tǒng)。在不使用其他建模工具及虛擬現(xiàn)實(shí)支撐軟件的情況下,完成了虛擬實(shí)驗(yàn)器件的二維建模、實(shí)驗(yàn)調(diào)度及控制等功能。該系統(tǒng)有一定的實(shí)用性,其設(shè)計(jì)與實(shí)現(xiàn)過(guò)程對(duì)虛擬實(shí)驗(yàn)系統(tǒng)的開(kāi)發(fā)有一定的參考及借鑒意義。
[1]宋象軍.虛擬實(shí)驗(yàn)室在高校實(shí)驗(yàn)教學(xué)中的應(yīng)用前景[J].實(shí)驗(yàn)技術(shù)與管理,2005,22(1):35-37.
[2]汪紅波,劉智強(qiáng),張棉好.模具機(jī)構(gòu)設(shè)計(jì)虛擬實(shí)驗(yàn)系統(tǒng)研究與開(kāi)發(fā)[J].激光雜志,2010(6):66-67.
[3]郭建,熊云霞,陳康.基于數(shù)碼照片的虛擬現(xiàn)實(shí)建模技術(shù)[J].激光雜志,2011(6):50-51.
[4]陸飛,郭建中.基于虛擬儀器的超聲換能器阻抗分析儀設(shè)計(jì)[J].壓電與聲光,2011(3):425-428.
[5]單寧,劉霞.激光超聲探傷虛擬儀器設(shè)計(jì)研究[J].壓電與聲光,2011(4):654-656.
[6]張兢,李成勇,李雪梅,等.基于虛擬儀器技術(shù)的數(shù)字電路實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].重慶理工大學(xué)學(xué)報(bào):自然科學(xué)版,2011(6):33-37.
[7]楊亞讓,劉時(shí)進(jìn),魏繼濤.VRML在網(wǎng)絡(luò)實(shí)驗(yàn)教學(xué)中的應(yīng)用研究[J].軟件導(dǎo)刊,2008,7(12):207-209.
[8]蘇學(xué)軍,唐建華,李文,等.基于VRML技術(shù)的物理虛擬實(shí)驗(yàn)室的設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2009,26(9):67-69.
[9]劉華偉.V R ML三維實(shí)體的參數(shù)化建模[J].北京石油化工學(xué)院學(xué)報(bào),2007,15(3):26-29.
[10]陳斌,陸宇,張愛(ài)軍.3DS MAX模型在VRML中的數(shù)據(jù)簡(jiǎn)化[J].北京化工大學(xué)學(xué)報(bào),2008,35(4):86-89.
[11]徐長(zhǎng)青,許志聞.計(jì)算機(jī)圖形學(xué)[M].2版.北京.機(jī)械工業(yè)出版社,2010.
[12]李文新,慕德俊,馬動(dòng)濤,等.表達(dá)式求值在通用數(shù)據(jù)模擬器設(shè)計(jì)中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(6):2187-2192.
[13]胡開(kāi)明.基于.NET的發(fā)卷交卷系統(tǒng)設(shè)計(jì)[J].重慶工商大學(xué)學(xué)報(bào):自然科學(xué)版,2010(3):252-256.