999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于VRML與Java的虛擬場景交互研究與實現

2008-12-31 00:00:00陳莉娟
電腦知識與技術 2008年25期

摘要:單純的虛擬現實建模語言(VRML)只能實現靜態的三維場景或簡單的交互,通過VRML語言與Java程序的結合,可以充分利用Java所具有的復雜處理能力和VRML建立三維場景的能力,從而實現動態的、交互的復雜VRML場景。首先就VRML與Java結合的方法進行了研究,然后討論了Java和VRML的通信原理,最后通過具體實例來闡述了如何通過EAI接口來實現VRML場景與外部世界的交互技術和實現方法,以體現兩者的高效結合對三維虛擬場景建模的積極意義。

關鍵詞:虛擬現實建模語言;Java;外部授權接口;動態交互;三維場景

中圖分類號:TP317文獻標識碼:A文章編號:1009-3044(2008)25-1560-03

Studies and Realization the Communication of Virtual Scenes Based on VRML and Java

CHEN Li-juan, ZHAN Lin

(College of Computer Science and Engineering, Anhui University of Science and Technology, Huainan 232001, China)

Abstract: Using virtual reality modeling language can only realize static three-dimensional scenes or simple interaction, Dynamic and complex VRML scenes interaction can be realized through the combination of VRML and Java, which makes good use of the computing ability of Java and the modeling three-dimensinal scenes ability of VRML. This thesis researches the way that VRML and Java combine at first, and then analyses their communication protocal, expounds the interaction between VRML and the outside through the EAI external interface and the how to realize it at last, which in order to reflect the realistic significance brought about by the perfect combination of Java and VRML.

Key words: VRML; java; EAI; dynamic interaction; three-dimensional scenes

1 引言

VRML[1]是一種虛擬現實建模語言,它的基本目標是建立因特網上的交互式三維多媒體,它以因特網作為應用平臺,作為構筑虛擬現實應用的基本構架。但是VRML本身與用戶進行交互的能力有限,它需要與其它語言結合才能實現三維場景和用戶交互的要求,Java提供了這種可能性。Java是一種跨平臺的編程語言,通過Java編寫的Applet在網上可以直接運行,非常適合于因特網上虛擬現實環境。VRML著重于虛擬場景中對象的特征,不太考慮對象行為,而Java主要討論對象行為,很少涉及外部特征,二者相互作了很好的補充,因此VRML與Java的結合,是實現較復雜動態場景控制等高級交互功能的有效方法[2-4]。

2 Java程序與VRML場景間的交互

VRML有支持它自己的API(Applicatio Programming Interface),這樣就提供給Java程序一個可以訪問VRML瀏覽器的界面和可執行的環境。Java對VRML的所有支持都是通過附加的封裝類實現。根據訪問方式的不同,可以分為外部授權接口EAI[5]訪問和腳本授權接口SAI訪問[6]。

2.1 EAI(External Authoring Interface)外部授權接口訪問

EAI是一種介于VRML世界與外部環境的授權接口,通過EAI為VRML與外部環境Java Applet建立一個通信接口[7],使用戶通過這個接口真正成為VRML中的一個角色、一個參與者。EAI流程如圖1所示。

EAI類被包含在vrml.external包中,在這個包中包含了所有用于進入VRML場景的類和方法。在進入VRML場景之前,必須首先得到它的Browser類的一個實例。通過調用Browser類的靜態方法getBrowser()來實現,在Java Applet中建立Browser對象后即標識了一個VRML場景。Browser類是對VRML場景的一個Java封裝。它不僅包含了獲取當前瀏覽器環境信息的各種方法,還有getNode()方法用來直接獲得VRML場景中使用DEF關鍵字定義的Node類實例。在獲得Node類實例后調用Node類所提供的getEventIn()、getEventOut()獲得事件輸入、輸出的實例,改變事件輸入值相當于改變場景達到動態效果。

通過Browser和Node類,可以拋棄Script節點和Script類甚至路由而實現對VRML文件的各節點即Node類的各個實例直接控制。

2.2 SAI(Script Authoring Interface)腳本授權接口訪問

SAI使用事件機制和路由,利用Script節點實現VRML與Java或Javascipt的交互。首先,通過EventIn將事件傳至Script節點中的腳本;其次,在Script節點中的腳本中調用相應的Java類或Javascript進行處理;最后,通過EventOut將結果送回到VRML場景以實現動畫或交互[8-9]。Script節點定義如下:

Script{

url [] exposedField MFString#指定要執行腳本的url或腳本文本本身

field fieldTypeName fieldName initialValue#定義私有域

eventIn eventType eventName #定義輸入事件

eventOut eventType eventName#定義輸出事件 }

url域可以鏈接一個Java字節碼文件(*.class)或直接包含一段Javascript程序;field域是標識VRML場景里被Java所訪問控制的節點。eventIn、eventOut用來接收、發送事件的響應值。Script節點可放置在場景的任何地方,用DEF命名它,從而完成事件的刪除或傳遞。

3 EAI實例分析

實例演示的是用戶在外部直接操作VRML世界內部的場景。用戶可以在VRML場景中添加幾何造型,并可以任意改變造型的尺度、位置、旋轉角度和顏色,達到了很好的交互效果。

1) VRML靜態場景,其代碼如下:

#VRML V2.0 utf8

DEF Camera Viewpoint {position 0 0 7}

DEF ROOT Group {}

在VRML場景中定義了一個名為ROOT的節點,作為外部EAI程序的入口地址。這里給出了一個VRML場景,場景的變化由用戶在外部進行操作。

2) 訪問VRML場景中的節點

實例中在VRML場景中定義一個名為ROOT的節點,然后在Java程序中通過browser.getNode(“ROOT”)語句進行訪問,返回一個Node類的實例Root。取得這個Node類實例也就意味著取得了該節點的索引,可以對其進行訪問。只有在VRML場景中使用了DEF命名的節點才能被Java applet訪問。在這里,browser是Browser類的一個實例。

3) 發送eventIn事件給場景的某一節點

在獲取一個被訪問節點的EventIn類實例后,便可向該節點發送時間。注意EventIn是Java抽象類,它沒有提供任何發送事件的方法,因此必須先將它強制轉化成合適的EventIn類的子類,如EventInSFVec3f,EventInSFColor,EventInMFNode等。這些子類均含有發送相應類型事件的方法。例如,實例中在VRML場景中添加造型的部分Java語句:

public boolean action(Event event, Object what) {

……

EventInMFNode addChildren = (EventInMFNode) root.getEventIn(\"addChildren\");

addChildren.setValue(curClump.transArray);

……}

4) 讀取場景中某一節點的EventOut事件

和類EventIn相似,類EventOut也是一個Java抽象類。EAI提供了它的一系列子類,如EventOutSFVec3f,EventOutSFFloat,EventOutSFColor等。通過這些子類,Applet可以方便地讀取每個命名節點的eventOut。實例中的相應的部分Java語句:

rotation_changed = (EventOutSFRotation) transform.getEventOut(\"rotation\");

scale_changed = (EventOutSFVec3f) transform.getEventOut(\"scale\");

translation_changed = (EventOutSFVec3f) transform.getEventOut(\"translation\");

diffuseColor_changed = (EventOutSFColor) material.getEventOut(\"diffuseColor\");

touchTime_changed = (EventOutSFTime) sensArray[0].getEventOut(\"touchTime\");

5) 監聽場景事件

實例中實現了每當一個新的EventOut產生時,Applet便能自動調用一個例程來處理,不像SAI通過在VRML場景中建立路由實現。針對這個問題,EAI提供了一種監聽eventOut的機制,這種機制主要表現在接口類EventOutObserver和EventOut的advise()方法上。首先將EventOutObserver子類化,在子類中實現callback(),然后調用advise()方法使子類與要監聽節點的EventOut掛接。這樣,無論何時只要被監聽的節點EventOut有輸出時,掛接EventOutObserver子類的callback()方法便會自動執行。

6) 添加與刪除節點

為實現VRML場景的靈活與完美,需要在Applet中實現了VRML節點的動態增加和刪除。這里要用到類Browser的createVrmlFromString()方法。此方法的參數是一個內容符合VRML規范的字符串,它返回一個類Node的實例數組。這些Node實例是在VRML場景的外部環境中生成的。

實例中實現了節點的動態增加,要添加一個新節點,注意首先要獲得父節點,也就是對于欲添加的節點必須使用DEF命名;其次,addChildren的值類型定義為MFNode,因此在調用方法addChildren.setValue()時,傳遞的參數就是一個Node數組。刪除節點與添加節點極為類似,只是添加節點調用的是addChildren入事件,而刪除節點調用的則是removeChildren入事件。

7) 嵌入網頁

VRML場景中任何使用DEF定義的節點都可以被Java Applet程序所訪問,獲得一個節點的句柄后,該節點的EventIn和eventOut就能被引用。Java Applet可以監視VRML場景中節點的改變并能夠在節點間傳遞事件來直接改變節點的屬性。這種方法實現將VRML和Java都作為網頁的嵌入,以Java Applet作為控制的核心,VRML場景作為三維展示的平臺。因此在HTML文檔中使用標記來放置VRML源文件,而Java Applet通過標記同樣包含在HTML文檔中。這樣Java Applet和VRML都被包含在一個HTML文件中,它們可以互相訪問,從而實現復雜的交互功能。圖2為添加造型后的界面。圖中下方有三個按鈕:Cube、Sphere、Cone;有控制Translation、Rotation、Scale和Color的滾動條。當點擊不同的按鈕時,VRML場景中相應添加造型,同時可對造型的坐標、旋轉角度、尺度和顏色進行控制,其結果如圖3所示。

■ ■

圖2 添加原始造型 圖3 交互后的造型

4 結束語

VRML是網絡三維描述性語言,具有網絡應用的優勢。Java語言具有跨平臺、易于移植的特點,利用VRML與Java編程技術可以彌補VRML功能上的不足,實現對虛擬世界更靈活的控制權,從而得到更強的交互性和實時性。通過研究VRML與Java利用外部授權接口EAI的交互技術并利用VRML建立一個虛擬場景,利用Java進行控制,對VRML場景添加造型并對造型做出相應改變,體現出VRML與Java很好的交互效果,使用戶真正成為VRML中的一個角色,一個參與者。VRML憑借強大的三維虛擬場景功能,再結合Java交互性,真正將其變成為一個廣闊的三維空間。

參考文獻:

[1] ISO/IEC 14772-1:1997,The Virtual Reality Modeling Language International Standard Part1[S].

[2] 賽博科技工作室. VRML與JAVA編程技術[M]. 北京:人民郵電出版社,2004:78-93.

[3] 汪興謙. VRML與Java編程實例講解[M]. 北京:中國水利水電出版社,2001:193-213.

[4] Bemhard Jung,Jan-Torsten Midde. Educational use of VRML and Java in agent-based AI and computer graphics[J].Future Generation Computer System,2000,(17):79-87.

[5] ISO/IEC 14772-2:2002,The Virtual Reality Modeling Language International Standard Part2:EAI[S].

[6] 吳波, 周之平, 張颯兵, 等. 基于VRML-JAVA的虛擬現實及其協同環境的開發[J].計算機工程與應用,2004,(7):136-138.

[7] 戴開宇, 戚可濤, 張申生. 基于Java和VRML的共享虛擬環境架構的研究[J].計算機工程與應用,2002,(19):180-183.

[8] 王汝傳, 姚旭敏, 王海艷, 等. 基于Java和VRML虛擬場景通信方式的研究[J].系統仿真學報,2003,15(7):986-990.

[9] 許松, 李文娟. Java在控制VRML場景中的應用[J].中國電力教育,2007,(3):207-208.

主站蜘蛛池模板: 欧美www在线观看| 亚洲码一区二区三区| 日韩精品久久久久久久电影蜜臀| 国产成人免费高清AⅤ| 国产素人在线| 91午夜福利在线观看精品| 97se亚洲综合不卡| 丰满人妻中出白浆| 亚洲A∨无码精品午夜在线观看| 91精品国产91久无码网站| 亚洲成A人V欧美综合| 国产人人乐人人爱| 中文字幕永久在线看| 国产成人综合在线观看| 欧美亚洲国产一区| 午夜一区二区三区| 91麻豆精品国产91久久久久| 99精品一区二区免费视频| 国产亚洲高清视频| 欧美精品亚洲精品日韩专区va| 国产特级毛片| 中文字幕无码av专区久久| 国产成人无码综合亚洲日韩不卡| 视频二区欧美| 亚洲婷婷丁香| 亚洲一区二区三区中文字幕5566| 久久伊人操| 三上悠亚一区二区| 国产精品一区二区国产主播| 国产欧美日韩一区二区视频在线| 国产浮力第一页永久地址| 国产超薄肉色丝袜网站| 中文字幕在线看| 国产成人精品午夜视频'| 欧美v在线| 一区二区三区国产| 亚洲首页国产精品丝袜| 日本欧美视频在线观看| 国产成人高清精品免费| 欧美亚洲国产精品第一页| 国产精品久久久久久搜索 | 国产精品入口麻豆| 中字无码av在线电影| 国产午夜一级淫片| 国产尤物在线播放| 77777亚洲午夜久久多人| 亚洲人在线| 3344在线观看无码| 免费激情网址| 午夜毛片福利| 久久99热这里只有精品免费看| 午夜小视频在线| 天天干天天色综合网| 国产成人久视频免费| 天天色综网| 2020亚洲精品无码| 精品国产电影久久九九| 日韩AV手机在线观看蜜芽| 欧美性精品不卡在线观看| 国产精品jizz在线观看软件| 午夜少妇精品视频小电影| 国产精品久久久免费视频| 日韩毛片免费| 国产人人干| 成人精品午夜福利在线播放| 国产91精品最新在线播放| 熟女成人国产精品视频| 久久香蕉国产线| 在线观看国产精品第一区免费| 久久亚洲中文字幕精品一区| 夜精品a一区二区三区| 色男人的天堂久久综合| 日本在线免费网站| 精品综合久久久久久97超人| 久久99精品国产麻豆宅宅| 国产亚洲精久久久久久久91| 欧美亚洲日韩中文| 人妻精品全国免费视频| 国产精品美人久久久久久AV| 在线色国产| 国产乱人伦AV在线A| 四虎国产永久在线观看|