摘要:以實現(xiàn)CSCW為目標(biāo),在不改變現(xiàn)有網(wǎng)絡(luò)帶寬和網(wǎng)絡(luò)協(xié)議的前提下,設(shè)計了基于VRML的網(wǎng)絡(luò)虛擬現(xiàn)實的系統(tǒng)結(jié)構(gòu)和工作流程,深入研究了主要關(guān)鍵技術(shù)。通過利用細節(jié)層次模型和按需傳輸方法,實現(xiàn)了用戶工作空間的快速生成,滿足了低帶寬要求;通過構(gòu)建多用戶通信環(huán)境和構(gòu)造通信數(shù)據(jù)包,保證了網(wǎng)絡(luò)通信的實時性,實現(xiàn)了WYSIWIS效果;通過引入操作令牌思想和碰撞檢測技術(shù),解決了多個用戶同時對某個對象操作而引發(fā)沖突的問題,實現(xiàn)了對象模型的協(xié)同并行控制。最后給出了應(yīng)用實例。
關(guān)鍵詞:虛擬現(xiàn)實;虛擬現(xiàn)實建模語言;協(xié)同工作;分布式虛擬環(huán)境;關(guān)鍵技術(shù)
中圖分類號:TP391.9 文獻標(biāo)識碼:A 文章編號:1007-9599 (2012) 10-0000-02
一、網(wǎng)絡(luò)虛擬現(xiàn)實系統(tǒng)
(一)系統(tǒng)結(jié)構(gòu)
在研究網(wǎng)絡(luò)虛擬現(xiàn)實基本特征和功能要求基礎(chǔ)上,構(gòu)建了如圖1所示的體系結(jié)構(gòu),系統(tǒng)分為功能層、交互層和數(shù)據(jù)層。其中功能層位于客戶端,提供分布式用戶工作空間、用戶替身和交流白板,實現(xiàn)客戶端用戶工作的可視化。交互層位于應(yīng)用服務(wù)器端,主要生成多用戶工作空間、控制各類信息傳遞,并實現(xiàn)多用戶的協(xié)同交互。數(shù)據(jù)層位于信息服務(wù)器端,由用戶數(shù)據(jù)庫和模型數(shù)據(jù)庫構(gòu)成。分層結(jié)構(gòu)使系統(tǒng)具有良好的靈活性、擴展性和可維護性。
(二)工作流程
客戶端不斷監(jiān)聽與接收應(yīng)用服務(wù)器端的信息,支持用戶在工作空間中進行各種操作,并及時將用戶信息提交到服務(wù)器進行處理。用戶登錄時,執(zhí)行Script類的initialize方法,建立與服務(wù)器端的連接,創(chuàng)建監(jiān)聽服務(wù)器以及用戶操作線程,并加載用戶工作空間到客戶端??蛻舳伺c服務(wù)器端的通訊通過Java通訊軟件層實現(xiàn),后面將對這個關(guān)鍵技術(shù)進行詳細闡述。用戶注銷時,調(diào)用shutdown方法刪除監(jiān)聽服務(wù)器和用戶操作線程,撤銷與服務(wù)器端的連接。
應(yīng)用服務(wù)器根據(jù)用戶需求,生成用戶工作空間,并根據(jù)用戶的請求類型,對虛擬環(huán)境中的物體或物體的屬性進行查詢和修改,實現(xiàn)共享空間的一致性維護。用戶在空間工作時,若改變了場景內(nèi)容、屬性,甚至需要刷新其他用戶的工作空間,并不急于呈現(xiàn)交互的結(jié)果,而是交由服務(wù)器處理。服務(wù)器首先比較用戶的操作權(quán)限、實體的屬性、處理的優(yōu)先級等策略,并將這個事件插入相應(yīng)的處理隊列中。服務(wù)器不斷處理隊列中的事件,當(dāng)事件成功處理后再更新VRML模型數(shù)據(jù)庫,并將更新信息分發(fā)給其他用戶。若事件處理失敗,服務(wù)器將向提交該事件的用戶發(fā)送出錯提示信息。
二、關(guān)鍵技術(shù)
(一)生成用戶工作空間
在網(wǎng)絡(luò)虛擬現(xiàn)實中,整個虛擬空間的數(shù)據(jù)量非常龐大。在現(xiàn)有網(wǎng)絡(luò)條件下,若要每個用戶下載整個虛擬空間到客戶端,是沒有必要和不現(xiàn)實的。本系統(tǒng)利用細節(jié)層次模型LOD和按需傳輸方法,實現(xiàn)了用戶虛擬空間的快速生成,具體實現(xiàn)步驟如下:
step1 用戶登錄應(yīng)用服務(wù)器后,立即向應(yīng)用服務(wù)器發(fā)送請求,通知其所需文件的URL;
step2 應(yīng)用服務(wù)器接到請求后,與信息服務(wù)器交互,下載對應(yīng)的VRML文件;
step3 應(yīng)用服務(wù)器隨后以VRML文件的語法結(jié)構(gòu)為依據(jù),按照結(jié)點的嵌套層次逐步讀取和分析文件,并以前序遍歷、深度優(yōu)先的方式為文件建立語法樹,構(gòu)造場景描述圖,并將該場景描述圖傳給客戶端;
step4 客戶端提供操作VRML 層次結(jié)構(gòu)的交互界面,用戶選擇所需要的那部分場景;
step5 用戶選擇后,客戶端將選擇結(jié)果作為服務(wù)請求發(fā)送到應(yīng)用服務(wù)器,應(yīng)用服務(wù)器利用先前對VRML文件的分析,分離出用戶所需的場景單元,生成”子VRML”{sub-VRML}文件,并根據(jù)需要將生成的“子VRML”文件加入LOD控制;
step6 應(yīng)用服務(wù)器將這些帶功能擴展的“子VRML”文件傳送給客戶端,并在客戶端顯示出來。
用戶在虛擬空間中用替身(Avatar)表示,系統(tǒng)用VRML原型(PROTO)定義客戶對象,通過傳感器ProximitySensor跟蹤替身的方位。同時,替身之間通過文本和動畫進行交流,用文本框控件輸入文本,通過Script節(jié)點控制TimeSensor傳感器,進而控制OfientadonInterpolator傳感器和PositionInterpolator傳感器動態(tài)改變替身的方位[4],實現(xiàn)點頭、微笑等動畫效果。
(二)建立多用戶通訊環(huán)境
系統(tǒng)中,多用戶虛擬環(huán)境之間的通訊由Java通訊軟件層實現(xiàn)。由于VRML不是一種編程語言,不支持多用戶環(huán)境所必須的共享行為和環(huán)境狀態(tài)的連續(xù)性,其網(wǎng)絡(luò)通訊和分布式控制能力需要借助與Java語言的結(jié)合來實現(xiàn)。有2種結(jié)合方式,即通過內(nèi)部Script節(jié)點(Script Authoring Interface,SAI)和外部編程接口(External Authoring Interface,EAI)。使用EAI可以在JavaApplet中輸入各種參數(shù)以改變場景的內(nèi)容,控制靈活,但它不是真正意義上的分布式控制;SAI方式不需要有JavaApplet的存在,只要為場景中的物體寫相應(yīng)的腳本代碼即可。利用Script節(jié)點的這一特點,可用Java編寫成腳本語言,將Java的網(wǎng)絡(luò)功能和文件訪問功能引入到虛擬場景中,使其引用的Java語言通過TCP/IP協(xié)議接收網(wǎng)絡(luò)數(shù)據(jù),并用網(wǎng)絡(luò)數(shù)據(jù)控制虛擬環(huán)境中對象的屬性,從而建立起多用戶通訊環(huán)境。
在此模型下,Java通訊軟件層的實現(xiàn)首先進行2個預(yù)處理,即在Script的事件入口處理函數(shù)processEvent()中,增加起動一條新線程的語句;在線程執(zhí)行函數(shù)run()中,加入提供socket服務(wù)器服務(wù)的語句。這樣,當(dāng)VRML分場景接收到事件入口socketPort時,Script節(jié)點通過事件處理函數(shù)起動一個新的線程。在該線程中,程序運行了socket服務(wù)器。socket服務(wù)器循環(huán)感應(yīng)網(wǎng)絡(luò)連接請求,當(dāng)有請求到來時,socket服務(wù)器進行連接,這樣在VRML場景與外界間就形成一條通路,VRML場景就可以通過這條路經(jīng)與外界進行通訊。同樣,外界來的數(shù)據(jù)也通過這條通路送到VRML場景中,在Script節(jié)點處產(chǎn)生新的事件,經(jīng)過路由又送回VRML場景中的其它節(jié)點中。為了實現(xiàn)客戶端的主動請求連接功能,可在Script的事件入口處理函數(shù)processEvent()中加入提供socket客戶服務(wù)的語句“Socket client=new Socket(Host,Port);”,主動與外界服務(wù)器建立連接。至此,多用戶環(huán)境的底層通訊就暢通了。
(三)構(gòu)建通信數(shù)據(jù)包
在網(wǎng)絡(luò)虛擬現(xiàn)實中,為了實現(xiàn)WYSIWIS效果,必需構(gòu)建高效的通信數(shù)據(jù)包并有效傳輸,才能使所有用戶獲得的信息保持一致。系統(tǒng)主要構(gòu)建了2種通信數(shù)據(jù)包滿足這個要求。
一種是操作數(shù)據(jù)包,即用戶在虛擬空間工作時產(chǎn)生的數(shù)據(jù)信息(用戶操作的對象,操作的類型,操作的結(jié)果),如用戶的加入或退出,替身移動或轉(zhuǎn)向,替身自身動作,創(chuàng)建或刪除一個物體,對物體進行移動(旋轉(zhuǎn)、縮放、改變顏色)變換處理,對物體進行鎖定或解鎖等,形成一個請求數(shù)據(jù)包VPacket(操作對象類型VKIND、操作對象序號VID、操作類型VIP、操作的數(shù)據(jù)類型Vfiled、操作的數(shù)據(jù)值value),這個數(shù)據(jù)包傳送到服務(wù)器進行處理后,服務(wù)器會產(chǎn)生一個結(jié)構(gòu)相同的響應(yīng)數(shù)據(jù)包,并傳回給該用戶。
三、應(yīng)用實例
我們在校園網(wǎng)分布式虛擬環(huán)境下,實現(xiàn)了一個多用戶協(xié)同組裝電腦的原型系統(tǒng)。用戶登錄實驗系統(tǒng)后,系統(tǒng)為每個用戶生成自己的工作空間,用戶在工作空間中搬動電腦配件并安裝到主板的相應(yīng)位置。在搬動配件之前,用戶需要申請自己的工作任務(wù)以確定安裝哪個設(shè)備,當(dāng)每個用戶成功安裝設(shè)備后,即時發(fā)送信息提示其他用戶。系統(tǒng)檢測所有配件的安裝情況,以決定是否完成協(xié)同工作的任務(wù)。實驗場景與電腦配件用3DS MAX創(chuàng)建,用戶替身采用Poser繪制,導(dǎo)出的VRML文件在CosmoWorlds中修改并添加交互。系統(tǒng)采用集中式數(shù)據(jù)庫方式,主要存儲電腦配件設(shè)備的參數(shù)信息和用戶信息,與數(shù)據(jù)庫的連接采用JDBC實現(xiàn)。
四、結(jié)束語
本文以實現(xiàn)CSCW為目標(biāo),在不改變現(xiàn)有網(wǎng)絡(luò)帶寬和網(wǎng)絡(luò)協(xié)議的前提下,解決了VRML網(wǎng)絡(luò)虛擬現(xiàn)實系統(tǒng)中用戶虛擬空間的快速生成、VRML場景的實時通訊、多用戶操作的協(xié)同控制等問題,深入研究了關(guān)鍵技術(shù),并以網(wǎng)絡(luò)環(huán)境中協(xié)同組裝電腦為例進行了實現(xiàn)。為了實現(xiàn)真正高效、大規(guī)模的分布式虛擬現(xiàn)實,還需要在模型的優(yōu)化、多用戶業(yè)務(wù)規(guī)則的協(xié)同策略、協(xié)同工作過程的觸發(fā)策略、突發(fā)事件的處理等方面作進一步研究,這也是我們今后研究工作的重點。
參考文獻:
[1]許愛軍,張文金,易丹.基于虛擬現(xiàn)實技術(shù)的遠程教育平臺研究與實現(xiàn)[J].計算機系統(tǒng)應(yīng)用,2007,8:23-26
[2]沈江瑋,陳天滋.基于多用戶環(huán)境下的VRML系統(tǒng)框架[J].計算機工程與設(shè)計,2005,26(10):2654-2656