天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

基于Java的VRML網(wǎng)絡(luò)通信功能的實現(xiàn)

發(fā)布時間:2016-09-13 19:16

  本文關(guān)鍵詞:基于Java的VRML網(wǎng)絡(luò)通信功能的實現(xiàn),由筆耕文化傳播整理發(fā)布。


虛擬現(xiàn)實是采用以計算機技術(shù)為核心的現(xiàn)代高技術(shù)生成逼真的視、聽、觸覺一體化的特定范圍的虛擬環(huán)境,用戶借助必要的裝備,以自然的方式與虛擬環(huán)境中的對象進行交互、相互影響,從而產(chǎn)生親臨等同真實環(huán)境的感受和體驗。分布式虛擬現(xiàn)實帶來了人機界面、人機交互的新概念和新方法,使得人機交互的內(nèi)容更加豐富、形象,方式更加自然、和諧。分布式虛擬現(xiàn)實技術(shù)推動了虛擬現(xiàn)實技術(shù)的變革。然而,若要對VRML場景進行分布式控制,還需要Script節(jié)點具有網(wǎng)絡(luò)通信功能[3]。但這是一般腳本語言(如JavaScirpt、VRMLScript)所不具有的功能。

2 VRML和Java的結(jié)合

VRML通過事件通路使相應(yīng)的節(jié)點發(fā)生變化,,達到簡單

的動態(tài)和交互的效果,為了擴展VRML的交互能力和處理能力,提高其分布式控制能力需要程序語言的介入。在網(wǎng)絡(luò)環(huán)境下,Java是最具魅力的語言,與VRML結(jié)合得相當自然,當前的主流VRML瀏覽器也都對Java編程提供了支持。在VRML中使用Java有2種方式,即通過內(nèi)部Script節(jié)點(Script

Authoring Interface,

SAI)和外部編程接口(External Authoring Interface,EAI)。

(1)內(nèi)部Script節(jié)點。在VRML中有一個Script節(jié)點,它擁有域、eventIn事件、eventOut事件。其本身沒有任何動作,但可以通過程序腳本賦予腳本節(jié)點的動作。Script節(jié)點和利用Java或JavaScript語言寫成的程序腳本,提供了對VRML的交互性的強有力的擴充。通過Script節(jié)點的URL域可以包含一段JavaScript程序或者是鏈接的一個外部Java的類文件。 在Script節(jié)點中引用外部的Java的類文件,通常只是實現(xiàn)一些特殊的、描述性語言不能實現(xiàn)的功能,如通信功能,或者是為了源程序保密。

(2)外部編程接口EAI。Script節(jié)點從VRML場景內(nèi)部提供了與Java的連接,而EAI定義了與外部HTML頁面中的Applet通信的接口。它的基本思想是將JavaApplet與VRML置于同一Web頁面,在JavaApplet中建立Browser對象以標識一個唯一的VRML場景,并由此獲得對VRML場景中已定義節(jié)點的引用,它通過直接指定引用節(jié)點的域值達到動態(tài)效果。

這2種方式各有所長[4]。使用EAI可以一目了然地在JavaApplet中輸入各種參數(shù)以改變場景的內(nèi)容,控制靈活;SAI方式不需要有JavaApplet的存在,只要為場景中的物體寫相應(yīng)的腳本代碼即可,可以實現(xiàn)許多VRML規(guī)范不能提供的復(fù)雜邏輯顯示。由于EAI方式不是真正意義上的分布式控制,因此本文主要介紹第1種方式。

3 VRML與外界網(wǎng)絡(luò)通信的Java實現(xiàn)

利用Script節(jié)點的特點,用Java編寫成腳本語言,并將Java的網(wǎng)絡(luò)功能和文件訪問功能引入到腳本語言中,從而能夠?qū)崿F(xiàn)VRML的分布式交互仿真。圖1給出了一個有網(wǎng)絡(luò)功能的VRML的實現(xiàn)模型。后面將介紹如何利用Java實現(xiàn)VRML的通信功能。

基于Java的VRML網(wǎng)絡(luò)通信功能的實現(xiàn)

圖2 具有通信功能的VRML實現(xiàn)模型

—48 —

3.1 Java程序的定義

VRML中使用的Java文件,必須滿足3個條件[5,6]:(1)包含一個名字和主文件名完全相同的類定義;(2)屬于Script類(vrml.node包)的子類;(3)將其說明為“public”類。其定義如下:

public class className extends Script {

...

initialize(); processEvents(); processEvent(); eventsProcessed(); shutdown();

... }

初始化函數(shù)initialize()在VRML 文件加載時運行,將Script節(jié)點中的事件入口(eventIn)和事件出口(eventOut)轉(zhuǎn)變成Java語言中相應(yīng)的變量類型。事件入口或事件出口的處理由此變成了對這些變量的處理。

用戶收到一系列事件時,調(diào)用processEvents()函數(shù)進行處理。processEvent()用于處理某一事件,事件處理完畢調(diào)用eventsProcessed()。在函數(shù)processEvent()中處理事件入口socketPort(須在VRML文件中定義),該事件入口表示Socket通信的端口號。獲得這個事件后,函數(shù)便生成一個新線程,新線程提供了端口號為socketPort的Socket服務(wù)。

shutdown()函數(shù)在刪除Script節(jié)點時調(diào)用,用以關(guān)閉Socket連接。

3.2 Script節(jié)點的域和事件的獲取

在Java程序中,通過調(diào)用getField()函數(shù)獲得Script節(jié)點中的域?qū)ο;調(diào)用 getEventOut()函數(shù)獲得事件出口(出事件);調(diào)用 getEventIn()函數(shù)獲得事件入口(入事件)。 3.3 讀域和事件

在Java程序中通過調(diào)用getValue()函數(shù)將VRML的域類型轉(zhuǎn)化成相應(yīng)的Java平臺的數(shù)據(jù)類型并返回其值。 3.4 寫域和事件

在Java程序中,通過setValue()函數(shù)將Java平臺的變量value轉(zhuǎn)化成VRML類型的數(shù)據(jù)并拷貝到目標對象,可用來設(shè)置事件出口;通過addValue()函數(shù)將Java平臺的變量value轉(zhuǎn)化成VRML類型的數(shù)據(jù)并添加到目標對象中;通過insertValue()函數(shù)將Java平臺的變量value轉(zhuǎn)化成VRML類型的數(shù)據(jù)并在指定位置插入;通過clear()函數(shù)刪除目標對象中的所有元素;通過delete()函數(shù)刪除目標對象中索引值為index的元素。

3.5 VRML網(wǎng)絡(luò)通信的Java實現(xiàn)

(1)在Script的事件入口處理函數(shù)processEvent()中,增加了起動一條新線程的語句:

processEvent (Event event) { ... Thread thread; ... thread = new Thread(this); thread.start(); ... }

(2)在線程執(zhí)行函數(shù)run()中,加入了提供socket服務(wù)器服務(wù)的語句:

public void run(){

Socket socket;


  本文關(guān)鍵詞:基于Java的VRML網(wǎng)絡(luò)通信功能的實現(xiàn),由筆耕文化傳播整理發(fā)布。



本文編號:114649

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/kejilunwen/wltx/114649.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶b5887***提供,本站僅收錄摘要或目錄,作者需要刪除請E-mail郵箱bigeng88@qq.com