Graphics 版 (精华区)

发信人: leonado (##小:妖:发:呆:勒##), 信区: Graphics
标  题: 虚拟现实之高级技巧(三)
发信站: 哈工大紫丁香 (2001年01月07日19:19:39 星期天), 转信

我们在上一讲中,向大家介绍了虚拟现实场景的互动控制原理,同时也简要谈了插入场
景进行控制的程序的基本情况,在这一篇中我们先从决定场景中事件产生的不同原因开
始谈起。
  VRML场景中有两种方式决定事件的产生,我们称之为静态行为与动态行为,静态行
为并不是字面上所说的静止,而是说场景中的运动的执行模式和定义的新结点相结合达
到的,并没有需要使用程序,由于它的控制运动的这一方法,所以在功能上有一定的局
限。比如说我们在上一篇中所谈到的人与背包的运动,他们之间是通过translation的位
置传递来统一协调的,这只是两个结点通过一个语句来结合,它也就决定了只能有一个
运动可能,当然在这个场景中是一个合适的设计,但在其它的场景中这种可预知的运动
形式也就远远不能满足需要了。这样我们就考虑了另一个方法,用一段程序逻辑去决定
事件的产生,我们称为动态行为,这一篇中我们将重点讨论动态行为。
  在VRML中不能显示场景行为改变时决策的逻辑,因为它没有结点支持这种逻辑,场
景就被限制在先前定义的结点路线上,沿先前的路线来传递先前的事件。所以我们的控
制场景事件的程序,也只能在场景的外部,VRML为我们提供了一个与场景外的程序相结
合的结点script。script结点我们在VRML结点指南中已经介绍过,在这里我们只是重点
谈谈它的url字段,可以使场景的作者通过这一字段把任意一段程序代码捆绑在script结
点上,它可以指向一个包含script结点运用的程序文件,这个文件可以是本地的,也可
以是在Internet上的任意位置,甚至它也可以直接包含一段代码。在script结点和程序
之间有两种通讯方式,一种是用事件从script结点传递数据到Java程序,一种是把程序
从Java程序反馈回场景。
我们来看下面的例子:
DEF A Script {
url"http//www.sgi.com/vrml/Test.class"
eventIn SFBool start
}
在这个例子中,script结点的eventIn提供了连接VRML和Java之间的数据,在Java中由e
vent-handler类来接收事件。在event-handler类中,Test检测事件采用了一种叫proce
sseventOut()的特殊方法,是把所有script结点传到相关的Java程序的文件输入点,这
个方法把它的参数看作类事件的例子。一个类事件定义了数据结构,该数据结构是传到
Java程序时由VRML事件转换出来的。下面是processEvent()的方法。
import vrml.*;
import vrml.field.*;
import vrml.node.*;
public class Test extends Script {
???
public void processEvent(Event e) {
???
}
}
  大家在使用时要特别小心类的名字,必须与url字段特定的文件名字相同,同时eve
nt-handler类必须是先前定义的类的子集。script类是一个公共类,被定义为vrml.nod
e包,并且提供许多命令来管理VRML结点和Java程序之间的连接。同时场景浏览时程序对
event-handler类的调用类似于Java Applet的方法。

--
美女说:“小妖,你很可爱丫...”
小妖刚要把那段“我已经尽可能的掩饰我的锋芒,奈何还是被慧眼人看出”云云背出来...
美女却扬长而去...>Q<

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.230.141]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.134毫秒