事件与路由是实现虚拟场景中动画和交互必不可少的手段。当发生某个事件时,比如时间的增加、鼠标点击对象、浏览者靠近对象等,场景中节点对象的域值会随之发生变化。造型的变化(如状态、外观、位置等)是指描述节点中的域值的变化,浏览器在处理场景对象域值变化的时候,是根据时间检测传感器以及内插节点在某一时刻对应的域值去代替场景对象原来的域值,它并没有改变VRML文件本身。
例如,要设计这样一个场景:当用户的鼠标指针移动到某个对象上时,造型的颜色发生变化。可使用检测器节点检测到用户的动作,然后输出事件给相应的节点中描述颜色的域,当该域接收了这个事件后,改变颜色,可以表示为set tcolor。当节点的相应的域被改变了,会对改变的状态有所反应,送出一些事件,比如发出信号,颜色改变了,可以表示为 Colorchanged。
由此可知,VRML定义了两种事件:一种是输入事件(EventIn),表示接收事件;另一种是输出事件(Event Out),表示发送事件。域又分为两种类型:一种是可见域(exposed field),另一种是不可见域。这里所说的事件,都是发生在可见域类型之中。输入事件通常对应的是“set_域值”,输出事件通常对应的是“域值changed”。要想使得可见域变化,可经过设定好的途径将事件传递给“set域值”,当域值改变了,可由“域值_changed”经过一定的途径通知其他节点。
所谓“一定的途径”即路由,表明了事件传送的方式与渠道。路由的功能是连接一个节点的接收事件 eventIns和另外一个节点的发送事件 eventouts通过简单的语法结构,建立两个节点之间事件传送的通道。当有事件发生时,沿着这条通道传送事件。借助于事件和路由,可以创建动画效果以及览者和场景的交互,使得所建立的虚拟场景更接近于现实。
内容来源:李新晖《虚拟现实技术与应用》