预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第26卷第4期苏州大学学报(工科版)Vol.26No.4 2006年8月JOURNALOFSOOCHOWUNIVERSITY(ENGINEERINGSCIENCEEDITION)Aug.2006 文章编号:1673-047X(2006)04-0078-04 X 基于VRML/JAVA的虚拟场景交互的实现 马万全1,单美贤2 (11东南大学计算机科学与工程学院,江苏南京210096;21南京邮电大学传媒技术学院,江苏南京210003) 摘要:Javra是一个以EAI为基础的处理VRML场景图的Java包,克服了VRML与Java通过内 部Script节点和EAI方式进行交互的不足:用户操作实时生成的VRML事件可以在Javra中捕捉 到并加以处理。Javra和VRML浏览器的结合,使得生成3D交互应用程序更有效。 关键词:Java;VRML;EAI;Javra;场景图 中图分类号:TP311文献标识码:A VRML(VirtualRealityModelingLanguage)虚拟现实建模语言,是一种三维造型和渲染的图形描述性语 言。通过VRML,人们可以建立丰富的三维场景,但是VRML本身并没有直接和用户进行交互的能力,它 需要与其他评议结合才能实现三维场景和用户交互的要求,Java语言提供了这种可能性。本文主要论述 VRML与Java的交互方式和Javra的使用。 1VRML与Java之间的交互方式 VRML产生事件的方式可以归结为基于TimeSensor的静态行为和基于程序的动态行为两种,前者仅能 执行预定的决策逻辑,对于一些复杂的动画动作、实时控制事件、智能推理能力等,就需要其他编程语言(如 Java)的支持,当前主流VRML浏览器也都对Java编程提供了支持。在VRML中使用Java语言有两种方 式,即通过内部Script节点和外部编程接口(EAI)进行。 1.1内部Script节点 Script节点支持VRMLScript和 JavaScript(两者通过内置接口通信), 支持SUN公司的Java,其通过内置接 口或者专用API与VRML通信。 Script节点的URL域可以包含一段 JavaScript程序或者是链接的一个JA2 VAclass。利用Script节点进行动画 设计的过程可以用图1表示:①通过 eventIn将事件传至Script节点中的脚 本(Java或JavaScript);②在脚本中进 行处理;③通过eventOut将结果送回图1利用Script节点进行动画设计的框图 Script节点。 通过Script实现的动态场景中的事件(输入和输出)均在VRML内部节点之间进行传递,虽然可以实现 相应浏览者的交互功能,但对于与外界的信息交流包括信息的输入和输出却显得力不从心。 1.2外部编程接口(ExternalAuthoringInterface)EAI X收稿日期:2006-05-08 作者简介:马万全(1974-),男,硕士研究生,主要研究方向为计算机控制。 ©1994-2007ChinaAcademicJournalElectronicPublishingHouse.Allrightsreserved.http://www.cnki.net 第26卷马万全,单美贤:基于VRML/JAVA的虚拟场景交互的实现97 Script节点从VRML场景内部提供了与Java的连接,而EAI定义了与外部HTML页面中的Applet通 信的接口。EAI技术是利用定义的一套针对VRML浏览器的Java类实现对VRML场景的控制,它的基本 思想是将Javaapplet与VRML置于同一web页面,在Javaapplet中建立browser对象以标识一个唯一的 VRML场景,并由此获得对VRML场景中已定义节点的引用,它通过直接指定引用节点的域值而达到动态 效果。这样Javaapplet即可控制VRML场景,也能进行与HTML等其他媒体的交互以及网络控制,从而可 以实现复杂的虚拟环境系统。 图2是EAI的交互原理。A、Brows2 er类是对VRML场景的一个Java封装, 通过getBrowser()方法获得当前浏览环 境信息;B、访问某个节点产生要用 Browser类的getNode()方法来获得一个 Node类实例;C、在获得Node类实例后, 可以通过Node类所提供的getEventIn() 和getEventOut()方法对节点进行访问; D、如果需要在Applet中实现VRML节 点的动态增加和删除,就得利用到Brows2 er类的一个方法:createVrmlFromString ()。此方法的参数是一个内容符合 图2EAI的交互原理图 VRML规范的字符串,它返回一个Node 类的