当前位置:主页 > 科技论文 > 网络通信论文 >

基于Java的VRML网络通信功能的实现

发布时间:2016-09-13 19:16

  本文关键词:基于Java的VRML网络通信功能的实现,由笔耕文化传播整理发布。


虚拟现实是采用以计算机技术为核心的现代高技术生成逼真的视、听、触觉一体化的特定范围的虚拟环境,用户借助必要的装备,以自然的方式与虚拟环境中的对象进行交互、相互影响,从而产生亲临等同真实环境的感受和体验。分布式虚拟现实带来了人机界面、人机交互的新概念和新方法,使得人机交互的内容更加丰富、形象,方式更加自然、和谐。分布式虚拟现实技术推动了虚拟现实技术的变革。然而,若要对VRML场景进行分布式控制,还需要Script节点具有网络通信功能[3]。但这是一般脚本语言(如JavaScirpt、VRMLScript)所不具有的功能。

2 VRML和Java的结合

VRML通过事件通路使相应的节点发生变化,,达到简单

的动态和交互的效果,为了扩展VRML的交互能力和处理能力,提高其分布式控制能力需要程序语言的介入。在网络环境下,Java是最具魅力的语言,与VRML结合得相当自然,当前的主流VRML浏览器也都对Java编程提供了支持。在VRML中使用Java有2种方式,即通过内部Script节点(Script

Authoring Interface,

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

(1)内部Script节点。在VRML中有一个Script节点,它拥有域、eventIn事件、eventOut事件。其本身没有任何动作,但可以通过程序脚本赋予脚本节点的动作。Script节点和利用Java或JavaScript语言写成的程序脚本,提供了对VRML的交互性的强有力的扩充。通过Script节点的URL域可以包含一段JavaScript程序或者是链接的一个外部Java的类文件。 在Script节点中引用外部的Java的类文件,通常只是实现一些特殊的、描述性语言不能实现的功能,如通信功能,或者是为了源程序保密。

(2)外部编程接口EAI。Script节点从VRML场景内部提供了与Java的连接,而EAI定义了与外部HTML页面中的Applet通信的接口。它的基本思想是将JavaApplet与VRML置于同一Web页面,在JavaApplet中建立Browser对象以标识一个唯一的VRML场景,并由此获得对VRML场景中已定义节点的引用,它通过直接指定引用节点的域值达到动态效果。

这2种方式各有所长[4]。使用EAI可以一目了然地在JavaApplet中输入各种参数以改变场景的内容,控制灵活;SAI方式不需要有JavaApplet的存在,只要为场景中的物体写相应的脚本代码即可,可以实现许多VRML规范不能提供的复杂逻辑显示。由于EAI方式不是真正意义上的分布式控制,因此本文主要介绍第1种方式。

3 VRML与外界网络通信的Java实现

利用Script节点的特点,用Java编写成脚本语言,并将Java的网络功能和文件访问功能引入到脚本语言中,从而能够实现VRML的分布式交互仿真。图1给出了一个有网络功能的VRML的实现模型。后面将介绍如何利用Java实现VRML的通信功能。

基于Java的VRML网络通信功能的实现

图2 具有通信功能的VRML实现模型

—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();

... }

初始化函数initialize()在VRML 文件加载时运行,将Script节点中的事件入口(eventIn)和事件出口(eventOut)转变成Java语言中相应的变量类型。事件入口或事件出口的处理由此变成了对这些变量的处理。

用户收到一系列事件时,调用processEvents()函数进行处理。processEvent()用于处理某一事件,事件处理完毕调用eventsProcessed()。在函数processEvent()中处理事件入口socketPort(须在VRML文件中定义),该事件入口表示Socket通信的端口号。获得这个事件后,函数便生成一个新线程,新线程提供了端口号为socketPort的Socket服务。

shutdown()函数在删除Script节点时调用,用以关闭Socket连接。

3.2 Script节点的域和事件的获取

在Java程序中,通过调用getField()函数获得Script节点中的域对象;调用 getEventOut()函数获得事件出口(出事件);调用 getEventIn()函数获得事件入口(入事件)。 3.3 读域和事件

在Java程序中通过调用getValue()函数将VRML的域类型转化成相应的Java平台的数据类型并返回其值。 3.4 写域和事件

在Java程序中,通过setValue()函数将Java平台的变量value转化成VRML类型的数据并拷贝到目标对象,可用来设置事件出口;通过addValue()函数将Java平台的变量value转化成VRML类型的数据并添加到目标对象中;通过insertValue()函数将Java平台的变量value转化成VRML类型的数据并在指定位置插入;通过clear()函数删除目标对象中的所有元素;通过delete()函数删除目标对象中索引值为index的元素。

3.5 VRML网络通信的Java实现

(1)在Script的事件入口处理函数processEvent()中,增加了起动一条新线程的语句:

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

(2)在线程执行函数run()中,加入了提供socket服务器服务的语句:

public void run(){

Socket socket;


  本文关键词:基于Java的VRML网络通信功能的实现,由笔耕文化传播整理发布。



本文编号:114649

资料下载
论文发表

本文链接:https://www.wllwen.com/kejilunwen/wltx/114649.html


Copyright(c)文论论文网All Rights Reserved | 网站地图 |

版权申明:资料由用户b5887***提供,本站仅收录摘要或目录,作者需要删除请E-mail邮箱bigeng88@qq.com