文档介绍:虚拟现实技术
主讲:杨文晖
7 VRML通用接口节点
主要讲述VRML与各种语言工具的通用接口。
VRML主要通过Script脚本节点和Java语言接口与外部联系,还可以使用锚节点实现VRML场景之间的调用和外部程序的联系,并且利用锚节点直接上网。
讲述了HTML与VRML之间的调用。
此外,用户可以根据软件开发的需要创建自己的新节点,进而使用这些新节点创建所需要的各种场景和造型。
Script脚本节点
Script脚本节点可以描述一些由用户自定义制作的检测器和插补器。
这些检测器和插补器需要一些有关域、事件出口和事件入口的列表及处理这些操作时所须做的事情。
因此该节点又定义了一个包含程序脚本节点的域( 注意不能定义exposedField )、事件出口和事件入口及描述用户自定义制作的检测器和插补器所做的事情。
Script 节点可以出现在文件的顶层,或者作为成组节点的子节点。
Script脚本节点语法
在Script脚本节点中,可由用户定义一些域、入事件和出事件等,所以Script脚本节点的结构与前面介绍的VRML节点有所不同。Script脚本节点语法结构如图
Group 组节点
Background 背景节点
TouchSensor触摸节点
Inline 内联节点
ROUTE 路由
Viewpoint 视点节点
TimeSensor 时间传感器节点
Script脚本节点
Script节点语法
Script{
url [ ] #exposedField MFString
mustEvaluat FALSE #field SFBool
directOutput FALSE #field SFBool
#And any number of 以下域或事件由用户定义任意多个
field fieldType fieldName initialValue
eventIn eventInType eventInName
eventOut eventOutType eventOutName
}
域或事件
域或事件的类型名
域或事件的名
域的初始值
域名和域值详解
url域的域值
定义了一个URL列表。
该列表中的URL值所指定的程序脚本可以是由任何VRML浏览器支持的语言写成的,通常是VRML浏览器支持的Java语言和JavaScript语言
而且JavaScript的函数和指令可以直接包含在url域中。
该域默认值是一个URL空列表。
mustEvaluate域的域值
是一个布尔量。
它定义了程序脚本是如何进行求值的。
当该域值为TRUE时,每当由节点的eventIn事件接收到一个新值时,浏览器就立即对该程序脚本进行计算;
当该域值为FALSE时,则浏览器在此脚本不影响环境中任何可视部分的情况下,推迟对脚本的计算,等到比较合适的时间再来处理。
这样就会出现事件到节点的传送和计算节点处理该事件动作的延迟。此时如果多个事件被传送,待处理的事件列表就会变长。
为了尽量使其性能达到最优,mustEvaluate域值应设定为FALSE,因为浏览器的性能取决于一个事件被发出后必须进行计算的程序脚本数目,如果将其域值设为TRUE,就会增加浏览器的工作量,从而降低画面的刷新速度和交互性。该域默认值为FALSE。
directOutput域的域值
用来说明程序脚本的输出是否受到限制。
若为TRUE时,程序脚本可以直接对它能访问的任何节点的可见域进行写操作或对任何节点的eventIn事件进行发送,而且还可以在VRML场景中增加或删除一条通路;
若为FALSE时,程序脚本不能直接发送事件,但可以访问。
通常情况下,应将directOutput域值设为FALSE,其默认值为FALSE。
Script节点可定义多个域和事件(入事件和出事件)。接口域、接口eventIn和接口eventOut都可以任意取名字,但必须遵循DEF的命名约定。按照VRML的约定,要区分大小写,名字必须以小写字母开头,而且名字的每个子序列单词都必须大写,允许在名字中使用下划线和阿拉伯数字。
Script脚本节点实例
[实例7-1] 使用Script节点创建动画效果,将飞船发射送太空;当用户单击VRML立体空间的飞船造型时,飞船将离开地球飞往太空.