vrml与外界交互的方法

VRML交互技术可分为两种情况:一种情况是通过Script节点与JAVA结合,另一种情况是通过EAI接口技术。
1) JAVA程序与Script节点间的数据传递
简单地说就是:通过eventIn将事件传至Script节点中的脚本;在Script节点中的脚本中进行处理;通过eventOut将结果送回Script节点[26]。
①从Script节点传递数据到JAVA程序。事实上,对JAVA程序而言,必须有一个入事件来激发它执行,否则,JAVA程序一般不会自动执行。这需要我们从Script节点传递数据到JAVA程序中去,以激发它的执行。
②JAVA程序对数据进行处理。当Script节点通过eventIn接口将数据传递至JAVA程序后,JAVA程序需要有一种方法来接收到达的数据,或者可以说是事件。这种方法是一种类,它可以控制一切从Script节点传递至JAVA程序的事件。这种类通常被称为event-handler类。
③在从Script节点的各字段读取的值进行处理后,我们可能需要将结果写回到Script节点中。为了实现这个目的,首先,我们必须在Script节点与JAVA程序之间建立一个映射,同时初始化指向VRML场景的程序变量,这是在initialize()方法中完成的。在映射并初始化后,我们可通过setValue()进行赋值,同时将值传递给VRML中的某一字段。就这样,JAVA程序从Script节点中获取数据,在进行数据处理后,又将值写入Script节点中,从而完成整个程序运行。基本结构如下:
public class sample extends Script{
……
public void initialize(){}//初始化
……
public void processEvent(Event e){}//事件处理
}
2) 外部创作接口EAI
使用EAI(External Authoring Interface)[27],可以通过EAI为VRML与外部世界建立一个通信接口,使用户通过这个接口真正成为VRML中的一个角色,一个参与者。事实上,EAI之所以能成为这样一个创作接口,是因为它定义了一套针对VRML浏览器的Java类。通过这些类,外部环境可以访问当前所运行的VRML世界,从而在外部直接操作、控制和修改VRML世界内部的场景。EAI在VRML的事件模型的基础上,实现了三种类型的VRML场景的访问:①访问VRML场景的节点。②发送eventIn事件给场景中的某一节点。③读取场景中某一节点的eventOut事件。另外,我们希望每当一个新的eventOut产生时,Applet便能自动调用一个例程来处理,EAI提供了一种监听eventOut的机制。
EAI接口以JAVA的小程序Applet来实现对虚拟环境中物体的控制。其主要结构为
public class sample extends Applet
{
   public void start(){}//监听虚拟环境中的信息。
public void init(){}//初始化接口数据
public boolean handleEvent(Event event){}//事件处理

}

下面说明一下页面中的JavaScript代码与VRML世界是如何实现互访和沟通的。JavaScript访问VRML节点可以使用如下语句:
document.all.ObjectName.Engine.Nodes("节点名");
对节点域的访问:
document.all.ObjectName.Engine.Nodes("节点名").Fields("域名")
在VRML节点中访问Javascript函数可以使用如下语句:
Browser.loadURL('javascript:函数名 ('+参数 +');','');
实际上此语句本来是用来把其他网页导入浏览器而取代当前页面的。由于URL地址为JavaScript: 函数名(参数),所以浏览器不会转换本页面。而是按我们的要求调用当前页面的Script当中的函数。这样,JavaScript和VRML世界的良好沟通正是本系统得以实现的技术基础之一。
vrml与java相结合的虚拟系统可以通过vrml中触发器,时间传感器以及相应的路由,对用户的点击事件的时间和方位作出准确的判断,使用户和场景中的物体交互操作。通过java对正确的操作拆装顺序进行记录。这些信息在用户操作时,反映到控制台上,指导用户的操作。
例如:
if(e.getName().equals("ld1click")==true){
if (ismove("bolt")==true)
{
System.out.println("disasssemble the bolt1.");
ld1start.setValue((ConstSFTime)e.getValue());
isld1=true;
}
else
System.out.println("You can not move the bolt!");
}
以上程序段是一个螺钉的拆卸过程的代码,其意思是:当操作者触发螺钉时,如果螺钉是可以移动的,将拆卸螺钉的信息发送到控制台,并将螺钉沿拆装路径运动的开始时间发动到虚拟环境中;否则,将螺钉不能移动的状态信息发送到控制台。
 

你可能感兴趣的:(接口,技术,休闲,java程序,种类)