基于VRML及JavaScript的交互式三维虚拟电子示波器建造
2013-11-01吴迪
吴 迪
(大连大学 物理科学与技术学院,辽宁 大连 116622)
0 引 言
许多学校都建立了大学物理实验网站,学生可以登陆网站学习实验原理、操作方法等内容。但目前的网站大多是二维平面展示,或有动画描述实验过程,而这一过程也是由程序编制者事先设定好的,只能按照一定的路线执行,与实验的实际情况不符,真实感不强,不能给学生身临其境的感觉,学生很难详尽了解相关仪器设备的整体概况,这些二维的显示方法已经不能满足人们的需要。虚拟现实(virtual reality)是一种可以用来创建并体验虚拟世界的计算机系统,是计算机模拟出来的虚拟环境。此虚拟环境是由编写的计算机程序生成的,用户可以通过所操作的计算机进入到这个环境并能操纵环境中的对象达到交互的目的[1-3]。VRML是一种三维场景的描述性语言,是第二代 Web上的关键技术,也是在Internet网络上能够实现虚拟现实的关键性技术[4-6]。在Internet上传输少量数据就可以在 Web上实现三维虚拟场景浏览功能,克服了其他三维立体模拟软件的缺点。因而采用VRML开发三维虚拟现实实验应该是解决这些问题的一种好方法[7-8]。首先虚拟现实实验中学生可沉浸在三维的、立体的环境中,这是符合人们日常生活习惯的;其次在创建的虚拟环境中学生不是被动地感受事物,而是可以通过自己的活动去改变所感受的内容。采用VRML技术创建的三维虚拟现实实验可以不受时间、地域的限制,学生或者教师可以自由地、无顾虑地随时进入到虚拟实验室中操作仪器设备,而他只需要在联接到互联网上的计算机浏览器上安装VRML插件,如Cortona、Blaxxun Contact或Cosmoplayer等任意一种就可以进行各种实验。显然虚拟现实实验可以留给学生更多的思考时间和想象空间,从实验仪器的构造原理到它们的使用方法;从测试公式的创建到实验环境的搭建,完全由学生自己进行设计、组建,提高学生们学习的兴趣,增加学生学习的时间,增加他们分析问题的时间,充分调动其主观能动性。
但目前所开发的三维研究项目中大多存在交互性较弱以及沉浸感不强等问题。本文以电子示波器实验为例就虚拟实验中复杂运动中交互控制的方法进行深入研究。VRML本身不能进行复杂交互设计,因而对于像仪器调整等这样完成复杂功能的交互式操作就不能只由VRML来完成。为了能够实现所创建的虚拟环境本身与操作者之间的复杂交互,就要利用虚拟空间与操作环境之间的接口来实现其与用户间的交互,可以通过采用JavaScript编程实现这种功能[9-11],讨论VRML中Script节点的应用方法,并且最终建立具有交互操作功能的虚拟三维电子示波器实验,很好地实现了复杂运动的交互控制功能。
1 交互控制原理
虚拟场景的交互功能可以通过VRML节点来实现。一个节点状态的变化可以引起另外一个节点状态的变化。在VRML中,通常将状态的变化记为一个“事件”,发生变化的节点接受“输入事件”,而引起其他节点变化的节点发出“输出事件”。VRML提供了许多种感知器节点,比如TouchSensor节点,它可以接收鼠标点击形体的动作并使程序发生相应的变化,如发出声音、改变颜色等;有可使通过鼠标移动来转变形体绕坐标轴旋转运动的CylinderSensor节点;有可以检测观察者接近的ProximitySensor节点,利用它们可控制其他操作,如发出声音,让形体颜色变化、让形体运动等;还有时间传感器TimeSensor节点等。
图1 VRML联动动画原理图
VRML空间中各节点间的数据交换可以用来实现场景中的物体实现一些简单行为的交互动作,比如打开开关时灯会亮、接近自动门时门会自动打开等。通过路由及感知器节点基本上可以实现场景的简单交互控制。对于较复杂的交互控制,VRML采用Script节点实现这种功能。Script节点中的域指定一段实现事件处理的JavaScript或VRMLScript脚本,然后把程序中计算得到的结果递交给Script节点的输出事件,再通过路由将该事件传递给场景中某对象相关的域,以达到改变场景的目的,实现过程框图如图1所示。
2 虚拟示波器交互控制功能实现
虚拟示波器主要向用户提供一个尽可能真实的仿真仪器和环境,可以通过VRMLPad或vrbuild[12]等软件直接建造三维实验模型,文件占用的字节数较少,适宜在网络上运行;也可采用3DMAX等软件建造再转换成VRML格式文件,但缺点是形成的文件比较大,影响在网络上运行的速度及质量。建造的三维示波器模型如图2所示。用户可以在其中自由操作虚拟示波器的各种球形旋钮,对示波器的各种功能进行研究,这个过程是通过人机交互来实现的。VRML允许用户的行为能够实时作用于场景,场景节点通过EventIn接受事件,通过EventOut发出事件,通过路由将一个节点的事件出口和另一个节点的事件入口联系成为事件体系使VRML具有动态交互能力。但VRML语言本身所能完成的交互功能是有限的,要实现复杂的联动交互控制功能还需要通过脚本语言来实现。VRML提供了一个Script脚本节点,通过该节点就可以实现复杂交互操作和逻辑控制等功能。Script节点允许用户创建自己的域(field)和事件,其中包括EventIn入事件和EventOut出事件,再通过节点内部程序的编写来完成目标功能。它支持多种脚本语言,如JavaScript,VRMLScript,VBScript等。
图2 扫描时间调节
2.1 定义放大的球状电子观察其运动
使用语句USE定义电子阵列。
2.2 定义控制开关
打开开关后电子开始做正弦运动,实现联动效果。场景中传感器节点通常定义了触发事件,它通过路由发送给场景中的其他节点的入事件。如传感器节点的触发事件直接传递到插补器节点产生关键值插值,也可以传递Script节点进行运算处理产生关键值插值。
2.3 定义时间传感器(TimeSensor)
TimeSensor用来执行开始、停止及其他控制动画的动作,它通过定时产生事件来表示时间的变化。
2.4 事件驱动
场景的变化需要一系列的变化数值,产生变化数值的节点可以是插补器节点或者Script节点。域值通过Route语句传送,由节点的入事件接收并处理。Script结点在VRML场景中不被显示,其工作原理如图1所示。Script结点也可以由若干个入事件、出事件和包含脚本程序的url域等构成。其中入事件EventIn用来接收来自其他节点的出事件,并交给对应的同名函数进行处理。url域中的处理函数计算出新的数值,并通过节点的出事件EventOut发送出去。
图3 y增益调节
2.5 路由(Route)语句
Route语句把一个节点的事件EventOut连接到另一个节点的事件EventIn,从而建立指定节点的域之间的通道。Route语句由出事件激活,当发生一个出事件的时候,包含该事件EventOut的Route语句就被调用,对应的事件EventIn就会接收到信息,同时可以对事件EventIn做出相应的处理,从而改变节点的状态,实现电子的正弦运动。
3 结 论
通过使用VRML的Script节点编程实现了基于VRML技术的虚拟实验交互控制技术,设计实现了具有交互控制功能的电子示波器实验。采用高级语言如JavaScript或VRMLScript等与VRML混合编程弥补了VRML自身如逻辑判断、场景精确控制等不足问题。利用虚拟现实系统,可以弥补实验场地、设备以及教学经费不足等的影响。开发的系统基于B/S模式,程序的运行、开发和维护都是在服务器端进行的,系统易于扩展功能,灵活方便、安全可靠。虚拟现实技术发展前景十分诱人,特别是与互联网络的结合,在某种意义上说它将改变人们对空间和时间的看法。利用它开发虚拟实验教学系统必将对教育、教学质量的提高,学生学习兴趣及能力的培养起到积极而重要的作用。
[1]王瑛.基于 VRML的虚拟实验的研究与设计[J].计算机技术与发展,2013,23(5):239-242.
[2]吴迪,刘军,吴亿维,等.基于Simulink和VR技术的三线摆实验仿真研究[J].沈阳师范大学学报:自然科学版,2012,30(2):185-187.
[3]曹咏弘,范荣强,范锦彪,等.基于虚拟现实的弹丸时空位置再现技术研究[J].弹箭与制导学报,2010,30(1):91-94.
[4]黄文丽,卢碧红,杨志刚,等.VRML语言入门与应用[M].北京:中国铁道出版社,2003.
[5]吴北新.虚拟现实建模语言VRML[M].北京:高等教育出版社,2004.
[6]LU C H.Introduction and enhancement of VRML[M].Beijing:Peking university press,2003,201-202.
[7]顾冬华,王俊杰,杨立.虚拟现实技术应用于电工实验课教学的尝试[J].中国现代教育装备,2010(13):55-56.
[8]余东先,杜纪霞.基于 VRML-JAVA远程虚拟教学系统的设计与开发[J].河南科学,2010,28(5):600-604.
[9]王昊鹏.VRML基于高程格网节点的复杂造型研究[J].微计算机信息,2006,22(1):211-212.
[10]吴迪,吴亿维,刘军,等.基于VRML及JavaScript的气垫导轨上交互式三维虚拟实验[J].物理实验,2012,32(6):17-20.
[11]王建中,李定国,张家昌,等.基于VRML的工程热物理虚拟实验教学系统[J].实验室研究与探索,2006,25(12):1530-1532.
[12]LIGOS C.V·RealmTMbuilder user's guide and reference[EB/OL].[2011-10-05].http:∥www.few.vu.nl/~eliens/documents/vrml/V-Realm.