论文部分内容阅读
摘要:分析了在VRML中通过Script节点或EAI 使用Java语言来实现对虚拟世界的控制和场景交互的办法,指出了它们的不足之处。在此基础上,利用AJAX异步传输和数据处理的优势,提出一种基于AJAX的虚拟现实框架,并简要给出了应用实例说明。
关键词:虚拟现实;VRML;Java;交互;AJAX
中图分类号:TP309.05文献标识码:A 文章编号:1009-3044(2008)06-10ppp-0c
Research on Interaction Application of Java, AJAX in Virtual Reality
QIU Qiaochun, MIN Lianying, XUE Ying
(School of Computer Science and Technology, Wuhan University of Technology, Wuhan 430063, China)
Abstract:Analyzes two means that importing Java language in VRML through the Script node or EAI to realize controlling virtual world and interaction in scenes, and then points out their deficiencies. In this foundation, this paper develops a new virtual reality frame based on AJAX by making full use of its superiorities, which include asynchronous transmission and data processing, and has given a application explanation briefly.
Key words:virtual reality;VRML;java;interaction;AJAX
虚拟现实与因特网技术的结合产生了虚拟现实建模语言(Virtual Reality Modeling Language,简称VRML),它可以与WWW一起使用,用来实现一个通过全球互联网和超链接而形成的虚拟世界[1],从而满足了人们对三维立体Web的迫切需求。
VRML被称为继HTML之后的第二代Web语言,是一种用于描述三维物体及其行为的建模语言,它可以构建虚拟境界(Virtual World),并集成文本、图像、音响、MPEG影像等多种媒体类型,还可以嵌入Vrmlscript、Java、Javascript等语言编写的程序代码。但VRML本身并没有直接和用户进行交互的能力,它需要与其他语言结合才能实现三维场景和用户交互的要求。本文分析了利用Java语言实现这种交互的可能,并进一步论述了采用AJAX后三者的结合在因特网虚拟现实中的应用。
1 VRML与Java结合
由于VRML本身不能完成普通程序设计中的分支、循环等基本特征,故它自身的交互机制是无法满足用户多种交互要求的需要。但VRML有自己的API(Application Programming Interface),这样就为Java程序提供了可以访问VRML浏览器的界面和可执行的环境,并且在Java的vrml.node包中含有一个Script类,它是一个抽象类,通过对Script类的继承,Java程序便可以与Script结点建立联系,从而达到控制VRML其它结点的目的。Java对VRML的支持都是通过附加的封装类来实现的[2] (这些类随同VRML浏览器程序安装在客户机上)。通过封装类,Java程序能够访问VRML场景、接受和发送事件、从页面上得到VRML 对象,实现对VRML 场景的完全控制。VRML 中使用Java有两大类方式:内部Script节点和外部编程接口(EAI)。
1.1 通过内部Script节点
Script节点是连接VRML和Java 的桥梁,其中的url字段是它与外部程序联系的关键,url是WWW 上一个对象的完全地址,指出了外部程序所处的位置,不管是本地的或者是在网络远端的合法程序都能被使用。甚至该字段的值能直接被赋为合法的源程序。例如,通过Java程序控制场景中球体运动的Script代码如下:
Script{
url [ “Java/MoveBall. class” ]
eventIn SFBool clicked#输入接口设置
eventOut SFTime start#输出接口设置
……
} ROUTE … TO …
对于到达eventIn的事件(点击/clicked)都将会自动传送到url所指定的程序中,在Java中完成VRML与外界交互操作的程序编写,然后编译成class文件供VRML场景访问。程序处理后通过eventOut(在initialize()函数内初始化为Java的类成员)将得到的结果传回Script节点执行更新。图1给出了交互过程的图解说明。若还想用结果去影响场景中的其它实体,可以通过ROUTE事件连到(TO)路由链中的下一个节点。
图1VRML与Java交互图
Java与VRML通过Script节点的结合,简单地说就是:(1)通过eventIn将事件传至Script节点中url所指向的Java脚本;(2)在该脚本程序中进行处理;(3)通过eventOut将结果送回Script节点。
1.2 通过外部编程接口EAI(External Authoring Interface)
VRML97标准提供了外部编程接口(External Authoring Interface),从而可以实现java小应用程序类与VRML场景的通信。EAI还定义了外部环境通过VRML现存的事件驱动模式来访问VRML内部的节点的一系列方法。
Java主要使用Browser和Node两个类(vrml.external包)及其它一些如处理eventIn域和eventOut域的各个属性类(EventIn*、EventOut*),还有处理异常的各种Exception类完成对EAI的描述。该Browser类除了包含Brower类(vrml包)所有方法外,还提供了三个方法:getBrowser(Applet pApplet)、getBrowser(Applet pApplet,String frameName,int index)和getNode(String name)方法[3]。
有了vrml.external包中功能强大的Browser和Node类,所以可以甚至完全抛弃Script节点和Script类甚至路由,而对VRML世界的各种节点即Node类的各个实例直接操控。但此方法的局限性:由于getBrowser()方法的参数必须是Applet的实例,因而该方法只能通过Java程序来控制VRML世界。
2 引入AJAX后的三者结合
VRML与Java直接结合的两种方法较好地解决了VRML场景与外部交互的问题,但也存在一些不足之处:客户端都需要安装虚拟机(方法一中是class文件,方法二为Applet程序)并配置环境变量;网页中嵌入Applet的方式还可能会威胁客户端的安全,许多客户端都限制网页对Applet的运行;将Java程序从服务器下载至客户端执行增加了许多网络流量。基于此种情况,笔者通过引入目前成熟而具有强大优势的AJAX技术,以AJAX作为中间桥梁设计一种全新的交互应用方案。
当前因特网是一个请求-响应的循环系统,浏览器与服务器的交互采用的是同步方式,在服务器响应过程中,用户能做的只有等待。用户向服务器发出一个http请求或在需要刷新页面中的某部分内容时,无论用户是否愿意,服务器都将返回全部页面内容。可见在同步交互方式中,既浪费了用户的时间也浪费了许多网络带宽。AJAX(Asynchronous Javascript And XML)的出现,使得部分提交、异步传输成为可能,它提供高度交互的Web 应用,甚至与桌面应用相差无几,而且能够在所有当前流行的Web浏览器上部署而无需特殊的插件。
事实上,AJAX并不是一门新的语言或技术,它是几项技术互相协作而形成的一个功能强大的新方法[4-5],包括:使用XHTML和CSS标准化呈现;使用文档对象模型 (Document Object Model,简称DOM)实现动态显示和交互;使用XML和XSLT进行数据交换与处理;使用XMLHttpRequest进行异步数据读取;最后用Javascript绑定和处理所有数据。其中XMLHttpRequest、Javascript和DOM是AJAX技术的核心,而VRML对Javascript的完全支持即成为其引入AJAX的关键所在。
2.1 基于AJAX的虚拟现实框架设计
AJAX的根本理念是“按需取数据”,所以最大可能地减少了冗余请求和响应对服务器空间和带宽造成的负担,同时也可以把原本需要服务器要做的许多事情放到客户端来做。
相比平面结构的Web,虚拟现实的三维场景模型(*.wrl或*.wrz)通常都是数据量较大的文件,如果每次用户的请求都使用同步方式进行传输,则需要更多的时间等待服务器的响应。使用AJAX以后,用户与场景的交互通过发送XMLHttpRequest请求来实现,从而可以有选择有目的性地进行数据的异步传送,即在不需更新整个三维场景页面的情况下完成请求的响应,这个过程中用户所面对的不是白屏,而仍可进行其他操作。从服务器响应到客户端的更新,由于传输的数据量小,所以更新是相当即时的,用户几乎不需要等待时间。
基于AJAX的虚拟现实系统框架设计如图2所示。该框架避免了在VRML中直接调用Java程序(需要客户端来执行class文件或Applet程序),而将功能强大的Java运用到后台服务器上。具体过程为:(1)用户的操作通过VRML脚本Script节点中的Javascript调用XMLHttpRequest对象发出请求;(2)AJAX引擎完成响应该函数调用,负责将对数据或事务的请求传给应用服务器;(3)服务器接收AJAX引擎发送的Http请求,调用相应的Java程序进行处理;(4)后台程序或通过JDBC引擎与数据库(用户数据库、属性数据库)产生数据交互,或从场景库提取相应场景实体,以XML格式的形式送回;(5)AJAX接收XML数据并将其转换成VRML后[6],由安装在浏览器中的VRML解释器处理得到最后场景的更新。
图3 虚拟展销平台系统效果图
3 结束语
VRML中引用Java程序可以得到许多其自身不能实现的场景交互,若将Java用于后台,通过AJAX作为两者联系的纽带,即在客户端和服务器之间增加一个中间层—AJAX引擎,不仅避免了两者直接结合的不足之处,而且异步传输方式也大大改观了虚拟现实交互的真实性和响应速度。此外,XML的使用很好地解决了数据存储与传输问题。
参考文献:
[1]闵联营,邓清珊.虚拟现实及其应用[J].交通与计算机, 2000,18(5):41-44.
[2]汪兴谦. VRML与Java编程实例讲解[M]. 北京:中国水利水电出版社,2002:83-111.
[3]王汝传.基于Java和VRML虚拟场景通信方式的研究[J].系统仿真学报, 2003,15(7):986-989.
[4]Jesse James Garrett. Ajax: A New Approach to Web Applications[EB/OL].http://www.adaptivepath.com/ideas/essays/archives/000385.php,2005-2.
[5]游丽贞,郭宇春,李纯喜. AJAX引擎的原理和应用[J]. 微计算机信息, 2006,22(2-3):205-207.
[6]陈婷,周家纪,杨宁. 基于VRML-AJAX的分布式虚拟现实应用[J].微电子学与计算机, 2006,23(S1): 272-274.
收稿日期:2008-01-12
作者简介:邱桥春(1982-),男,湖南省祁东人,硕士研究生,研究方向为计算机网络技术;闵联营(1956-),男,副教授,湖北省武汉人,主要研究方向为计算机网络、嵌入式系统;薛颖(1983-),女,湖北省武汉人,硕士研究生,主要研究方向为计算机网络技术。
关键词:虚拟现实;VRML;Java;交互;AJAX
中图分类号:TP309.05文献标识码:A 文章编号:1009-3044(2008)06-10ppp-0c
Research on Interaction Application of Java, AJAX in Virtual Reality
QIU Qiaochun, MIN Lianying, XUE Ying
(School of Computer Science and Technology, Wuhan University of Technology, Wuhan 430063, China)
Abstract:Analyzes two means that importing Java language in VRML through the Script node or EAI to realize controlling virtual world and interaction in scenes, and then points out their deficiencies. In this foundation, this paper develops a new virtual reality frame based on AJAX by making full use of its superiorities, which include asynchronous transmission and data processing, and has given a application explanation briefly.
Key words:virtual reality;VRML;java;interaction;AJAX
虚拟现实与因特网技术的结合产生了虚拟现实建模语言(Virtual Reality Modeling Language,简称VRML),它可以与WWW一起使用,用来实现一个通过全球互联网和超链接而形成的虚拟世界[1],从而满足了人们对三维立体Web的迫切需求。
VRML被称为继HTML之后的第二代Web语言,是一种用于描述三维物体及其行为的建模语言,它可以构建虚拟境界(Virtual World),并集成文本、图像、音响、MPEG影像等多种媒体类型,还可以嵌入Vrmlscript、Java、Javascript等语言编写的程序代码。但VRML本身并没有直接和用户进行交互的能力,它需要与其他语言结合才能实现三维场景和用户交互的要求。本文分析了利用Java语言实现这种交互的可能,并进一步论述了采用AJAX后三者的结合在因特网虚拟现实中的应用。
1 VRML与Java结合
由于VRML本身不能完成普通程序设计中的分支、循环等基本特征,故它自身的交互机制是无法满足用户多种交互要求的需要。但VRML有自己的API(Application Programming Interface),这样就为Java程序提供了可以访问VRML浏览器的界面和可执行的环境,并且在Java的vrml.node包中含有一个Script类,它是一个抽象类,通过对Script类的继承,Java程序便可以与Script结点建立联系,从而达到控制VRML其它结点的目的。Java对VRML的支持都是通过附加的封装类来实现的[2] (这些类随同VRML浏览器程序安装在客户机上)。通过封装类,Java程序能够访问VRML场景、接受和发送事件、从页面上得到VRML 对象,实现对VRML 场景的完全控制。VRML 中使用Java有两大类方式:内部Script节点和外部编程接口(EAI)。
1.1 通过内部Script节点
Script节点是连接VRML和Java 的桥梁,其中的url字段是它与外部程序联系的关键,url是WWW 上一个对象的完全地址,指出了外部程序所处的位置,不管是本地的或者是在网络远端的合法程序都能被使用。甚至该字段的值能直接被赋为合法的源程序。例如,通过Java程序控制场景中球体运动的Script代码如下:
Script{
url [ “Java/MoveBall. class” ]
eventIn SFBool clicked#输入接口设置
eventOut SFTime start#输出接口设置
……
} ROUTE … TO …
对于到达eventIn的事件(点击/clicked)都将会自动传送到url所指定的程序中,在Java中完成VRML与外界交互操作的程序编写,然后编译成class文件供VRML场景访问。程序处理后通过eventOut(在initialize()函数内初始化为Java的类成员)将得到的结果传回Script节点执行更新。图1给出了交互过程的图解说明。若还想用结果去影响场景中的其它实体,可以通过ROUTE事件连到(TO)路由链中的下一个节点。
图1VRML与Java交互图
Java与VRML通过Script节点的结合,简单地说就是:(1)通过eventIn将事件传至Script节点中url所指向的Java脚本;(2)在该脚本程序中进行处理;(3)通过eventOut将结果送回Script节点。
1.2 通过外部编程接口EAI(External Authoring Interface)
VRML97标准提供了外部编程接口(External Authoring Interface),从而可以实现java小应用程序类与VRML场景的通信。EAI还定义了外部环境通过VRML现存的事件驱动模式来访问VRML内部的节点的一系列方法。
Java主要使用Browser和Node两个类(vrml.external包)及其它一些如处理eventIn域和eventOut域的各个属性类(EventIn*、EventOut*),还有处理异常的各种Exception类完成对EAI的描述。该Browser类除了包含Brower类(vrml包)所有方法外,还提供了三个方法:getBrowser(Applet pApplet)、getBrowser(Applet pApplet,String frameName,int index)和getNode(String name)方法[3]。
有了vrml.external包中功能强大的Browser和Node类,所以可以甚至完全抛弃Script节点和Script类甚至路由,而对VRML世界的各种节点即Node类的各个实例直接操控。但此方法的局限性:由于getBrowser()方法的参数必须是Applet的实例,因而该方法只能通过Java程序来控制VRML世界。
2 引入AJAX后的三者结合
VRML与Java直接结合的两种方法较好地解决了VRML场景与外部交互的问题,但也存在一些不足之处:客户端都需要安装虚拟机(方法一中是class文件,方法二为Applet程序)并配置环境变量;网页中嵌入Applet的方式还可能会威胁客户端的安全,许多客户端都限制网页对Applet的运行;将Java程序从服务器下载至客户端执行增加了许多网络流量。基于此种情况,笔者通过引入目前成熟而具有强大优势的AJAX技术,以AJAX作为中间桥梁设计一种全新的交互应用方案。
当前因特网是一个请求-响应的循环系统,浏览器与服务器的交互采用的是同步方式,在服务器响应过程中,用户能做的只有等待。用户向服务器发出一个http请求或在需要刷新页面中的某部分内容时,无论用户是否愿意,服务器都将返回全部页面内容。可见在同步交互方式中,既浪费了用户的时间也浪费了许多网络带宽。AJAX(Asynchronous Javascript And XML)的出现,使得部分提交、异步传输成为可能,它提供高度交互的Web 应用,甚至与桌面应用相差无几,而且能够在所有当前流行的Web浏览器上部署而无需特殊的插件。
事实上,AJAX并不是一门新的语言或技术,它是几项技术互相协作而形成的一个功能强大的新方法[4-5],包括:使用XHTML和CSS标准化呈现;使用文档对象模型 (Document Object Model,简称DOM)实现动态显示和交互;使用XML和XSLT进行数据交换与处理;使用XMLHttpRequest进行异步数据读取;最后用Javascript绑定和处理所有数据。其中XMLHttpRequest、Javascript和DOM是AJAX技术的核心,而VRML对Javascript的完全支持即成为其引入AJAX的关键所在。
2.1 基于AJAX的虚拟现实框架设计
AJAX的根本理念是“按需取数据”,所以最大可能地减少了冗余请求和响应对服务器空间和带宽造成的负担,同时也可以把原本需要服务器要做的许多事情放到客户端来做。
相比平面结构的Web,虚拟现实的三维场景模型(*.wrl或*.wrz)通常都是数据量较大的文件,如果每次用户的请求都使用同步方式进行传输,则需要更多的时间等待服务器的响应。使用AJAX以后,用户与场景的交互通过发送XMLHttpRequest请求来实现,从而可以有选择有目的性地进行数据的异步传送,即在不需更新整个三维场景页面的情况下完成请求的响应,这个过程中用户所面对的不是白屏,而仍可进行其他操作。从服务器响应到客户端的更新,由于传输的数据量小,所以更新是相当即时的,用户几乎不需要等待时间。
基于AJAX的虚拟现实系统框架设计如图2所示。该框架避免了在VRML中直接调用Java程序(需要客户端来执行class文件或Applet程序),而将功能强大的Java运用到后台服务器上。具体过程为:(1)用户的操作通过VRML脚本Script节点中的Javascript调用XMLHttpRequest对象发出请求;(2)AJAX引擎完成响应该函数调用,负责将对数据或事务的请求传给应用服务器;(3)服务器接收AJAX引擎发送的Http请求,调用相应的Java程序进行处理;(4)后台程序或通过JDBC引擎与数据库(用户数据库、属性数据库)产生数据交互,或从场景库提取相应场景实体,以XML格式的形式送回;(5)AJAX接收XML数据并将其转换成VRML后[6],由安装在浏览器中的VRML解释器处理得到最后场景的更新。
图3 虚拟展销平台系统效果图
3 结束语
VRML中引用Java程序可以得到许多其自身不能实现的场景交互,若将Java用于后台,通过AJAX作为两者联系的纽带,即在客户端和服务器之间增加一个中间层—AJAX引擎,不仅避免了两者直接结合的不足之处,而且异步传输方式也大大改观了虚拟现实交互的真实性和响应速度。此外,XML的使用很好地解决了数据存储与传输问题。
参考文献:
[1]闵联营,邓清珊.虚拟现实及其应用[J].交通与计算机, 2000,18(5):41-44.
[2]汪兴谦. VRML与Java编程实例讲解[M]. 北京:中国水利水电出版社,2002:83-111.
[3]王汝传.基于Java和VRML虚拟场景通信方式的研究[J].系统仿真学报, 2003,15(7):986-989.
[4]Jesse James Garrett. Ajax: A New Approach to Web Applications[EB/OL].http://www.adaptivepath.com/ideas/essays/archives/000385.php,2005-2.
[5]游丽贞,郭宇春,李纯喜. AJAX引擎的原理和应用[J]. 微计算机信息, 2006,22(2-3):205-207.
[6]陈婷,周家纪,杨宁. 基于VRML-AJAX的分布式虚拟现实应用[J].微电子学与计算机, 2006,23(S1): 272-274.
收稿日期:2008-01-12
作者简介:邱桥春(1982-),男,湖南省祁东人,硕士研究生,研究方向为计算机网络技术;闵联营(1956-),男,副教授,湖北省武汉人,主要研究方向为计算机网络、嵌入式系统;薛颖(1983-),女,湖北省武汉人,硕士研究生,主要研究方向为计算机网络技术。