陳昭喜,許愛(ài)軍
1(廣州中醫(yī)藥大學(xué) 醫(yī)學(xué)信息工程學(xué)院,廣州 510006)
2(廣州鐵路職業(yè)技術(shù)學(xué)院 創(chuàng)新創(chuàng)業(yè)學(xué)院,廣州 510430)
作為信息技術(shù)新的增長(zhǎng)點(diǎn),虛擬現(xiàn)實(shí)技術(shù)(VR,Virtual Reality)在近年得到蓬勃發(fā)展.為克服純粹的場(chǎng)景模擬和單用戶操作帶來(lái)的缺陷,支持多用戶協(xié)同工作的協(xié)同虛擬環(huán)境成為當(dāng)前研究的熱點(diǎn)和難點(diǎn).
關(guān)于協(xié)同虛擬環(huán)境的研究,目前主要集中在多用戶協(xié)同工作的方法和技術(shù)方面,如協(xié)作模型、任務(wù)劃分方法,以及時(shí)間、空間一致性等,并已取得一些重要進(jìn)展.如文獻(xiàn)[1]提出基于VRML白板(VRML Whiteboard)的方法,使異地分布的用戶同步參與產(chǎn)品設(shè)計(jì)制作過(guò)程;文獻(xiàn)[2]建立一個(gè)面向教育者的分布式遠(yuǎn)程教育和交流交互平臺(tái),實(shí)現(xiàn)了協(xié)同虛擬環(huán)境在地理教學(xué)中的應(yīng)用;文獻(xiàn)[3]采用VRML Automation接口實(shí)現(xiàn)了虛擬模型協(xié)同設(shè)計(jì)和瀏覽的新方法;文獻(xiàn)[4]提出并實(shí)現(xiàn)了基于角色訪問(wèn)控制的分布式協(xié)同虛擬環(huán)境系統(tǒng)模型;文獻(xiàn)[5]構(gòu)建了一個(gè)多用戶協(xié)同工作的分布式虛擬環(huán)境等.可見(jiàn),協(xié)同虛擬環(huán)境能廣泛應(yīng)用到多個(gè)領(lǐng)域,在網(wǎng)絡(luò)化、虛擬化、集成化、智能化、標(biāo)準(zhǔn)化方面取得一些研究成果.但從現(xiàn)有文獻(xiàn)看,將協(xié)同虛擬環(huán)境應(yīng)用到物理實(shí)驗(yàn)教學(xué)的研究還相對(duì)較少.
物理實(shí)驗(yàn)是提高學(xué)生動(dòng)手實(shí)踐能力、加深理解物理原理的重要手段.在實(shí)驗(yàn)教學(xué)中,學(xué)生往往缺乏對(duì)儀器設(shè)備的基本認(rèn)知,導(dǎo)致實(shí)驗(yàn)操作效率低下.同時(shí),學(xué)生在預(yù)習(xí)實(shí)驗(yàn)時(shí)往往缺乏實(shí)驗(yàn)環(huán)境,導(dǎo)致預(yù)習(xí)效果不佳.為解決實(shí)驗(yàn)教學(xué)中的這些問(wèn)題,本文采用VRMLJS-Java通信機(jī)制,設(shè)計(jì)實(shí)現(xiàn)了具有協(xié)同交流功能的虛擬物理實(shí)驗(yàn)室,在實(shí)驗(yàn)教學(xué)中取得良好應(yīng)用效果,為大學(xué)實(shí)驗(yàn)教學(xué)改革提供了借鑒和案例.
虛擬物理實(shí)驗(yàn)室作為真實(shí)物理實(shí)驗(yàn)的有效補(bǔ)充,用戶進(jìn)入虛擬實(shí)驗(yàn)室后應(yīng)有身臨其境之感.為此,虛擬物理實(shí)驗(yàn)室要滿足以下需求:
(1)能真實(shí)展示物理實(shí)驗(yàn)室的整體環(huán)境和實(shí)驗(yàn)場(chǎng)景,如: 門(mén)、窗、書(shū)柜、試驗(yàn)臺(tái)、實(shí)驗(yàn)設(shè)備等;
(2)能逼真展示若干個(gè)虛擬實(shí)驗(yàn),如游標(biāo)尺測(cè)量等;
(3)在實(shí)驗(yàn)過(guò)程中能與其他用戶交流,協(xié)同完成部分實(shí)驗(yàn)內(nèi)容等;
(4)在漫游過(guò)程中能與環(huán)境進(jìn)行簡(jiǎn)單交互,如點(diǎn)擊門(mén)窗能開(kāi)關(guān)、點(diǎn)擊窗簾能升降等功能.
為滿足以上需求,將虛擬物理實(shí)驗(yàn)室分為實(shí)驗(yàn)室環(huán)境設(shè)計(jì)和三維人體設(shè)計(jì)兩大部分.其中,實(shí)驗(yàn)室環(huán)境設(shè)計(jì)包括裝潢設(shè)計(jì)(如: 門(mén)窗、黑板、天花)和設(shè)施設(shè)備設(shè)計(jì)(如: 課桌椅、試驗(yàn)臺(tái)、書(shū)柜),三維人體設(shè)計(jì)包含教師和學(xué)生人體設(shè)計(jì)等.本文選取物理實(shí)驗(yàn)室大門(mén)作為參照物,依照由外至內(nèi)、由下至上、從左至右的原則,形成虛擬場(chǎng)景層次結(jié)構(gòu)如圖1所示.
文獻(xiàn)[6,7]詳細(xì)闡述了VRML虛擬實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)流程,大體思路是: 首先在三維建模軟件中進(jìn)行物體模型設(shè)計(jì);其次用可視化編輯軟件將單個(gè)模型進(jìn)行合成;再次在VRML文本編輯工具中添加交互節(jié)點(diǎn);最后對(duì)模型文件進(jìn)行壓縮和優(yōu)化,并進(jìn)行發(fā)布,具體流程如圖2所示.
本文采用的三維建模工具是3D Studio Max、可視化編輯工具是CosmoWorld、VRML文本編輯工具是Vrmlpad、三維人體模型設(shè)計(jì)工具是Poser、預(yù)覽瀏覽器是Cortona VRML.
交互設(shè)計(jì)是虛擬實(shí)驗(yàn)系統(tǒng)最為核心的功能,本文采用的交互設(shè)計(jì)原理如圖3所示.
圖3 虛擬物理實(shí)驗(yàn)室的協(xié)同交流原理
構(gòu)建三維場(chǎng)景的目的是模擬真實(shí)物理實(shí)驗(yàn)室,營(yíng)造出一種更逼真的環(huán)境氛圍,大體可以分為實(shí)驗(yàn)室框架設(shè)計(jì)、裝潢設(shè)計(jì)、設(shè)施設(shè)備設(shè)計(jì)、視點(diǎn)燈光設(shè)計(jì)等.
虛擬實(shí)驗(yàn)室的整體空間是一個(gè)幾何立方體空間,本文采用多個(gè)Box節(jié)點(diǎn),分別為實(shí)驗(yàn)室四周的墻體、天花板進(jìn)行建模,然后“拼接”出一個(gè)長(zhǎng)為38.5、寬3、高16.6(均為VRML單位)的封閉幾何體作為實(shí)驗(yàn)室的整體框架.
實(shí)驗(yàn)室裝潢設(shè)計(jì)主要利用VRML的幾何節(jié)點(diǎn)(如:Box、Cone等)來(lái)設(shè)計(jì)裝潢幾何體的形狀及大小,利用外觀節(jié)點(diǎn)(Appearance)中的材質(zhì)節(jié)點(diǎn)(Material)定義裝潢幾何外觀的材料屬性.除窗戶的背景圖和黑板是通過(guò)文理包裝節(jié)點(diǎn)實(shí)現(xiàn)外,其他物件大多采用Box節(jié)點(diǎn)實(shí)現(xiàn),或是對(duì)它們分別建模后,通過(guò)Inline節(jié)點(diǎn)進(jìn)行連接,再設(shè)置translation、rotation和scale值,將坐標(biāo)、旋轉(zhuǎn)角度和縮放比例分別調(diào)整.
設(shè)計(jì)實(shí)驗(yàn)室設(shè)施設(shè)備之前,要先進(jìn)行取樣,以獲取真實(shí)模型的大小和尺寸,再對(duì)每個(gè)設(shè)施設(shè)備分別建模設(shè)計(jì).下面以實(shí)驗(yàn)椅子為例介紹模型構(gòu)建過(guò)程.
從幾何結(jié)構(gòu)看,實(shí)驗(yàn)椅子可以分解為塑料椅面、金屬支架、金屬底座和滑輪.椅面采用擴(kuò)展幾何體的“切角圓柱體”,金屬支架使用基本幾何體的“管狀體”,金屬底座使用基本幾何體的長(zhǎng)方體,滑輪使用一個(gè)切角圓柱體和擴(kuò)展幾何體的“紡錘”進(jìn)行組合.金屬支架的高度略大于椅子面的半徑,金屬底座中長(zhǎng)方體的長(zhǎng)度略小于金屬支架的半徑.創(chuàng)建完上述物體后,根據(jù)三視圖將各個(gè)物體進(jìn)行移動(dòng),然后根據(jù)實(shí)際更改物體的尺寸,得到如圖4所示效果圖.
圖4 實(shí)驗(yàn)椅的建模過(guò)程
然后,在前視圖中將金屬支架沿y軸向下旋轉(zhuǎn),調(diào)整滑輪位置,將支架和滑輪連接成組,克隆選項(xiàng)選擇為“實(shí)例”.最終效果圖如圖5所示.
所謂視點(diǎn)是指用戶的3D替身登錄虛擬物理實(shí)驗(yàn)室后能在各個(gè)位置觀察實(shí)驗(yàn)室中的設(shè)施設(shè)備,并根據(jù)個(gè)人意愿參與到實(shí)驗(yàn)中去.在虛擬實(shí)驗(yàn)室的場(chǎng)景中,用Viewpoint節(jié)點(diǎn)對(duì)場(chǎng)景進(jìn)行視點(diǎn)的設(shè)置.系統(tǒng)中設(shè)置3個(gè)視點(diǎn),分別是實(shí)驗(yàn)室后方視點(diǎn)、前方視點(diǎn)以及外部視點(diǎn).
圖5 建模后的椅子
燈光的作用是使虛擬物理實(shí)驗(yàn)室具備足夠的光線[8].本文的虛擬實(shí)驗(yàn)室設(shè)置了6束平行光,分別是x、y、z軸的正方向和負(fù)方向各3束.系統(tǒng)設(shè)置了一個(gè)LightSwitch的Script節(jié)點(diǎn).節(jié)點(diǎn)中設(shè)計(jì)了一個(gè)布爾類型的switch_changed出事件,當(dāng)switch_changed為true時(shí),打開(kāi)光源,相應(yīng)的域值發(fā)生變化;當(dāng)switch_changed為false時(shí),改變相應(yīng)的域值關(guān)閉光源.節(jié)點(diǎn)中與光源開(kāi)關(guān)相關(guān)的域值分別為SwitchOn和SwitchOff.
虛擬物理實(shí)驗(yàn)室的協(xié)同討論功能類似于聊天室,實(shí)現(xiàn)流程圖如圖6所示.
由于用戶間需要交流討論,服務(wù)器需要負(fù)責(zé)監(jiān)聽(tīng)客戶端的連接和實(shí)驗(yàn)系統(tǒng)的連接,采用Socket和線程來(lái)實(shí)現(xiàn)與客戶端的連接,并存儲(chǔ)在線用戶情況和客戶端連接服務(wù)器的請(qǐng)求情況.
服務(wù)器端主要由接受程序和分發(fā)程序組成.接收程序的主要功能是將監(jiān)聽(tīng)到的用戶交互信息、位置更新信息等存儲(chǔ)到服務(wù)器端;分發(fā)程序的主要功能是將收到的信息分發(fā)給其他用戶,以便實(shí)時(shí)感知其他用戶的狀態(tài)信息[9].除此之外,服務(wù)器端還包含用戶登錄界面和主要系統(tǒng)操作界面.登錄界面提供用戶注冊(cè)和登錄窗口,操作界面顯示用戶的個(gè)人信息、對(duì)系統(tǒng)的操作按鈕、與其他用戶間的討論內(nèi)容,以及虛擬討論場(chǎng)景的顯示等.
圖6 服務(wù)器端的程序流程圖
客戶端主要提供用戶的登錄和操作功能.本系統(tǒng)中,用戶主要分為教師和學(xué)生兩種類型.用戶登錄時(shí)可以選擇用戶類型.用戶在客戶端的操作界面中輸入用戶名、服務(wù)器主機(jī)的IP地址和服務(wù)程序的端口號(hào),點(diǎn)擊“連接”按鈕與服務(wù)器端進(jìn)行連接,即可進(jìn)入到虛擬物理實(shí)驗(yàn)室中;通過(guò)“斷開(kāi)”按鈕,與服務(wù)器端斷開(kāi)連接.客戶端也有一個(gè)用戶列表來(lái)顯示當(dāng)前系統(tǒng)上的在線用戶列表.其他用戶的位置可以在本用戶的Java控制臺(tái)上顯示,本用戶的行為也可以發(fā)送到其他用戶的Java控制臺(tái)上顯示,從而實(shí)現(xiàn)場(chǎng)景的一致性.
在協(xié)同多用戶系統(tǒng)中,用戶間要彼此感知狀態(tài)與行為的變化,通常利用VRML的Proxim-itySensor節(jié)點(diǎn)跟蹤用視點(diǎn)的移動(dòng)獲得位置和方向值.通過(guò)向其他用戶發(fā)送這個(gè)值的變化信息,其他用戶就能感知該用戶的移動(dòng)方向和變化狀態(tài).而當(dāng)用戶登錄或者退出時(shí),場(chǎng)景中的替身也會(huì)同步地增加或消失.
本文的虛擬實(shí)驗(yàn)系統(tǒng)采用開(kāi)放式的登錄方式,設(shè)置了用戶信息數(shù)據(jù)庫(kù)和用戶信息文本文件.用戶只要訪問(wèn)了包含有聊天討論Applet程序的HTML網(wǎng)頁(yè),與聊天程序的服務(wù)器進(jìn)行連接后,即可進(jìn)入實(shí)驗(yàn)室參與討論.用Socket和線程控制來(lái)實(shí)現(xiàn)多個(gè)用戶之間的協(xié)同交流.
在門(mén)、窗交互方面,系統(tǒng)定義了Touch觸摸傳感器、Time時(shí)間傳感器.當(dāng)單擊實(shí)驗(yàn)室入口的門(mén)板時(shí),信息被觸摸傳感器Touch獲取,通過(guò)事件路由ROUTE/TO將事件touchTime傳遞給事件startTime.將門(mén)板的坐標(biāo)位置信息進(jìn)行改變,完成開(kāi)門(mén)動(dòng)作;門(mén)開(kāi)動(dòng)作完成后,又通過(guò)事件路由ROUTE/TO將門(mén)的坐標(biāo)信息恢復(fù)到關(guān)閉狀態(tài),完成門(mén)的自動(dòng)關(guān)閉.
本文采用Java程序?qū)μ摂M場(chǎng)景進(jìn)行控制.JS是嵌套于網(wǎng)頁(yè)中的腳本語(yǔ)言,既可以訪問(wèn)VRML虛擬場(chǎng)景又可以訪問(wèn)Applet小程序,因此基于網(wǎng)頁(yè)腳本交互的基本思想,通過(guò)JS語(yǔ)言編寫(xiě)函數(shù)作為橋梁,采用VRMLJS-Java的通信機(jī)制實(shí)現(xiàn)VRML和Applet之間的通信.以JS為橋梁實(shí)現(xiàn)VRML與Java Applet之間參數(shù)傳遞的步驟及代碼如下.
第一步,用VRML文本編輯器在場(chǎng)景文件中添加Script節(jié)點(diǎn)和觸發(fā)器,對(duì)需要訪問(wèn)的節(jié)點(diǎn)用DEF定義名稱,在文件后端添加路由.在Script節(jié)點(diǎn)入事件處理函數(shù)中調(diào)用網(wǎng)頁(yè)腳本的代碼為:
Browser.loadURL(‘javascrip:fun(+參數(shù)+)’,’’);
其中,Browser為瀏覽器的對(duì)象實(shí)例,loadURL為瀏覽器的接口函數(shù),fun為腳本函數(shù)名.
第二步,分析各功能模塊及調(diào)用關(guān)系,設(shè)計(jì)Java Applet子類,編譯成目標(biāo)文件,兩項(xiàng)主要工作是:
一是引用jsobject包.由于項(xiàng)目實(shí)施中使用JDK1.6版本,高于1.4版本,jsobject包在plugin.jar中.需要將其加入到classpath中,以便能夠順利地在開(kāi)發(fā)時(shí)編譯.
二是調(diào)用JavaScript函數(shù).在Applet的init()方法中,可通過(guò)“win=JSObject.getWindow(this);”語(yǔ)句獲取JavaScript窗口句柄,引用當(dāng)前文檔窗口.有了win參數(shù),才可以調(diào)用JS的相應(yīng)函數(shù).在相應(yīng)的方法中,通過(guò)“win.eval(“javascript:方法名(“+參數(shù)+”)”);”語(yǔ)句,將獲得的參數(shù)傳遞到JS相應(yīng)的函數(shù)中,再由JS函數(shù)將得到的參數(shù)付給VRML虛擬場(chǎng)景中的相應(yīng)結(jié)點(diǎn),這樣便實(shí)現(xiàn)了對(duì)虛擬場(chǎng)景的控制.
第三步,在網(wǎng)頁(yè)源文件中添加VRML場(chǎng)景文件、Java Applet以及腳本函數(shù).加入網(wǎng)頁(yè)腳本函數(shù)一般有兩種類型,一種是加入的函數(shù)使VRML可以通過(guò)JS調(diào)用Applet小程序;另一種是定義VRML虛擬場(chǎng)景的引擎,獲得對(duì)虛擬場(chǎng)景的引用.
虛擬物理實(shí)驗(yàn)室設(shè)置了黑板、教師工作臺(tái)、學(xué)生課桌椅、兩個(gè)書(shū)柜、一臺(tái)空調(diào)、一臺(tái)飲水機(jī)以及門(mén)窗等模型.將這些模型組合完成后,可以采用微軟IIS服務(wù)器進(jìn)行發(fā)布,發(fā)布時(shí)將Web服務(wù)器的MIME類型設(shè)置為model/VRML,整體效果圖如圖7所示.
圖7 虛擬物理實(shí)驗(yàn)室內(nèi)部效果
在虛擬物理實(shí)驗(yàn)中設(shè)置了若干個(gè)實(shí)驗(yàn),用戶單擊試驗(yàn)臺(tái)上的相應(yīng)實(shí)驗(yàn),就調(diào)出實(shí)驗(yàn)系統(tǒng),圖8是游標(biāo)卡尺實(shí)驗(yàn)效果圖.在實(shí)驗(yàn)界面的左上角,設(shè)置了退出實(shí)驗(yàn)、查看讀數(shù)、退出讀數(shù)三個(gè)按鈕,在正上方設(shè)置了輸入讀數(shù)的文本框.
圖8 游標(biāo)卡尺實(shí)驗(yàn)效果
虛擬討論系統(tǒng)需要將VRML虛擬場(chǎng)景和Java Applet程序一起嵌套到HTML網(wǎng)頁(yè)文件中.用戶通過(guò)訪問(wèn)服務(wù)器主機(jī)上的HTML網(wǎng)頁(yè)文件,進(jìn)入到虛擬討論系統(tǒng)中.服務(wù)器端的程序要始終運(yùn)行,用戶方可連接服務(wù)器,實(shí)現(xiàn)與其他用戶的信息交流.HTML網(wǎng)頁(yè)的訪問(wèn)情況如圖9示.
為逼真模擬出虛擬物理實(shí)驗(yàn)室,我們?cè)趯?shí)驗(yàn)系統(tǒng)中添加了一些鼠標(biāo)交互動(dòng)作,如用鼠標(biāo)單擊窗簾,窗簾可拉開(kāi),再次單擊則窗簾關(guān)閉,實(shí)現(xiàn)效果如圖10所示;用鼠標(biāo)點(diǎn)擊實(shí)驗(yàn)大門(mén),大門(mén)可以打開(kāi),再次打擊則大門(mén)關(guān)閉,實(shí)現(xiàn)效果如圖11所示.
圖9 實(shí)驗(yàn)交流場(chǎng)景效果圖
圖10 窗簾交互效果
圖11 開(kāi)門(mén)交互效果
本文實(shí)現(xiàn)了一種具有協(xié)同交流功能的虛擬物理實(shí)驗(yàn)室,并具有以下特點(diǎn):
(1)具有操作簡(jiǎn)單、使用方便、逼真度高等特點(diǎn),用戶只需要下載VRML插件就可以訪問(wèn),實(shí)現(xiàn)對(duì)虛擬物理實(shí)驗(yàn)室的在線瀏覽;
(2)具有交流便利、協(xié)同工作的特點(diǎn),用戶登錄系統(tǒng)后通過(guò)選擇角色,可以實(shí)現(xiàn)師生之間的溝通交流,協(xié)同完成實(shí)驗(yàn)內(nèi)容;
(3)具有良好的層次性、可重用性和互操作性,支持跨平臺(tái)運(yùn)行,易于擴(kuò)展和維護(hù).
本文以JS為橋梁實(shí)現(xiàn)VRML與Java Applet之間傳遞參數(shù),從而實(shí)現(xiàn)了具有交流功能的虛擬物理實(shí)驗(yàn)室,解決了虛擬實(shí)驗(yàn)過(guò)程中學(xué)生交流不暢的問(wèn)題.在實(shí)驗(yàn)內(nèi)容上,目前僅完成游標(biāo)卡尺的測(cè)量,未來(lái)將增加其他物理實(shí)驗(yàn)內(nèi)容,并進(jìn)一步提升系統(tǒng)的伸縮性、兼容性和開(kāi)放性,這也是今后研究工作的重點(diǎn).