摘要: 借助EAI 和Script 节点将Java 和VRML 相结合,构建了一个三维交互式的虚拟场景,该场景克服了VRML 在交互方面的不足,实现了用户与虚拟场景之间以及用户与用户之间的交互和共享的功能,并在此基础上,构建了一个用于计算机图形学教学的虚拟场景框架,为VRML 在远程教育方面的普及和应用做了有益的探索.
关键词: VRML ;Java ; EAI ; 交互式;虚拟场景
虚拟现实技术是当前国际上的一个研究热点,是一种逼真的通过各种传感设备模拟人在自然环境中的视、听、动作等行为的人机界面技术,实现操作者和环境直接进行自然交互. 该技术已经广泛地应用于军事、航空航天、医学、建筑设计、机械、地理、化学等众多的领域.
虚拟现实建模语言(Virtual Reality Modeling Language , 缩写为VRML) 是一个开放的、可扩充的三维场景描述语言,它描述了如何在World Wide Web 上创建和浏览三维虚拟场景. VRML 的构思始于1994 年春瑞士日内瓦的万维网(WWW) 的第一届国际会议上. 1994 年10 月在芝加哥召开的第二次万维网会议上公布了VRML1. 0 的规范草案,其主要的功能是生成静态的3D 场景,以及与HTML 链接的一些功能和措施. 1998 年1 月VRML 被ISO 正式批准为国际标准( ISO/ IEC/ 4772 -1 :1997 , 通常被称为VRML1997 , 也被称为VRML2. 0) . VRML2. 0 版将VRML 的静态世界改变为动态世界,并强化了互动功能,此外还增加了动画、传感器、事件、行为和脚本等功能. VRML 提供了54 个功能强大的节点用于描述三维场景中的对象,能够利用层次性文件关系创建任意大的动态境界[ 1 ]. 目前,国内在虚拟现实技术的应用方面除了个别领域外,基本上还处于探索研究阶段,主要是应用VRML 的三维建模功能创建一个用户可以浏览的静态三维场景,而在创建动态场景和多用户场景方面的研究相对较少. 本文旨在讨论使用VRML 与J ava 创建多用户交互式场景的结合方法,并给出了系统框架和实现方法.
1 VRML 与J ava 相结合
VRML 本身并不具备与外部交互的能力,也不能完成普通程序设计中的转折、分支、循环等基本特征,它必须和其他语言相结合才能构造出具备交互能力的三维场景. 为了在虚拟场景中增加和删除对象,或者定义动画和对象的行为功能,一种方法是通过扩展Script 节点,利用J avaScript 和J ava 编程提高VRML 的应用扩展能力[ 2 ] ;另一种方法是使用EA I. Script 节点本身没有任何动作,其动作是由J ava 脚本来实现的. 然而,应用Script 节点只能按照预定的规则改变场景, 无法满足复杂的交互操作. 此时, 这里采用EA I(External Authoring Interface : 外部程序接口) 实现外部应用程序与VRML 场景的实时交互. EA I 是Silicon Graphics 公司的Chris Marrin 1997 年1 月提出的一种应用程序接口,是基于VRML 和J ava 小应用(J ava Applet) 之间事件传递而提出的规约,实现J ava Applet 与VRML 虚拟场景之间的相互通信. EA I 方法依赖于一个与VRML 浏览器相联系的Java 包的支持. 该J ava 包由vrml. external. 3 、vrml. external. field. 3 、vrml. external. node. 3 以及vrml. external. exception. 3 四个部分组成开发者使用该接口创建的小应用程序可以动态地创建、修改和删除VRML 场景中的节点[ 3 ]. EA I 允许用以下四种方式访问VRML 场景: (1) 访问BSI(Browser Script Interface : 浏览器脚本接口) 接口函数; (2) 发送一个事件给VRML 场景中节点的事件入口(event In) ; (3) 读取从VRML 场景中节点的事件出口(eventOut) 发出的最新值; (4) 当事件从节点的事件出口(eventOut) 发出时,获得一个通知,激活callback 方法.
VRML 场景中任何使用DEF 定义的节点都可以被J ava Applet 程序所访问,获得一个节点的句柄后,该节点的event In 和eventOut 就能被引用. Java Applet 可以监视VRML 场景中节点的改变并能够在节点间传递事件来直接改变节点的属性. 简单的说,一方面EA I 能把VRML模型的变化传递给J ava Applet , 另一方面Java Applet 可以通过EA I 给VRML 传送各种各样的事件和信息,控制和改变虚拟场景.
就功能而言,使用Script 节点和使用EA I 实现对VRML 场景的控制并没有什么不同. 一般来说对于单一的VRML 事件实现交互及运算功能可选择内部的Script , 若需集成多种媒体,并进行复杂网络控制,则使用EA I 更适宜.
2 交互式虚拟场景的实现
2. 1 系统框架
一个基于VRML 和J ava 相结合的多用户交互的虚拟场景的框架见图1. 图1 具有多用户交互、共享功能的虚拟场景框架
图1 场景基于客户机/ 服务器模式. 服务器端包含HTTP 服务器、场景服务器和数据库服务器. HTTP 服务器负责HTML 文件、VRML 文件Java 文件以及其他相关资源(如声音、图片、影像等) 的存储与传输;场景服务器负责用户的登记和管理,响应用户的请求,将每一个在线用户的请求、控制信息加以合成,再以广播的方式传送给所有用户. 数据库存储所有变动对象的当前信息,如当一个新用户登陆以后,他的化身信息将写入该数据库,并通过数据库读取其它对象的信息,通过EA I 将这些信息在客户端的虚拟世界中表现出来.
2. 2 场景交互性的实现
虚拟场景的交互性体现在两个方面:一是用户与虚拟场景内的虚拟对象的交互,用户可以改变场景中虚拟对象的状态、位置,甚至可以对对象进行添加和删除操作;二是与其他用户之间的交互,用户可以控制替身的行为(如走、跑、转身、举手等) 和表情,可以看到其他用户替身状态的变化,可以与其他用户相互交换意见,开展讨论、演示,从事虚拟试验,合作开发等. 用户与虚拟场景的交互是通过在Java Applet 中使用EA I 来实现的,其处理流程如下:
(1)Java 通过与VRML 进行相互通信,可以获取虚拟空间的数据信息,如替身的状态和动作,实体的状态等,形成一个通信数据包; (2) 各个节点通过TCP/ IP 协议下的Java Socket 机制进行相互连接,将该通信数据包通过网络实时传输给各个节点; (3) 当某个节点接受到相应的数据包后,Java 可以对VRML 空间进行动态控制,改变3D替身的位置和方向以及实体的状态,保持用户间信息的一致和事件的同步.下面是控制物体平移的部分关键Java 代码:
browser = Browser. getBrowser() ; // 获得VRML 浏览器(场景) 的句柄 Node trigon1 = browser. getNode(”TRIGON1” ); // 获得场景中TRIGON1 对象的句柄 translation = (EventinSFNode)trigon1. get Event In(”); set-translation” // 设定场景中该节点准备接受事件的域 translation. setValue(xyz) // 设定改变场景中该节点的事件平移物体
2. 3 多用户共享的实现
EAI 能够克服VRML 浏览器在用户接口方面的限制,通过其它的应用程序控制虚拟场景,使用户能够创建符合自己意图的虚拟场景,进而实现多个用户同时共享. 用户在虚拟场景中的交互是以替身的形式实现的. 这里,替身的定义符合H -Anim1. 0的人物建模标准[5 ]. H-Anim1. 0 标准提供了一个具有良好的兼容性、灵活性、简单性的人物模型的构造方法,按此标准建立的多用户共享虚拟场景具有很好的通用性和开放型. 外部程序,如Java Applet , 通常是以事件的形式读取和控制VRML 场景. 当场景中的一个替身发生变化或者替身的行为使得虚拟场景发生了改变,该信息将以事件的形式传送给服务器. 服务器再将接受到的信息以IP 广播的形式传送给虚拟场景内所有的用户,同时将此信息存放在数据库里. 当用户接受到服务器发出的信息时, 可以在客户端直接通过EAI 更改VRML 场景或替身的状态,这样在每个用户的浏览器上可以看到其他人的行为和替身的变化以及由此产生的场景的变化,从而实现了虚拟场景的多用户共享.
另外,当多个用户进行合作开发或者共同进行虚拟实验时,应避免多个用户对同一物体进行修改而产生的冲突. 这里引入锁定机制避免该冲突,即当一个用户对某一物体进行控制时,会向服务器发送一个锁定请求,此时该物体不能被其它用户控制. 只有当用户对物体解锁后,其它用户才能提出另一个锁定要求. 控制物体节点的(ExposedField) touchsensorenabled 域可以实现对物体的锁定与解锁.
3 应用实例
基于以上的分析,这里建立了一个多用户交互式用于计算机图形学远程教学的虚拟场景. 用户以替身的形式进入虚拟场景,当用户点击不同的变换控制按钮时,在弹出的窗口中显示该变换的算法,同时虚拟场景中图形也发生相应的变换.用户则可以自由地在场景中漫游,从不同角度观察图形的变换,从而达到对不同变换算法加深理解的目的. 目前该系统正处于开发阶段,以上所述图
2 用于计算机图形学教学的虚拟场景的功能将逐步得以实现. 图2 是虚拟场景的屏幕拷贝,仅供参考. 本文将Java 与VRML 相结合,借助EAI 和VRML 的Script 节点构建了一个三维交互式虚拟场景,提出了系统的整体框架,给出了用户与虚拟场景以及用户之间的交互方式,并指出多用户共享时应注意的冲突问题. 在此基础上,开发了一个具有初步功能的用于计算机图形学远程教学的虚拟场景,该场景有助于加深学习者对计算机图形学各种算法的理解.
参考文献: [ 1 ] VRML97 Specification[ EB/OL ] . ISO/IEC 14772-2 :2002[ S] . http ://www. web3d. org. [ 2 ] 赛博科技工作室. VRML 与Java 编程技术[ M ] . 北京:人民邮电出版社,2002. [ 3 ] H. M. Deitel , P. J . Deitel. 奚红宇,史晓华,邵 晖译.JAVA 程序设计高级教程[ M ] . 北京:电子工业出版社,1999. Developing 3D Interactive Virtual Scene with the Combination of VRML and JAVA L EI Chao2quan1 ,WU Wei2bin2 (1. Professional Education Department , Ningde Teachers College , Ningde Fujian 352100 , China ; 2. Network Info Center ,Quanzhou Normal University ,Fujian 362000 ,China) Abstract :By using EAI and Script node , Java and VRML are combined in this paper to develop a 3D interactive virtual scene. This scene overcomes the shortage of VRML in the aspect of interactivity and features the interaction between the user and the virtual scene. And a multi2user shared environment is also realized in this scene. Based on this structure , a frame of the virtual scene is constructed for the computer graphics education. Key words :VRML ;Java ; EA I ;interactivity ;virtual scene. 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
|