APP下载

用VRML技术实现和数据库的连接研究

2008-10-24郭立晖

总裁 2008年6期
关键词:数据库

姚 琦 郭立晖

摘 要:虚拟现实的发展前景诱人,在某种意义上说它将改变人们的思维方式,会改变人们对世界、自己、空间和时间的看法。它是一项发展中的、具有深远的潜在应用方向的新技术。

关键词:VRMl技术;数据库;JAVA

1 VRML概述

Internet和3D技术的发展,使得第一代的二维网络世界不再满足人们对互联网的需求,取而代之是逼真的基于Internet的三维实体世界,为此,以VRML为基础的第二代万维网(第二代万维网=多媒体+虚拟现实+因特网)进入了我们的视角,虚拟现实技术也成为一个在当今国际上倍受关注的科研课题,也愈发表现出巨大的潜力和光明的前景。

目前它的应用领域十分广泛,主要在军事领域、医疗、教育培训领域、博物馆与文物保护、城市规划领域、在石油工业中的应用、数据可视化、飞行模拟、多媒体远程教育、临床外科、艺术创作、游戏、娱乐等方面。

2 VRML工作原理

VRML文件是以扩展名为wrl结尾的一种用来描述几何形体的ASCII文本文件,它不需要任何编译,直接由浏览器解释执行。当用户打开VRML文件时,系统首先装入一个内嵌的VRML浏览器,该浏览器将VRML语言中的信息解释成空间中目标的几何形体描述,如长方体,球体,不规则的其他三维物等等,同时它将提供实时显示,一秒显示多次,这样在用户的计算机上就会有一个活动场景的感觉。

3 VRML执行模式

执行模式如图1:

4 VRML的JAVA支持

尽管VRML是一个有力的3D语言,但其更大的功能来自于它能够用Java程序设计语言去建立复杂、交互的界面。Java主要讨论对象行为,但很少涉及外部特征,而VRML则着重于外表,不太考虑对象行为,可以说,Java和VRML相互补充。随着网络技术的发展,Java和VRML的关系将更加紧密。

VRML为我们提供了一个与场景外的程序想结合的节点—Script节点。我们可以通过Script节点来控制在VRML中的行为,我们也可以使用Java编程语言编写,然后通过执行模式连接到场景中去。事实上,Script节点就是利用Java语言编写的脚本来扩展VRML的功能的。

5 VRML对数据库的访问

任何一项有规模的计算机应用都使用大量的信息,因而不能脱离对数据库的访问。VRML文件访问数据库可以通过锚点和脚本两种方式,一种是通过锚(Anchor)节点访问,第二种是通过脚本(Script)访问。这里我们主要介绍第二种方法。

VRML提供了一个与场景外的程序相结合的Script节点。从其语法中我们可以发现它有个url域值,这个域值指定了一个按优先级排列的URL列表,存放程序脚本的URL地址或其本身就为程序脚本。程序脚本是由任何VRML浏览器支持的语言编写的,可以为JavaScript、VrmlScript、JAVA语言所编写的程序。为此,可以在Script节点中用JavaScript编写连接数据库的程序,也可以用JAVA来编写,不过这种语言要经过编译形成*.class文件后,再在url域值中指定JAVA程序的地址。

整个设计工作采用B/S结构,分为客户端和服务器端两个模块。两者都与操作系统无关,可以跨平台运行。系统结构如下:

服务器端包括Web服务器和研究设计编写的程序。它的功能主要是响应客户端访问的各种请求,如查询的属性数据信息。客户端需要支持Java(JDK1.2以下)的浏览器(要求安装微软件的Java虚拟机),并且安装了支持VRML浏览的插件。

在设计实验中,采用JDBC作为数据引擎,使用户所关注的场景数据信息得到数据库的支持。其实现模型如图3:

其中,嵌入在Web页中的VRML虚拟场景是整个设计的终端,即用户界面层,用户最终在这个三维的虚拟境界中漫游;真正意义上的中间业务逻辑层是Java Applet小程序,它实现了两个接口:与VRML通信的EAI接口,以及与后台数据库通信的JDBC数据引擎。在该模型中,在同一HTML页面中同时嵌入一个VRMl虚拟境界和两个Java Applet,在Applet中含有与VRML有关的EAI代码和与数据库关联的JDBC代码。这样来自于VRML或Applet上的事件就可以通过EAI和JDBC与VRML场景或数据库中相应的信息进行数据通信,并将相应的信息格式化后在Applet上和VRML场景中显示出来。

Java对VRML的所有支持都通过附加的封装类实现。通过这些类,Java程序就能够访问VRML场景、接受和发送事件、从页面上得到VRML对象等,实现对VRML场景的完全控制。总的说来,VRML与JAVA程序之间交互的执行有三种解决方法:

第一类是API的方法,执行模式是基于过程的。这种方法便于程序的编写,同时又可以简化场景,但对于浏览器来说,它有可能无法得到足够的场景信息。

第二类是通过语言的方法,就是将VRML的3D数据完全转化为程序语言,这种方法与API的方法完全相反,它可以使浏览器得到场景的完整信息,也具有基本语言的控制结构,但它却引起文件过大,不适合用于网络的传输。

第三类是基于事件的方法,它是使用事件机制和路由,即利用上文中提到的Script节点。它是通过eventIn将事件传至Script节点中的脚本;在Script节点中的脚本中调用相应的Java类进行处理;通过eventOut将结果送回到VRML场景以实物动画或交互。其过程大致如图

4所示:

上面的三类解决方法中,第三类方法是目前采用的最多的一种实现VRML和JAVA结合交互的方法。下面对这种方法做详尽的介绍。根据访问方式的不同,又可分为:脚本编程接口SAI(Script Authoring Interface) 交互和外部编程接口EAI(External Authoring Interface) 交互。这里我们主要介绍外部编程接口EAI交互。

VRML97标准提供的EAI定义了外部环境怎样通过VRML现存的事件驱动模式来访问VRML内部的节点的一系列方法,实现了Applet与VRML场景的通信。EAI包含浏览器脚本接口的全部功能,例如查询浏览器的状态,增加或删除路由,生成新的节点等功能。其事件传递机制为:

Java主要使用Browser和Node两个类(vrml.external包),以及其它一些如处理eventIn域和eventOut域的各个属性类(EventIn、EventOut)和处理例外的各种Exception类完成对EAI的描述。

Browser类提供了三个方法:getBrowser(AppletpApplet)、getBrowser(Applet pApplet,String frameName,int index)和getNode(String name)方法。

正是因为有了vrml.external包提供的Browser和Node类,于是我们完全可以通过Browser和Node类,抛弃Script节点和Script类甚至路由而现实对VRML文件的各种节点即Node类的各个实例直接操控。但getBrowser()方法的参数必须是Applet的实例,因而该方法只能通过Applet来控制VRML。

EAI主要用来提供与外部环境相互通信的能力,从VRML浏览器外部获取场景节点和事件结构。而SAI则偏重于虚拟场景内部情况的处理,在浏览器内部对场景的节点进行访问。总之,很多功能既可以通过SAI接口也可以通过EAI接口实现,一般来说,对于单一的VRML事件进行交互及运算功能可选择内部的Script节点,即SAI接口来实现,若需集成多种媒体,并进行复杂的网络控制,则更适合通过EAI接口与Java语言相结合实现更复杂的功能。

在虚拟现实的很多系统的设计与实现中都需要进行与数据库服务器的通信,同时也要做比较复杂的用户界面控制,因此,采用EAI接口做为VRML场景与Java程序进行数据通信的接口更为合理。

猜你喜欢

数据库
数据库
数据库
数据库
数据库
数据库
数据库