APP下载

基于VRML 和Java Applet 的动态交互场景的构建

2019-11-05李兰

现代计算机 2019年27期
关键词:实例浏览器动态

李兰

(山西师范大学现代文理学院,临汾041004)

0 引言

VRML 是跨平台的虚拟现实建模语言,在网络环境中构建三维虚拟场景[1]。VRML 文件规模较小,可以直接嵌入到HTML 文件中去,在一般的浏览器中安装适当的插件就可以超空间的浏览行为仿真,因而在网络制造、虚拟漫游以及计算机动画中得到广泛的应用[2]。

Java 是跨平台的网络分布式计算环境中广泛使用的编程语言,具有强大的编程能力。Java Applet(Java小应用程序)是一种可以加载到Web 页面,由浏览器调用执行的Java 程序,可使Web 页面更加动态、更具交互性[3]。VRML 与Java Applet 的结合能够真正意义上实现动态交互的虚拟场景[4]。

1 VRML交互机制

交互功能是VRML 的一个重要特点,通过交互能使用户在虚拟场景中有身临其境的感觉。交互可通过三种方式实现:传感器节点的交互,Script 节点的交互及EAI 接口的交互。

VRML 中使用传感器节点(时间传感器除外)完成感知浏览者的操作或者在场景中的观察位置,然后对此做出反应的交互功能。常用的有触摸传感器Touch-Sensor 节点感知用户鼠标触发动作;平面传感器Plane-Sensor 节点感知用户鼠标拖曳动作;圆柱体传感器CylinderSensor 节点感知用户绕中心轴拖拽旋转的动作;接近传感器ProximitySensor 节点感知用户所在方位;碰撞传感器Collision 节点感知造型与用户发生碰撞动作,传感器一旦感应到事件的发生,将不断输出该事件到目标节点,从而触发目标的动态效果,使虚拟现实效果更加逼真,但传感器能感应的事件有限,因而交互行为也有限[5]。

VRML 脚本节点Script 用以描述一个由用户自定义的传感器或插补器,通过URL 域包含一组浏览器支持的任何一种语言编写的程序或叫脚本,在产生出事件之前执行计算或处理,并将结果发送到VRML 场景,可以使交互更加灵活[6]。

Script 节点只能绑定程序按照预定规则改变场景,实现静态虚拟效果及简单交互等功能。对虚拟场景与用户的交互、多用户间的交互及网络通讯能力等更具一般性的行为,则需利用EAI 接口的交互实现。EAI的基本思想是外部程序能够通过VRML 事件模型访问VRML 场景节点,从而控制VRML 场景,外部程序即Java Applet,它与VRML 同在HTML 页面中,建立了与VRML 的通信接口,并可与外部数据库建立连接,从而使用户与虚拟场景实现动态交互,真正成为VRML 中的一个角色,一个参与者[7]。

2 整体架构

基于VRML 和Java Applet 相结合的动态交互场景的整体架构如图1 所示。整个系统分为3 层:应用层、实现层和资源层。其中应用层是HTML 界面,VRML 和Java Applet 置于同Web 页面,运行时则在同一个浏览器环境中。VRML 提供虚拟现实的三维场景,Java Applet 则提供实现用户交互的控件,用以控制场景和实时显示动态参数;实现层用Java Applet 编制的程序作为仿真控制的引擎,一方面连接数据库,把数据库的数据传送到场景中,另一方面建立与VRML 场景的接口,用来驱动场景的动态生成与用户的交互等;资源层是用数据库管理系统搭建的数据库,可以存储并更新场景的全部数据参数。其中Java Applet 与数据库的连接接口用JDBC 来完成,Applet 与VRML 的接口用EAI 技术来实现。

图1 动态交互场景的整体架构

3 具体实现

3.1 用户界面及工作流程

系统采用的是浏览器/服务器模式,系统运行用到的程序代码和数据均在服务器上存放,客户端只需要安装浏览器和必要的VRML 插件。HTML 界面包括两部分:VRML 场景和Java Applet 控件,其中Java Applet控件包括按钮、文本框等。HTML 文档中Java Applet程序.class 使用标记,VRML 文件.wrl 使用标记[8]嵌在同一Web 页。其工作流程如图2所示。

图2 工作流程

在用户界面上,首先点击“连接数据库”按钮进行初始化,完成数据库的连接操作,系统返回可供Java Applet 程序使用的静态场景数据和动态运动空间位置等参数,并动态生成静态场景。用户点击“开始”按钮,Applet 读取并传输数据至VRML 场景,进行动态交互;同时把相关的数据信息显示在用户界面。点击“停止”按钮,中止此次仿真。

3.2 VRML与Java Applet接口实现

EAI 接口定义了一套针对VRML 浏览器的Java类,其中类vrml external Browser 至关重要,是实现EAI访问的基础[9]。浏览器类(Browser)实际上是VRML 场景的一个Java 封装,包括全部的脚本语言接口,重要的是包含有getNode()方法。通过该方法可获得一个Node 类的实例,即为VRML 场景中造型节点在Java Applet 中的对应节点。因此通信之初要先创建一个浏览器类的实例,方法如下所示:

Browser browser=Browser.getBrowser();

Browser 类实例化后,EAI 即可访问VRML 场景的节点、往eventIn 域发送事件、eventOut 域发出事件及监听eventOut 域,下面分别阐述。

(1)访问节点

VRML 场景中的节点通过浏览器类的getNode()方法实例化,其eventIn 和eventOut 则通过Node 类的getEventIn()和getEventOut()方法实例化为Applet 中的对应体,将域名以字符串参数传入,实例化为EventIn 或者是EventOut。ExposedField 域也允许访问,事件入口需在域名前加set_作为前缀,事件出口需在域名后加_changed 作为后缀。三维场景中已经定义moxing 节点,其实例的获得方法如下所示:

Node moxing=browser.getNode(“moxing”);

(2)往eventIn 域发送事件

将被访问节点的eventIn 类实例化,即可向场景中该节点发送事件,由于eventIn 是抽象类,必须先强制转换成合适的如EventInSFVec3f 等eventIn 类的子类,才可以提供发送事件的方法。例设置moxing 节点的EventInSFVec3f 类的scale 输入值,如下所示:

EventInSFVec3f scale=(EventInSFVec3f)moxing.getEventIn(“set_scale”);

(3)eventOut 域发出事件

将被访问节点的EventOut 类实例化,即可获取场景中目标节点eventOut 域的当前值,也可在eventOut域发出事件时设置callback()方法。eventOut 类同eventIn 一样也是抽象类,必须先强制转换成合适的eventOut 类的子类,才可获取eventOut 当前值的方法。例取得moxing 节点的EventInSFVec3f 类的scale输出值,如下所示:

scale=((EventOutSFVec3f)moxing.getEventOut(“scale_changed”))).getValue();

(4)监听eventOut 域

当场景目标节点的eventOut 域有新值产生时,EAI提供的监听机制可使Applet 实时反应并进行相应的后续处理。具体实现是先将接口类EventOutObserver 类的子类实例化,调用其advise()方法监听场景节点的eventOut,发现eventOut 有输出,EventOutObserver 子类的callback()方法会自动执行。例监听moxing 节点的scale 域发生变化,如下所示:

moxing.getEventOut(“set_scale”).advise(observer,null);

3.3 Java Applet与数据库接口连接

Java Applet 与数据库通过JDBC(Java Database Connectivity)连接,JDBC 是Java 语言编写的类和接口,允许Applet 对远程数据库进行访问、获取及更新数据等操作。利用JDBC 接口将Java Applet 与数据库连接的一般步骤有:建立数据源;加载由数据库类型决定的驱动程序;建立与某个数据源的连接;发送SQL 语句;处理返回的ResultSet 类的对象,将查询结果最后显示给用户;关闭连接;捕获异常,尤其是当新建连接、驱动程序加载、语句执行、类型转换等操作发生时的异常。

4 应用实例

图3 为贴装机贴装场景实例。用EAI 实现在同一HTML 页面中三维虚拟世界的浏览(用VRML 创建)和场景的交互(Java Applet 实现),用户界面包括三个按钮(“连接数据库”、“开始”、“停止”)和几个文本显示框,其中按钮用来控制程序的执行,文本框用于动态显示贴装过程参数。

图3 贴装机贴装场景实例

5 结语

VRML 作为虚拟现实标准建模语言,侧重对三维空间场景模型的搭建,复杂交互功能的实现必须借助于Java 等功能强大的高级语言,这样才能让用户真正成为场景的直接参与者与控制者。本文详细论述以Java Applet 作为控制的核心、VRML 场景为三维展示的平台,借助EAI 构建一个三维交互式虚拟场景的方法,以期为VRML 的研究与应用做进一步探索。

猜你喜欢

实例浏览器动态
国内动态
国内动态
国内动态
动态
微软发布新Edge浏览器预览版下载换装Chrome内核
完形填空Ⅱ
完形填空Ⅰ
浏览器
lE8设置技巧大放送