基于VRML_JAVA的虛擬場景交互的實現(xiàn)_馬萬全
基于VRML/JAVA的虛擬場景交互的實現(xiàn)馬萬全1, 單美賢2(1.東南大學(xué)計算機科學(xué)與工程學(xué)院, 江蘇南京210096;2. 南京郵電大學(xué)傳媒技術(shù)學(xué)院, 江蘇南京210003)摘 要:Javra是一
基于VRML/JAVA的虛擬場景交互的實現(xiàn)
馬萬全1, 單美賢2
(1.東南大學(xué)計算機科學(xué)與工程學(xué)院, 江蘇南京210096;2. 南京
郵電大學(xué)傳媒技術(shù)學(xué)院, 江蘇南京210003)
摘 要:Javra是一個以EAI 為基礎(chǔ)的處理VRML 場景圖的Java 包, 克服了VRML 與Java 通過內(nèi)
部Script 節(jié)點和EAI 方式進行交互的不足:用戶操作實時生成的VRML 事件可以在Javra 中捕捉
到并加以處理。Javra 和VRML 瀏覽器的結(jié)合, 使得生成3D 交互應(yīng)用程序更有效。 關(guān)鍵詞:Java;VRML;EAI;Javra;場景圖
中圖分類號:TP311 文獻標識碼:A
VRML(Virtual Reality Modeling Language) 虛擬現(xiàn)實建模語言, 是一種三維造型和渲染的圖形描述性語
言。通過VRML, 人們可以建立豐富的三維場景, 但是VRML 本身并沒有直接和用戶進行交互的能力, 它
需要與其他評議結(jié)合才能實現(xiàn)三維場景和用戶交互的要求,Java 語言提供了這種可能性。本文主要論述
VRML 與Java 的交互方式和Javra 的使用。
1 VRML 與Java 之間的交互方式
VRML 產(chǎn)生事件的方式可以歸結(jié)為基于TimeSensor 的靜態(tài)行為和基于程序的動態(tài)行為兩種, 前者僅能
執(zhí)行預(yù)定的決策邏輯, 對于一些復(fù)雜的動畫動作、實時控制事件、智能推理能力等, 就需要其他編程語言(如
Java) 的支持, 當前主流VRML 瀏覽器也都對Java 編程提供了支持。在VRML 中使用Java 語言有兩種方
式, 即通過內(nèi)部Script 節(jié)點和外部編程接口(EAI)進行。
1.1 內(nèi)部Script 節(jié)點
圖1 利用Script 節(jié)點進行動畫設(shè)計的框圖
Script 節(jié)點支持VRMLScript 和
JavaScript(兩者通過內(nèi)置接口通信),
支持SUN 公司的Java, 其通過內(nèi)置接
口或者專用API 與VRML 通信。
Script 節(jié)點的URL 域可以包含一段
,JavaScript 程序或者是鏈接的一個JA-
V A class。利用Script 節(jié)點進行動畫
設(shè)計的過程可以用圖1表示:①通過
eventIn 將事件傳至Script 節(jié)點中的腳
本(Java或JavaScript); ②在腳本中進
行處理; ③通過eventOut 將結(jié)果送回
Script 節(jié)點。
通過Script 實現(xiàn)的動態(tài)場景中的事件(輸入和輸出) 均在VRML 內(nèi)部節(jié)點之間進行傳遞, 雖然可以實現(xiàn)
相應(yīng)瀏覽者的交互功能, 但對于與外界的信息交流包括信息的輸入和輸出卻顯得力不從心。
1.2 外部編程接口(External Authoring Interface)EAI
Script 節(jié)點從VRML 場景內(nèi)部提供了與Java 的連接, 而EAI 定義了與外部HTML 頁面中的Applet 通
信的接口。EAI 技術(shù)是利用定義的一套針對VRML 瀏覽器的Java 類實現(xiàn)對VRML 場景的控制, 它的基本
思想是將Java applet與VRML 置于同一web 頁面, 在Java applet中建立browser 對象以標識一個唯一的
VRML 場景, 并由此獲得對VRML 場景中已定義節(jié)點的引用, 它通過直接指定引用節(jié)點的域值而達到動態(tài)
效果。這樣Java applet即可控制VRML 場景, 也能進行與HTML 等其他媒體的交互以及網(wǎng)絡(luò)控制, 從而可
以實現(xiàn)復(fù)雜的虛擬環(huán)境系統(tǒng)。
圖2 EAI 的交互原理圖
圖2是EAI 的交互原理。A 、Brows-
er 類是對VRML 場景的一個Java 封裝,
通過getBrowser()方法獲得當前瀏覽環(huán)
境信息;B 、訪問某個節(jié)點產(chǎn)生要用
Browser 類的getNode()方法來獲得一個
Node 類實例;C 、在獲得Node 類實例后,
可以通過Node 類所提供的getEventIn()
和getEventOut()方法對節(jié)點進行訪問;
D 、如果需要在Applet 中實現(xiàn)VRML 節(jié)
點的動態(tài)增加和刪除, 就得利用到Brows-
er 類的一個方法:createVrmlFromString
()。此方法的參數(shù)是一個內(nèi)容符合
VRML 規(guī)范的字符串, 它返回一個Node
類的實例數(shù)組, 這些Node 實例是在VRML 場景的外部環(huán)境中生成的。E 、讀取VRML 場景中節(jié)點事件出
口所發(fā)出的最新值;F 、當VRML 場景中節(jié)點的事件出口發(fā)出一個事件時, 能得到一個通知, 激活callback 方
法。
VRML 瀏覽器通過EAI 與Java 程序進行通信,EAI 使得程序員可以控制VRML 世界, 然而EAI 不是
一個很方便的編程方式, 因為由Java 設(shè)計的節(jié)點不再能訪問, 或者說這些節(jié)點必須在VRML
,中被激活, 這
就使得用戶接口變得不友善, 我們可以通過Javra 加以改善。
2 Javra
圖3 Javra 和EAI 簡單的關(guān)系圖
Javra 是一個以EAI 為基礎(chǔ)的處理
VRML 場景圖的Java 包,VRML 瀏覽器
處理基本的3D 場景交互(如平移、旋轉(zhuǎn)
等),Javra 處理Java 程序和VRML 之間
的通信。Javra 和VRML 瀏覽器的結(jié)合,
使得生成3D 交互應(yīng)用程序更有效:具有
Javra 的VRML 場景圖支持VRML 節(jié)點
類和設(shè)置這些節(jié)點的方法, 因為這些節(jié)點
可以完全自動生成; 另外, 當用戶操作時
生成的VRML 事件可以在Javra 中捕捉
到并加以處理。
2.1 EAI 與Javra 的關(guān)系
圖3是Javra 和EAI 簡單的關(guān)系圖。
EAI 通過Node 類和Browser 類訪問
VRML 瀏覽器中的場景圖。在Javra 程序中生成本地的場景圖, 稱之為JavraNodes, 可以被其他文件或
VRML 瀏覽器訪問。在Javra 程序中, 場景圖中的每一個JavraNode 都對應(yīng)著瀏覽器中的一個節(jié)點, 當
JavraNode 發(fā)生改變時, 通過設(shè)置域值產(chǎn)生一個VRMLEvent 并發(fā)送到瀏覽器, 從而引起瀏覽器中相應(yīng)節(jié)點
的改變。與此相似, 瀏覽器能將VRML 事件(如用戶點擊了場景中的物體) 發(fā)送到應(yīng)用程序。
2.2 JavraNode
圖4 JavraNode 的層次關(guān)系示意圖
從Javra 包中可以獲得以下信息:節(jié)點
名; 域(域的屬性 eventIn...>、類型 MFNode...>、域名、默認值); 類的層次關(guān) 系。在Java 的類文件中為每一個exposed- Field 域的節(jié)點生成set_和get_方法。部分類 的層次關(guān)系如圖4所示(圖中加黑的節(jié)點是 新引入的節(jié)點), 所有的類都是JavraNode 的 子類。例如圖4中的Box 節(jié)點, 只有一個域 和一個set_和get_方法,Box 節(jié)點繼承于Ge- ometry, 因而可以作為Shape 節(jié)點的一個Ge- ometry 域值。 class Box extends Geometry{ float[]get_size(); void set_size(float[]a); } GroupingNode 節(jié)點是新節(jié)點, 其部分程序如下: class GroupingNode extends ChildrenNode{ void addChildren(ChildrenNode[]a); void set_Children(ChildrenNode[]a); ...... } 3 Javra 的使用 Javra 節(jié)點的使用和VRML 節(jié)點的使用一樣, 下面我們通過舉例來說明如何建立、輸出Javra 場景圖, 如 何與Javra 場景圖進行交互。 3.1 Javra 場景圖的生成 在VRML 中, 場景圖是由相關(guān)聯(lián)的節(jié)點形成的, 如Box 基本造型的形成如下: Shape{ geometry Box{size 1 2 1} appearance Appearance{ material Material{diffuseColor 1 0 0} } } 下面一段程序是相應(yīng)的Javra 代碼, 節(jié)點之間的連接是調(diào)用相應(yīng)的set_函數(shù)實現(xiàn)的。建立Javra 場景圖 需要有一定的VRML 知識, 一般而言,Javra 場景圖的生成如實地反映了VRML 場景圖的生成, 只是VRML 中的域名XXX(如appearance) 在Javra 中是通過調(diào)用set_XXX(set_appearance)方法實現(xiàn)的。 Material m=new Material(); m.set_diffuseColor(new float[]{1,0,0}); Appearance a=new Appearance(); a.set_material(m); Box b=new Box(); b.set_size(new float[]{1,2,1}); Shape s=new Shape(); s.set_geometry(b); s.set_appearance(a); 3.2 Javra 場景圖的輸出 Javra 場景圖可以輸出到支持EAI 接口的VRML 瀏覽器中或一個文件中(通過調(diào)用場景圖中上層節(jié)點 的print 方法實現(xiàn)) 。如果將Javra 場景圖輸出到瀏覽器中, 需要獲得相應(yīng)的瀏覽器句柄, 可以通過調(diào)用相應(yīng) 的EAI 方法實現(xiàn), 如browser.replaceWorld(new Node[]{s.getNode(browser)});語句。ReplaceWorld 方法是 再次調(diào)用browser nodes(Node[])的EAI 方法, 為了獲得相應(yīng)的節(jié)點,JavraNode 通過調(diào)用getNode(browser) 方法來建立一個Node 。 Javra 除了可以用場景圖取代虛擬世界外,Javra 中的節(jié)點也可以加到已經(jīng)存在的虛擬世界中, 代碼如下: Node n=browser.getNode(“TOP ”); JavraNode j=JavraNodeFactory.createJavraNode(browser,n); Group g=(Group)j; 借助EAI 獲得一個在VRML 世界中定義的瀏覽器節(jié)點, 如“TOP ”。節(jié)點n 可以通過JavraNodeFactory 類的createJavraNode 方法嵌入到JavraNode 的j 中。 3.3 與Javra 場景圖的交互 當場景圖輸出到瀏覽器后, 場景的動態(tài)部分既可以通過Javra 節(jié)點也可以通過瀏覽器節(jié)點使之改變。 用戶與場景的交互通過瀏覽器實現(xiàn), 應(yīng)用程序可以跟蹤在VrmlEvents 中的交互結(jié)果。Java 通過EAI 的 VrmlEventListener 接口類來監(jiān)聽瀏覽器的接收事件。例如, 對于TouchSensor 傳感器的touchTime 事件, Javra 代碼可以表示如下: TouchSensor ts=new TouchSensor(); ts.advise(“touchTime ”,listener,data); 其中參數(shù)listener 是一個VrmlEventListener 接口類的對象實例,data 是用戶指定的與該事件相關(guān)聯(lián)的 對象, 當該事件發(fā)生的時候,userData 就會一同被返回。 4 結(jié)束語 Java 的加入為VRML 提供了強大的編程能力以及網(wǎng)絡(luò)訪問能力, 使VRML 這種描述性語言對各種需 求功能的擴充成為可能。VRML 完成場景的描述和接口的定義, 真正的交互和高級應(yīng)用由Java 來完成。 Javra 和VRML 瀏覽器的結(jié)合, 使得生成3D 交互應(yīng)用程序更有效。正是由于Java 和VRML 的結(jié)合, 使它們 成為創(chuàng)建基于網(wǎng)絡(luò)的大規(guī)模虛擬環(huán)境的理想綜合平臺。 參考文獻 [1] 王汝傳, 等. 基于Java 和VRML 虛擬場景通信方式的研究[J].系統(tǒng)仿真學(xué)報,2003,(7). [2] 舍 曼, 等. 虛擬現(xiàn)實系統(tǒng)———接口、應(yīng)用與設(shè)計[M].北京:電子工業(yè)出版社,2004. [3] (美)Burdea, 等. 虛擬現(xiàn)實技術(shù)(第二版)[M].北京:電子工業(yè)出版社,2005. [4] 韋有雙, 等. 虛擬現(xiàn)實與系統(tǒng)仿真[M].北京:國防工業(yè)出版社,2004. Realization the Communication of Virtual Scenes Based on VRML/Java Ma Wan-Quan1,Shan Mei-Xian2 (1.Department ofComputer Science,South East University,Nanjing210096,China; 2.Nanjing UniversityofPosts and Telecommunications,Nanjing210003,China) Abstract:Javra is a Java package for handling VRMLscene graph.Javra isbased upon the external authoring in- terface(EAI).As programming tool between Java and VRML,Script node and EAI have some weaknesses, which can be overcome by Javra,for example,.after a user acted,VRML events generated real-time can be caught and handled in Javra.The combination of Javra and a VRMLbrowser forms an effective start for generat- ing 3D interactive applications. Key words:Java;VRML;EAI;Javra;scene graph 81第26卷 馬萬全, 單美賢:基于VRML/JAV A 的虛擬場景交互的實現(xiàn)