- 最后登录
- 2024-6-3
- 注册时间
- 2009-10-16
- 阅读权限
- 100
- 积分
- 18803
  
- 纳金币
- 17488
- 精华
- 1
|
VRML能够支持动态的、交互式的3D场景,但自身交互性不强; Java能够自由运用于3D场景,是一种高性能的程序设计语言,灵活性大、计算能力强。两者的有机融合使动态交互三维虚拟空间成为可能。本文就虚拟实验中复杂运动的交互与控制方法进行了研究,重点讨论了VRML的外部交互方法:VRML中Scrip t节点的添加、与Java的通信机制、节点中的Java程序以及执行中的调用次序。最后给出一个虚拟物理实验———导线切割磁力线的具体实现范例。
关键词:虚拟实验; 交互控制;
VRML; Java
In teracting and Con trolling of Complica ted Action s in Virtua l Exper imen ts L IXin( Education College of Zhejiang NormalUniversity, J inhua 321004, China)Abstract:VRML can sustain dynamic and interactive 3D scenes, but its auto - interaction is not obvious; Java is a high - pow2 ered p rogramming language that can be freely used in 3D scenes and has the advantages of flexibility and strong computing power.Their organic amalgamation achieves the dynamic interaction of 3D virtual space. This article researches on the interacting and controlling methods of comp licated actions in virtual experiments, stresses the methods of interactionswith exterior: the adding of Scrip t nodes in VRML, the communicating system with Java, Java p rogramming in nods and the transferring orders in p roceeding.
In conclusion, the article suggests the virtual physics experiment - detailed examp les of cuttingmagnetic flux lineswith electrical wires.
Key words: virtual experiment; interactive control; VRML; Java
0 引 言
虚拟实验的设计与应用研究是当前实验教学的一个热门话题,但由于虚拟实验实现的固有难度以及各种相关技术的制约,目前所开发的虚拟实验,大多存在交互性弱、沉浸感不强、实验过程由插值动画完成等诸多问题, 没有很好地体现通过“做中学”(Learning Through Doing)来完成实践技能的培养这一实验教学目标[ 1 ] ,不能反映现实实验的本来面目,致使实验效果不甚理想。本文就虚拟实验中复杂运动的交互与控制方法进行了研究, 重点讨论VRML 的外部交互方法:VRML中Scrip t节点的添加、与Java的通信机制、节点中的Java程序以及执行中的调用次序。最后给出了虚拟物理实验———导线切割磁力线的实现结果。实验交互方式完全模拟真实的实验过程,能动态地从场景中获取用户需要的数据,实验结果反馈实时,较好地实现了复杂运动的交互与控制。
1 交互与控制的关键性技术
虚拟场景的交互是通过VRML的交互机制来实现的。具体地说,交互是通过节点来实现的。节点的交互就是一个节点某状态的变化能引起另一个节点状态的变化。VRML 中将状态的变化记为一个“事件”,引起其他节点变化的节点为“源节点”,发生变化的节点为“宿主节点”。“源节点”发出“事件输出”,“宿主节点”接受“事件输入”,节点的任何一个参量都可能成为一个“事件”。VRML提供了多种感知器,主要有: TouchSensor、CylinderSensor、TimeSensor、Position Interpolator、Color2Interpolator、ProximitySensor、SphereSensor、Visibili2 tySensor等。
VRML有统一的数据传输接口和完善的属性集合和事件集合,可接收感知器节点发送过来的数值,并根据所对应的接口属性域设置提取数据、改变自身的属性值、触发事件进而改变自己在空间中的位置、外型和显示效果,还可将处理后的数据送到输出域,传递给其他造型节点。各节点通过接口域的路由( route to)实现数据传输,路由的映射关系自由,但接口域的数据规格必须严格一致[ 2 ] 。在此,笔者按照在VRML 中是否引用第三方语
言,将交互分为内部交互和外部交互两类。下面分别讨论内部交互(VRML内部节点间的交互)和外部交互(VRML节点通过Java的接口交互)的方法。
1. 1 VRML的内部交互
VRML的内部交互是VRML 空间中各节点间的数据交互方法。内部交互可控制场景中的物体产生一些简单行为动作:如移动对象、开门关门、播放音乐并根据观测者距离音源的远近控制播放音量的大小等等。
通过route to及感知器节点实现的VRML内部交互机制,基本上能够实现场景的简单交互,但因这种变化参数是事先预备的,不够灵活,况且VRML本身并不具备普通程序设计中的转折、分支判断、循环等基本功能,因此无法完成复杂运动的交互与控制。因此,在虚拟实验系统的实际设计中,大多采用VRML的外部交互来实现复杂运动的交互与控制。
1. 2 VRML的外部交互
在外部交互中,VRML引入了Scrip t节点。其实现思想是: Scrip t节点中的域URL指定一段实现事件处理的Java程序代码或脚本JavaScrip t,然后将程序计算返回的结果递交给Scrip t节点的输出事件,再通过route to将该事件传递给场景中某对象的相关域,达到改变场景的目的;或者直接由Scrip t节点中指定的第三方程序控制VRML场景[ 3 ] 。
(1)添加Scrip t节点。
要实现复杂运动的交互与控制,首先要在VRML文件中添加Scrip t节点。Scrip t的语法格式如下:
Scrip t
{
FieldMFString url[ ]
field SFBoolmustEvaluate FALSE
field SFBool directOutput FALSE
eventIn eventTypeName eventName
eventOut eventTypeName eventName
field fieldTypeName fieldname initialValue
}
URL 可见域的值指定了一个按优先级区分的URL列表,它是MFString数据类型,即可以有多个URL字符串,它可以包含用Java或JavaScrip t编写的程序代码。除了指定行为脚本, VRML 还可以控制Scrip t节点在场景图形内部如何工作。通过设定mustEvaluate域为True或False来指定程序脚本如何求值。当此域值为True时,每当节点eventIn事件接收到一个新值后,浏览器就立即对程序脚本进行计算,即可读可写。而当此域值为False时,程序脚本就只能读不能写其它节点的可见域、eventIn 和even2tOut。当程序脚本要传递一组节点实例时,可以将该域设为True,这样就可以把事件直接发送给节点,如果该域设为False,则需要加入一个eventOut域,并为之建立相应的路由。
(2)VRML与Java的通信机制。
VRML的Scrip t节点与Java程序的调用关系如图1所示。
![]()
图1 VRML与Java的通信机制
(3)VRML的Scrip t节点中的Java程序。
在Java类程序的文件头中必须包含三个扩展的VRML类包,这个Java类必须是从Scrip t类中继承下来的。程序主要包含三个部分:首先,定义与VRML场景中Scrip t脚本节点域和eventOut相对应的私有成员变量;其次,由于这些变量都是包中的类,必须对它们进行实例化,通过初始化方法来完成;最后是对输入事件进行处理。以下是Scrip t中的Java程序脚
本框架:
Import vrml. 3 ;
Import vrml. field. 3 ;
Import vrml. node. 3 ;
Public class程序名extends Scrip t {
定义私有成员变量(与VRML脚本节点Scrip t域和由事件相对应) ;调用Scrip t类中定义initialize方法,对定义私有成员变量类实例化;对输入事件进行处理;
}
(4)执行中的调用次序。
图2 是Scrip t派生类执行过程中的调用次序,initialization ( )方法在浏览器向用户呈现场景之前,即在包含脚本的Scrip t节点所在VRML 文件中的任何节点处理事件之前;该方法所产生事件的时间戳应小于此Scrip t节点产生的其它任何事件的时间戮,这样就使得脚本初始化任务的执行优先于用户和场景的交互。初始化之后,程序脚本就等待事件输入,当有一个或一组事件输入时,就调用p rocessEvents方法,若在派生类中没有规定p rocessEvents的行为,它将使用基类的缺省行为,即将每个事件输入都转移到p rocessEvent( Event event)中单独处理,缺省行为函数定义如下:
public void p rocessEvents( int count, Event events[ ] ) {
for ( int i = 0; I < count; i + + ) {
p rocessEvent ( event[ i ] ) ;
}
}
![]()
图2 Scrip t派生类执行过程中的调用次序
eventProcessed方法在一个或多个事件被输入场景后执行,用于集中处理一系列不必考虑次序的事件输入带来的总的变化,这可减轻浏览器负荷,提高浏览质量。该方法对于一系列时戳相同的事件输入最多只执行一次;如果它在处理完具有不同时间戳的事件输入后执行,它的时间戳将取其中时间戳值最大的一个。这个方法执行的时间和次序都是不确定的。最后调用shutdown ( )方法,调用本方法的时机是相应Scrip t节点删除时,或包含此脚本的Scrip t节点的场景卸载时,或被另一个场景代替时,可以用本方法进行清理工作,如通知外部机构删除临时文件、关闭线程等等。
2 案例实现与分析
本文以中学物理实验———“直导线切割磁力线产生感应电流”为例,建立基于VRML 虚拟实验场景。直导线切割磁力线产生感应电流实验是一个最基本的电磁感应实验。它的实验要求是:当直导线切割磁力线时,电流计指针有明显的偏转,以清楚地表明感应电流的产生。
2. 1 导线切割磁力线的数学模型
实验原理:运动直导线切割磁力线产生感应电动势,在闭合电路中产生感应电流,驱动电流计指针偏
转。根据导线切割磁力线的实验原理,建立数学模型:
E =Bvlsinθ (1)
I =E
R + rA(2)
在式(1)中: E是感应电动势, B 是磁感应强度,V 是直导线的运动速度, l是直导线的有效切割长度,θ是运动方向与磁感应线的夹角;在式(2)中: R是直导线的电阻, rA 是电流表内阻。根据实验的要求,主要求得电流值I,由此确定指针的偏转角度。一般情况,磁场强度和导线长度为固定值,在使用Java编制具体脚本时,主要考虑速度V和切割夹角θ的变化对电流的影响。
2. 2 实验交互的驱动原理
根据上述建立的数学模型,通过VRML 与Java的接口来编写接口程序,即在VRML中的Scrip t节点嵌入相关的字节码程序,从而实现实验者与场景的交互。图3为数学模型驱动虚拟场景原理框图。实验者通过鼠标向虚拟场景发出操作指令,通过场景中相应的感知器产生一个输入事件,该事件通过Scrip t节点经URL路由启动相应的数学模型;此数学模型根据与Scrip t建立的数据映射关系进行运算,运算结果通过Scrip t节点产生一个输出事件,驱动虚拟场景中的对应模型产生动作,将实验结果在用户端刷新显示。
![]()
图3 数学模型驱动虚拟场景原理
2. 3 实验流程
图4是导线切割磁力线虚拟实验的程序流程框
图,按照实验的操作过程建立。
![]()
图4 虚拟实验程序流程框图
2. 4 虚拟实验场景的建立
通过在3dsmax中建模,添加相关的传感器节点,导出为3 . wrl,最终建立基于VRML 虚拟实验平台(图5) 。通过对虚拟实验场景中直导线的简单点击、拖曳操作,即可实现以不同角度和速度切割磁力线,实时显示电流指针的偏转方向和偏转角度,获得较为理想的实验效果。
![]()
图5 导线切割磁力线虚拟实验平台
3 结束语
VRML与其它实现三维场景的技术手段(如OpenGL, Cult3D, 3DSMAX, Viewpoint)相比,具有语法简单、三维建模功能强大、便于网上发布等优点。但由于VRML本身仅仅是一种标准,不可能满足各行各业的所有需要,所以复杂运动的交互与控制必须借助于Java等功能强大的高级语言,来弥补VRML本身诸如逻辑判断、精确控制场景等不足,进而实现复杂运动的交互与控制[ 4 ] 。
目前,采用上述方法设计开发的直导线切割磁力线的虚拟物理实验,已被运用到具体的教学实践中,效果良好。尽管VRML 存在一定的局限性,但不影响VRML的发展,它的下一代称为X3D,将结合Java3D和XML技术,支持最新的流技术和渲染扩展,成为三维世界的主要标准[ 5 ] 。可以预见,以VRML 为代表的网络虚拟技术在整个实验教学、产品虚拟设计、远程测试与诊断等方面有着广泛的应用前景。
参考文献:
[ 1 ] 谭敬德,徐福荫. 乔纳森建构主义的认识论特征分析及
其对教学设计发展的影响[ J ]. 现代教育技术, 2006
(1) : 13215.
[ 2 ] 黄心渊. 虚拟现实技术与应用[M ]. 北京:科学出版社,
1999.
[ 3 ] 于春生,于春水. 可与VRML交互的Java程序设计[ J ].
电子与电脑, 1999 (8) : 1212123.
[ 4 ] 曾建超,南志和. 虚拟现实的技术及其应用[M ]. 北京:
清华大学出版社, 1996.
[ 5 ] web3D Consortium. VRML97 and Related Specifications
[DB /OL ]. http: / /www. web3d. org/x3d / specifications/
vrml/ , 2007201206.
[ 6 ] 廖云伢,王建新,盛羽. 基于Java与Matlab集成的虚拟
实验平台的设计与实现[ J ]. 计算机应用, 2007, 27 (2) :
3942396.
[ 7 ] 王建中,李定国,姚陆锋. 基于VRML的P2V2T关系虚拟
实验的仿真[ J ]. 实验技术与管理, 2007, 24 ( 2 ) : 1002
102.
[ 8 ] 孙俊峰,游运华,卢洁,等. 基于VRML的心理学虚拟实
验设计与实现[ J ]. 计算机仿真, 2006, 23 (4) : 2832286. |
|