陳昭喜,許愛軍
1(廣州中醫藥大學 醫學信息工程學院,廣州 510006)
2(廣州鐵路職業技術學院 創新創業學院,廣州 510430)
作為信息技術新的增長點,虛擬現實技術(VR,Virtual Reality)在近年得到蓬勃發展.為克服純粹的場景模擬和單用戶操作帶來的缺陷,支持多用戶協同工作的協同虛擬環境成為當前研究的熱點和難點.
關于協同虛擬環境的研究,目前主要集中在多用戶協同工作的方法和技術方面,如協作模型、任務劃分方法,以及時間、空間一致性等,并已取得一些重要進展.如文獻[1]提出基于VRML白板(VRML Whiteboard)的方法,使異地分布的用戶同步參與產品設計制作過程;文獻[2]建立一個面向教育者的分布式遠程教育和交流交互平臺,實現了協同虛擬環境在地理教學中的應用;文獻[3]采用VRML Automation接口實現了虛擬模型協同設計和瀏覽的新方法;文獻[4]提出并實現了基于角色訪問控制的分布式協同虛擬環境系統模型;文獻[5]構建了一個多用戶協同工作的分布式虛擬環境等.可見,協同虛擬環境能廣泛應用到多個領域,在網絡化、虛擬化、集成化、智能化、標準化方面取得一些研究成果.但從現有文獻看,將協同虛擬環境應用到物理實驗教學的研究還相對較少.
物理實驗是提高學生動手實踐能力、加深理解物理原理的重要手段.在實驗教學中,學生往往缺乏對儀器設備的基本認知,導致實驗操作效率低下.同時,學生在預習實驗時往往缺乏實驗環境,導致預習效果不佳.為解決實驗教學中的這些問題,本文采用VRMLJS-Java通信機制,設計實現了具有協同交流功能的虛擬物理實驗室,在實驗教學中取得良好應用效果,為大學實驗教學改革提供了借鑒和案例.
虛擬物理實驗室作為真實物理實驗的有效補充,用戶進入虛擬實驗室后應有身臨其境之感.為此,虛擬物理實驗室要滿足以下需求:
(1)能真實展示物理實驗室的整體環境和實驗場景,如: 門、窗、書柜、試驗臺、實驗設備等;
(2)能逼真展示若干個虛擬實驗,如游標尺測量等;
(3)在實驗過程中能與其他用戶交流,協同完成部分實驗內容等;
(4)在漫游過程中能與環境進行簡單交互,如點擊門窗能開關、點擊窗簾能升降等功能.
為滿足以上需求,將虛擬物理實驗室分為實驗室環境設計和三維人體設計兩大部分.其中,實驗室環境設計包括裝潢設計(如: 門窗、黑板、天花)和設施設備設計(如: 課桌椅、試驗臺、書柜),三維人體設計包含教師和學生人體設計等.本文選取物理實驗室大門作為參照物,依照由外至內、由下至上、從左至右的原則,形成虛擬場景層次結構如圖1所示.
文獻[6,7]詳細闡述了VRML虛擬實驗系統的設計流程,大體思路是: 首先在三維建模軟件中進行物體模型設計;其次用可視化編輯軟件將單個模型進行合成;再次在VRML文本編輯工具中添加交互節點;最后對模型文件進行壓縮和優化,并進行發布,具體流程如圖2所示.
本文采用的三維建模工具是3D Studio Max、可視化編輯工具是CosmoWorld、VRML文本編輯工具是Vrmlpad、三維人體模型設計工具是Poser、預覽瀏覽器是Cortona VRML.
交互設計是虛擬實驗系統最為核心的功能,本文采用的交互設計原理如圖3所示.

圖3 虛擬物理實驗室的協同交流原理
構建三維場景的目的是模擬真實物理實驗室,營造出一種更逼真的環境氛圍,大體可以分為實驗室框架設計、裝潢設計、設施設備設計、視點燈光設計等.
虛擬實驗室的整體空間是一個幾何立方體空間,本文采用多個Box節點,分別為實驗室四周的墻體、天花板進行建模,然后“拼接”出一個長為38.5、寬3、高16.6(均為VRML單位)的封閉幾何體作為實驗室的整體框架.
實驗室裝潢設計主要利用VRML的幾何節點(如:Box、Cone等)來設計裝潢幾何體的形狀及大小,利用外觀節點(Appearance)中的材質節點(Material)定義裝潢幾何外觀的材料屬性.除窗戶的背景圖和黑板是通過文理包裝節點實現外,其他物件大多采用Box節點實現,或是對它們分別建模后,通過Inline節點進行連接,再設置translation、rotation和scale值,將坐標、旋轉角度和縮放比例分別調整.
設計實驗室設施設備之前,要先進行取樣,以獲取真實模型的大小和尺寸,再對每個設施設備分別建模設計.下面以實驗椅子為例介紹模型構建過程.
從幾何結構看,實驗椅子可以分解為塑料椅面、金屬支架、金屬底座和滑輪.椅面采用擴展幾何體的“切角圓柱體”,金屬支架使用基本幾何體的“管狀體”,金屬底座使用基本幾何體的長方體,滑輪使用一個切角圓柱體和擴展幾何體的“紡錘”進行組合.金屬支架的高度略大于椅子面的半徑,金屬底座中長方體的長度略小于金屬支架的半徑.創建完上述物體后,根據三視圖將各個物體進行移動,然后根據實際更改物體的尺寸,得到如圖4所示效果圖.

圖4 實驗椅的建模過程
然后,在前視圖中將金屬支架沿y軸向下旋轉,調整滑輪位置,將支架和滑輪連接成組,克隆選項選擇為“實例”.最終效果圖如圖5所示.
所謂視點是指用戶的3D替身登錄虛擬物理實驗室后能在各個位置觀察實驗室中的設施設備,并根據個人意愿參與到實驗中去.在虛擬實驗室的場景中,用Viewpoint節點對場景進行視點的設置.系統中設置3個視點,分別是實驗室后方視點、前方視點以及外部視點.

圖5 建模后的椅子
燈光的作用是使虛擬物理實驗室具備足夠的光線[8].本文的虛擬實驗室設置了6束平行光,分別是x、y、z軸的正方向和負方向各3束.系統設置了一個LightSwitch的Script節點.節點中設計了一個布爾類型的switch_changed出事件,當switch_changed為true時,打開光源,相應的域值發生變化;當switch_changed為false時,改變相應的域值關閉光源.節點中與光源開關相關的域值分別為SwitchOn和SwitchOff.
虛擬物理實驗室的協同討論功能類似于聊天室,實現流程圖如圖6所示.
由于用戶間需要交流討論,服務器需要負責監聽客戶端的連接和實驗系統的連接,采用Socket和線程來實現與客戶端的連接,并存儲在線用戶情況和客戶端連接服務器的請求情況.
服務器端主要由接受程序和分發程序組成.接收程序的主要功能是將監聽到的用戶交互信息、位置更新信息等存儲到服務器端;分發程序的主要功能是將收到的信息分發給其他用戶,以便實時感知其他用戶的狀態信息[9].除此之外,服務器端還包含用戶登錄界面和主要系統操作界面.登錄界面提供用戶注冊和登錄窗口,操作界面顯示用戶的個人信息、對系統的操作按鈕、與其他用戶間的討論內容,以及虛擬討論場景的顯示等.

圖6 服務器端的程序流程圖
客戶端主要提供用戶的登錄和操作功能.本系統中,用戶主要分為教師和學生兩種類型.用戶登錄時可以選擇用戶類型.用戶在客戶端的操作界面中輸入用戶名、服務器主機的IP地址和服務程序的端口號,點擊“連接”按鈕與服務器端進行連接,即可進入到虛擬物理實驗室中;通過“斷開”按鈕,與服務器端斷開連接.客戶端也有一個用戶列表來顯示當前系統上的在線用戶列表.其他用戶的位置可以在本用戶的Java控制臺上顯示,本用戶的行為也可以發送到其他用戶的Java控制臺上顯示,從而實現場景的一致性.
在協同多用戶系統中,用戶間要彼此感知狀態與行為的變化,通常利用VRML的Proxim-itySensor節點跟蹤用視點的移動獲得位置和方向值.通過向其他用戶發送這個值的變化信息,其他用戶就能感知該用戶的移動方向和變化狀態.而當用戶登錄或者退出時,場景中的替身也會同步地增加或消失.
本文的虛擬實驗系統采用開放式的登錄方式,設置了用戶信息數據庫和用戶信息文本文件.用戶只要訪問了包含有聊天討論Applet程序的HTML網頁,與聊天程序的服務器進行連接后,即可進入實驗室參與討論.用Socket和線程控制來實現多個用戶之間的協同交流.
在門、窗交互方面,系統定義了Touch觸摸傳感器、Time時間傳感器.當單擊實驗室入口的門板時,信息被觸摸傳感器Touch獲取,通過事件路由ROUTE/TO將事件touchTime傳遞給事件startTime.將門板的坐標位置信息進行改變,完成開門動作;門開動作完成后,又通過事件路由ROUTE/TO將門的坐標信息恢復到關閉狀態,完成門的自動關閉.
本文采用Java程序對虛擬場景進行控制.JS是嵌套于網頁中的腳本語言,既可以訪問VRML虛擬場景又可以訪問Applet小程序,因此基于網頁腳本交互的基本思想,通過JS語言編寫函數作為橋梁,采用VRMLJS-Java的通信機制實現VRML和Applet之間的通信.以JS為橋梁實現VRML與Java Applet之間參數傳遞的步驟及代碼如下.
第一步,用VRML文本編輯器在場景文件中添加Script節點和觸發器,對需要訪問的節點用DEF定義名稱,在文件后端添加路由.在Script節點入事件處理函數中調用網頁腳本的代碼為:
Browser.loadURL(‘javascrip:fun(+參數+)’,’’);
其中,Browser為瀏覽器的對象實例,loadURL為瀏覽器的接口函數,fun為腳本函數名.
第二步,分析各功能模塊及調用關系,設計Java Applet子類,編譯成目標文件,兩項主要工作是:
一是引用jsobject包.由于項目實施中使用JDK1.6版本,高于1.4版本,jsobject包在plugin.jar中.需要將其加入到classpath中,以便能夠順利地在開發時編譯.
二是調用JavaScript函數.在Applet的init()方法中,可通過“win=JSObject.getWindow(this);”語句獲取JavaScript窗口句柄,引用當前文檔窗口.有了win參數,才可以調用JS的相應函數.在相應的方法中,通過“win.eval(“javascript:方法名(“+參數+”)”);”語句,將獲得的參數傳遞到JS相應的函數中,再由JS函數將得到的參數付給VRML虛擬場景中的相應結點,這樣便實現了對虛擬場景的控制.
第三步,在網頁源文件中添加VRML場景文件、Java Applet以及腳本函數.加入網頁腳本函數一般有兩種類型,一種是加入的函數使VRML可以通過JS調用Applet小程序;另一種是定義VRML虛擬場景的引擎,獲得對虛擬場景的引用.
虛擬物理實驗室設置了黑板、教師工作臺、學生課桌椅、兩個書柜、一臺空調、一臺飲水機以及門窗等模型.將這些模型組合完成后,可以采用微軟IIS服務器進行發布,發布時將Web服務器的MIME類型設置為model/VRML,整體效果圖如圖7所示.

圖7 虛擬物理實驗室內部效果
在虛擬物理實驗中設置了若干個實驗,用戶單擊試驗臺上的相應實驗,就調出實驗系統,圖8是游標卡尺實驗效果圖.在實驗界面的左上角,設置了退出實驗、查看讀數、退出讀數三個按鈕,在正上方設置了輸入讀數的文本框.

圖8 游標卡尺實驗效果
虛擬討論系統需要將VRML虛擬場景和Java Applet程序一起嵌套到HTML網頁文件中.用戶通過訪問服務器主機上的HTML網頁文件,進入到虛擬討論系統中.服務器端的程序要始終運行,用戶方可連接服務器,實現與其他用戶的信息交流.HTML網頁的訪問情況如圖9示.
為逼真模擬出虛擬物理實驗室,我們在實驗系統中添加了一些鼠標交互動作,如用鼠標單擊窗簾,窗簾可拉開,再次單擊則窗簾關閉,實現效果如圖10所示;用鼠標點擊實驗大門,大門可以打開,再次打擊則大門關閉,實現效果如圖11所示.

圖9 實驗交流場景效果圖

圖10 窗簾交互效果

圖11 開門交互效果
本文實現了一種具有協同交流功能的虛擬物理實驗室,并具有以下特點:
(1)具有操作簡單、使用方便、逼真度高等特點,用戶只需要下載VRML插件就可以訪問,實現對虛擬物理實驗室的在線瀏覽;
(2)具有交流便利、協同工作的特點,用戶登錄系統后通過選擇角色,可以實現師生之間的溝通交流,協同完成實驗內容;
(3)具有良好的層次性、可重用性和互操作性,支持跨平臺運行,易于擴展和維護.
本文以JS為橋梁實現VRML與Java Applet之間傳遞參數,從而實現了具有交流功能的虛擬物理實驗室,解決了虛擬實驗過程中學生交流不暢的問題.在實驗內容上,目前僅完成游標卡尺的測量,未來將增加其他物理實驗內容,并進一步提升系統的伸縮性、兼容性和開放性,這也是今后研究工作的重點.