摘要:分析了在VRML中通過Script節(jié)點或EAI 使用Java語言來實現(xiàn)對虛擬世界的控制和場景交互的辦法,指出了它們的不足之處。在此基礎(chǔ)上,利用AJAX異步傳輸和數(shù)據(jù)處理的優(yōu)勢,提出一種基于AJAX的虛擬現(xiàn)實框架,并簡要給出了應(yīng)用實例說明。
關(guān)鍵詞:虛擬現(xiàn)實;VRML;Java;交互;AJAX
中圖分類號:TP309.05文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2008)06-10ppp-0c
Research on Interaction Application of Java, AJAX in Virtual Reality
QIU Qiaochun, MIN Lianying, XUE Ying
(School of Computer Science and Technology, Wuhan University of Technology, Wuhan 430063, China)
Abstract:Analyzes two means that importing Java language in VRML through the Script node or EAI to realize controlling virtual world and interaction in scenes, and then points out their deficiencies. In this foundation, this paper develops a new virtual reality frame based on AJAX by making full use of its superiorities, which include asynchronous transmission and data processing, and has given a application explanation briefly.
Key words:virtual reality;VRML;java;interaction;AJAX
虛擬現(xiàn)實與因特網(wǎng)技術(shù)的結(jié)合產(chǎn)生了虛擬現(xiàn)實建模語言(Virtual Reality Modeling Language,簡稱VRML),它可以與WWW一起使用,用來實現(xiàn)一個通過全球互聯(lián)網(wǎng)和超鏈接而形成的虛擬世界[1],從而滿足了人們對三維立體Web的迫切需求。
VRML被稱為繼HTML之后的第二代Web語言,是一種用于描述三維物體及其行為的建模語言,它可以構(gòu)建虛擬境界(Virtual World),并集成文本、圖像、音響、MPEG影像等多種媒體類型,還可以嵌入Vrmlscript、Java、Javascript等語言編寫的程序代碼。但VRML本身并沒有直接和用戶進(jìn)行交互的能力,它需要與其他語言結(jié)合才能實現(xiàn)三維場景和用戶交互的要求。本文分析了利用Java語言實現(xiàn)這種交互的可能,并進(jìn)一步論述了采用AJAX后三者的結(jié)合在因特網(wǎng)虛擬現(xiàn)實中的應(yīng)用。
1 VRML與Java結(jié)合
由于VRML本身不能完成普通程序設(shè)計中的分支、循環(huán)等基本特征,故它自身的交互機制是無法滿足用戶多種交互要求的需要。但VRML有自己的API(Application Programming Interface),這樣就為Java程序提供了可以訪問VRML瀏覽器的界面和可執(zhí)行的環(huán)境,并且在Java的vrml.node包中含有一個Script類,它是一個抽象類,通過對Script類的繼承,Java程序便可以與Script結(jié)點建立聯(lián)系,從而達(dá)到控制VRML其它結(jié)點的目的。Java對VRML的支持都是通過附加的封裝類來實現(xiàn)的[2] (這些類隨同VRML瀏覽器程序安裝在客戶機上)。通過封裝類,Java程序能夠訪問VRML場景、接受和發(fā)送事件、從頁面上得到VRML 對象,實現(xiàn)對VRML 場景的完全控制。VRML 中使用Java有兩大類方式:內(nèi)部Script節(jié)點和外部編程接口(EAI)。
1.1 通過內(nèi)部Script節(jié)點
Script節(jié)點是連接VRML和Java 的橋梁,其中的url字段是它與外部程序聯(lián)系的關(guān)鍵,url是WWW 上一個對象的完全地址,指出了外部程序所處的位置,不管是本地的或者是在網(wǎng)絡(luò)遠(yuǎn)端的合法程序都能被使用。甚至該字段的值能直接被賦為合法的源程序。例如,通過Java程序控制場景中球體運動的Script代碼如下:
Script{
url [ “Java/MoveBall. class” ]
eventIn SFBool clicked#輸入接口設(shè)置
eventOut SFTime start#輸出接口設(shè)置
……
} ROUTE … TO …
對于到達(dá)eventIn的事件(點擊/clicked)都將會自動傳送到url所指定的程序中,在Java中完成VRML與外界交互操作的程序編寫,然后編譯成class文件供VRML場景訪問。程序處理后通過eventOut(在initialize()函數(shù)內(nèi)初始化為Java的類成員)將得到的結(jié)果傳回Script節(jié)點執(zhí)行更新。圖1給出了交互過程的圖解說明。若還想用結(jié)果去影響場景中的其它實體,可以通過ROUTE事件連到(TO)路由鏈中的下一個節(jié)點。
圖1VRML與Java交互圖
Java與VRML通過Script節(jié)點的結(jié)合,簡單地說就是:(1)通過eventIn將事件傳至Script節(jié)點中url所指向的Java腳本;(2)在該腳本程序中進(jìn)行處理;(3)通過eventOut將結(jié)果送回Script節(jié)點。
1.2 通過外部編程接口EAI(External Authoring Interface)
VRML97標(biāo)準(zhǔn)提供了外部編程接口(External Authoring Interface),從而可以實現(xiàn)java小應(yīng)用程序類與VRML場景的通信。EAI還定義了外部環(huán)境通過VRML現(xiàn)存的事件驅(qū)動模式來訪問VRML內(nèi)部的節(jié)點的一系列方法。
Java主要使用Browser和Node兩個類(vrml.external包)及其它一些如處理eventIn域和eventOut域的各個屬性類(EventIn*、EventOut*),還有處理異常的各種Exception類完成對EAI的描述。該Browser類除了包含Brower類(vrml包)所有方法外,還提供了三個方法:getBrowser(Applet pApplet)、getBrowser(Applet pApplet,String frameName,int index)和getNode(String name)方法[3]。
有了vrml.external包中功能強大的Browser和Node類,所以可以甚至完全拋棄Script節(jié)點和Script類甚至路由,而對VRML世界的各種節(jié)點即Node類的各個實例直接操控。但此方法的局限性:由于getBrowser()方法的參數(shù)必須是Applet的實例,因而該方法只能通過Java程序來控制VRML世界。
2 引入AJAX后的三者結(jié)合
VRML與Java直接結(jié)合的兩種方法較好地解決了VRML場景與外部交互的問題,但也存在一些不足之處:客戶端都需要安裝虛擬機(方法一中是class文件,方法二為Applet程序)并配置環(huán)境變量;網(wǎng)頁中嵌入Applet的方式還可能會威脅客戶端的安全,許多客戶端都限制網(wǎng)頁對Applet的運行;將Java程序從服務(wù)器下載至客戶端執(zhí)行增加了許多網(wǎng)絡(luò)流量?;诖朔N情況,筆者通過引入目前成熟而具有強大優(yōu)勢的AJAX技術(shù),以AJAX作為中間橋梁設(shè)計一種全新的交互應(yīng)用方案。
當(dāng)前因特網(wǎng)是一個請求-響應(yīng)的循環(huán)系統(tǒng),瀏覽器與服務(wù)器的交互采用的是同步方式,在服務(wù)器響應(yīng)過程中,用戶能做的只有等待。用戶向服務(wù)器發(fā)出一個http請求或在需要刷新頁面中的某部分內(nèi)容時,無論用戶是否愿意,服務(wù)器都將返回全部頁面內(nèi)容??梢娫谕浇换シ绞街校壤速M了用戶的時間也浪費了許多網(wǎng)絡(luò)帶寬。AJAX(Asynchronous Javascript And XML)的出現(xiàn),使得部分提交、異步傳輸成為可能,它提供高度交互的Web 應(yīng)用,甚至與桌面應(yīng)用相差無幾,而且能夠在所有當(dāng)前流行的Web瀏覽器上部署而無需特殊的插件。
事實上,AJAX并不是一門新的語言或技術(shù),它是幾項技術(shù)互相協(xié)作而形成的一個功能強大的新方法[4-5],包括:使用XHTML和CSS標(biāo)準(zhǔn)化呈現(xiàn);使用文檔對象模型 (Document Object Model,簡稱DOM)實現(xiàn)動態(tài)顯示和交互;使用XML和XSLT進(jìn)行數(shù)據(jù)交換與處理;使用XMLHttpRequest進(jìn)行異步數(shù)據(jù)讀??;最后用Javascript綁定和處理所有數(shù)據(jù)。其中XMLHttpRequest、Javascript和DOM是AJAX技術(shù)的核心,而VRML對Javascript的完全支持即成為其引入AJAX的關(guān)鍵所在。
2.1 基于AJAX的虛擬現(xiàn)實框架設(shè)計
AJAX的根本理念是“按需取數(shù)據(jù)”,所以最大可能地減少了冗余請求和響應(yīng)對服務(wù)器空間和帶寬造成的負(fù)擔(dān),同時也可以把原本需要服務(wù)器要做的許多事情放到客戶端來做。
相比平面結(jié)構(gòu)的Web,虛擬現(xiàn)實的三維場景模型(*.wrl或*.wrz)通常都是數(shù)據(jù)量較大的文件,如果每次用戶的請求都使用同步方式進(jìn)行傳輸,則需要更多的時間等待服務(wù)器的響應(yīng)。使用AJAX以后,用戶與場景的交互通過發(fā)送XMLHttpRequest請求來實現(xiàn),從而可以有選擇有目的性地進(jìn)行數(shù)據(jù)的異步傳送,即在不需更新整個三維場景頁面的情況下完成請求的響應(yīng),這個過程中用戶所面對的不是白屏,而仍可進(jìn)行其他操作。從服務(wù)器響應(yīng)到客戶端的更新,由于傳輸?shù)臄?shù)據(jù)量小,所以更新是相當(dāng)即時的,用戶幾乎不需要等待時間。
基于AJAX的虛擬現(xiàn)實系統(tǒng)框架設(shè)計如圖2所示。該框架避免了在VRML中直接調(diào)用Java程序(需要客戶端來執(zhí)行class文件或Applet程序),而將功能強大的Java運用到后臺服務(wù)器上。具體過程為:(1)用戶的操作通過VRML腳本Script節(jié)點中的Javascript調(diào)用XMLHttpRequest對象發(fā)出請求;(2)AJAX引擎完成響應(yīng)該函數(shù)調(diào)用,負(fù)責(zé)將對數(shù)據(jù)或事務(wù)的請求傳給應(yīng)用服務(wù)器;(3)服務(wù)器接收AJAX引擎發(fā)送的Http請求,調(diào)用相應(yīng)的Java程序進(jìn)行處理;(4)后臺程序或通過JDBC引擎與數(shù)據(jù)庫(用戶數(shù)據(jù)庫、屬性數(shù)據(jù)庫)產(chǎn)生數(shù)據(jù)交互,或從場景庫提取相應(yīng)場景實體,以XML格式的形式送回;(5)AJAX接收XML數(shù)據(jù)并將其轉(zhuǎn)換成VRML后[6],由安裝在瀏覽器中的VRML解釋器處理得到最后場景的更新。
圖2 基于AJAX的虛擬現(xiàn)實系統(tǒng)框架設(shè)計圖
可見,AJAX的引入,在克服傳統(tǒng)虛擬現(xiàn)實系統(tǒng)諸多不足的基礎(chǔ)上,充分利用了AJAX的異步傳輸和數(shù)據(jù)處理能力,并使基于該框架的虛擬現(xiàn)實系統(tǒng)具備更多的優(yōu)勢。首先,在更新部分場景時無須進(jìn)行全部場景數(shù)據(jù)的傳輸,極大地減少了網(wǎng)絡(luò)帶寬的占用;其次,對數(shù)據(jù)的部分處理(例如XML到VRML格式的轉(zhuǎn)換)轉(zhuǎn)移到客戶端執(zhí)行,減輕了服務(wù)器的負(fù)擔(dān);最后,交互即時性的改善能讓使用者得到前所未有的用戶體驗。
虛擬現(xiàn)實系統(tǒng)中使用較多的整個場景的切換是通過錨點(VRML中的anchor節(jié)點)來實現(xiàn)的,由于只在瀏覽器與服務(wù)器場景庫之間產(chǎn)生數(shù)據(jù)的直接傳遞,過程簡單而直觀,本系統(tǒng)框架不再給予說明。
2.2 應(yīng)用實例
實例是一個采用了Java和AJAX技術(shù)的虛擬展銷平臺系統(tǒng),該平臺系統(tǒng)以三維仿真模型向用戶顯示展銷物品,用戶進(jìn)入展廳后可以根據(jù)自己的愛好瀏覽任一展銷產(chǎn)品及其詳細(xì)信息。當(dāng)用戶想了解展臺某產(chǎn)品更多信息時,點擊該產(chǎn)品或“查看詳情”按鈕,瀏覽器發(fā)出相應(yīng)異步請求至服務(wù)器。服務(wù)器響應(yīng)該請求的過程中,用戶可繼續(xù)在展廳“活動”,瀏覽其他產(chǎn)品。應(yīng)用服務(wù)器根據(jù)請求和傳遞來的參數(shù)完成對數(shù)據(jù)庫或場景庫實體的提取并送回用戶端瀏覽器進(jìn)行更新。這樣,用戶可以在不需要“專門”等待的情況下看到剛才點擊產(chǎn)品的詳細(xì)信息。圖3為該虛擬展銷平臺系統(tǒng)的效果圖。
圖3 虛擬展銷平臺系統(tǒng)效果圖
3 結(jié)束語
VRML中引用Java程序可以得到許多其自身不能實現(xiàn)的場景交互,若將Java用于后臺,通過AJAX作為兩者聯(lián)系的紐帶,即在客戶端和服務(wù)器之間增加一個中間層—AJAX引擎,不僅避免了兩者直接結(jié)合的不足之處,而且異步傳輸方式也大大改觀了虛擬現(xiàn)實交互的真實性和響應(yīng)速度。此外,XML的使用很好地解決了數(shù)據(jù)存儲與傳輸問題。
參考文獻(xiàn):
[1]閔聯(lián)營,鄧清珊.虛擬現(xiàn)實及其應(yīng)用[J].交通與計算機, 2000,18(5):41-44.
[2]汪興謙. VRML與Java編程實例講解[M]. 北京:中國水利水電出版社,2002:83-111.
[3]王汝傳.基于Java和VRML虛擬場景通信方式的研究[J].系統(tǒng)仿真學(xué)報, 2003,15(7):986-989.
[4]Jesse James Garrett. Ajax: A New Approach to Web Applications[EB/OL].http://www.adaptivepath.com/ideas/essays/archives/000385.php,2005-2.
[5]游麗貞,郭宇春,李純喜. AJAX引擎的原理和應(yīng)用[J]. 微計算機信息, 2006,22(2-3):205-207.
[6]陳婷,周家紀(jì),楊寧. 基于VRML-AJAX的分布式虛擬現(xiàn)實應(yīng)用[J].微電子學(xué)與計算機, 2006,23(S1): 272-274.
收稿日期:2008-01-12
作者簡介:邱橋春(1982-),男,湖南省祁東人,碩士研究生,研究方向為計算機網(wǎng)絡(luò)技術(shù);閔聯(lián)營(1956-),男,副教授,湖北省武漢人,主要研究方向為計算機網(wǎng)絡(luò)、嵌入式系統(tǒng);薛穎(1983-),女,湖北省武漢人,碩士研究生,主要研究方向為計算機網(wǎng)絡(luò)技術(shù)。