VRML交互程序编程

利用Interpolator内插器节点和TimeSensor时间传感器节点,再加上ROUTE语句,人们可以编写出VRML动画程序。利用其它传感器Sensor节点,人们可以编写出VRML交互程序。下面我们对这些节点一一介绍:

一. CylinderSensor节点

作用: 可使鼠标的移动转变成形体的绕自身Y轴的旋转运动。

通过坐标变换,可使形体绕任意轴旋转。

可以用鼠标拖动一个形体,来使自身旋转。

也可以用鼠标拖动一个形体,来使另一个形体旋转

主要字段: maxAngle 可用来控制最大旋转角度

minAngle 可用来控制最小旋转角度

rotation_changed 向外发出的旋转信号

编程步骤1: 利用Transform构造一个坐标系,里面放置两个内容:
一个形体和一个CylinderSensor,它们放置在一个方扩弧里面。

用DEF对Transform和CylinderSensor命名,
假设Transform的名字为NAMETT,CylinderSensor的名字为NAMECC。

编程步骤2: 通过编写一个ROUTE语句,使鼠标的移动变成形体的转动。

编写的ROUTE语句为:ROUTE NAMECC.rotation TO NAMETT.rotation
(也可以写成:ROUTE NAMECC.rotation_changed TO NAMETT.set_rotation)

点击这里可运行书中P66页的EX7_01.WRL(黄色立方体可用鼠标拖动旋转)
点击这里可阅读书中P66页的EX7_01.WRL(黄色立方体可用鼠标拖动旋转)

点击这里可运行书中P67页的EX7_02.WRL(用鼠标拖动右下角的形体,可使桌子旋转)

点击这里可阅读书中P67页的EX7_02.WRL(用鼠标拖动右下角的形体,可使桌子旋转)

二. PlaneSensor节点

作用: 可使鼠标的移动转变成形体沿自身Z=0的平面的移动。

通过坐标变换,可使形体绕任意轴旋转。

可以用鼠标(按住鼠标左键)拖动一个形体,来使自身移动。

也可以用鼠标(按住鼠标左键)拖动一个形体,来使另一个形体移动

主要字段: maxPosition 可用来控制最大移动位置
minPosition 可用来控制最小移动位置
translation_changed 向外发出的移动信号

编程步骤: 与CylinderSensor相同

点击这里可运行书中P69页的EX7_03.WRL(红色圆锥可用鼠标拉着在板上移动)

点击这里可阅读书中P69页的EX7_03.WRL(红色圆锥可用鼠标拉着在板上移动)

点击这里可运行书中P70页的EX7_04.WRL(拖动板上的两个小形体,可带动板上的大形体)

点击这里可阅读书中P70页的EX7_04.WRL(拖动板上的两个小形体,可带动板上的大形体)

三. SphereSensor节点

作用: 可使鼠标的移动转变成形体绕自身原点的转动

可以用鼠标(按住鼠标左键)拖动一个形体,来使自身转动

也可以用鼠标(按住鼠标左键)拖动一个形体,来使另一个形体转动

主要字段: rotation_changed 向外发出的移动信号

编程步骤: 与CylinderSensor相同

点击这里可运行书中P74页的EX7_06.WRL(用鼠标转动球,可使小丑联动)

点击这里可阅读书中P74页的EX7_06.WRL(用鼠标转动球,可使小丑联动)

四. ProximitySensor节点

作用: 可以检测到观察点接近的信号,利用它可控制其它操作,如发出声音,让形体运动、让形体颜色变化等

主要字段: size 用来设定可探测范围,其中心在局部坐标系的原点

enterTime 发出接近信号

exitTime 发出退出信号

编程步骤1: 在一个局部坐标系中,给出一个用DEF命名的ProximitySensor和一个形体

编程步骤2: 通过一个ROUTE语句,将ProximitySensor的探测信号传给一个时间传感器或传给一个Javascript程序,使程序发生相应的变化,如动画、发出声音、改变颜色等。

假设一个ProximitySensor的名字为PPP,一个时间传感器TimeSensor的名字为TTT,则这个ROUTE语句可写成下面的形式,从而启动一个动画效果:

ROUTE PPP.enterTime TO TTT.startTime

点击这里可运行书中P72页的EX7_05.WRL(走进大门,门将打开,远离大门,门将关闭)

点击这里可阅读书中P72页的EX7_05.WRL(走进大门,门将打开,远离大门,门将关闭)

五. TouchSensor节点

作用: 可接收鼠标点击形体的动作,并使程序发生相应变化,如动画、发出声音、改变颜色

主要字段: isOver 当鼠标移到形体上方时,形体发出的逻辑信号

touchTime 当鼠标点击形体时,形体发出的时间信号

编程步骤1: 在一个局部坐标系中,给出一个形体及用DEF命名的TouchSensor

程序运行时,当鼠标移到形体上时,TouchSensor准备接受点击信号,同时发出isOver信号

编程步骤2: 利用isOver或touchTime信号,使程序发生相应变化,如动画、发出声音、改变颜色

下面是一个利用TouchSensor的最简单的程序:
#VRML V2.0 utf8

DEF TRAN Transform {
children [
Shape {
appearance Appearance {material Material {diffuseColor 1 0 0}}
geometry Box {}
}
DEF TTT TouchSensor {}
]
}

DEF TS TimeSensor {
cycleInterval 10
}
DEF pi PositionInterpolator{
key [0 0.5 1]
keyValue [0 0 0 , 0 5 0, 0 0 0]
}
ROUTE TTT.touchTime TO TS.startTime
ROUTE TS.fraction_changed TO pi.set_fraction
ROUTE pi.value_changed TO TRAN.translation

Background {skyColor 1 1 1}

发布于 :未分类

发表评论

电子邮件地址不会被公开。