(1)使用语法TouchSensor { enabled TRUE # SFBool }

(2)域值说明

enabled:表明此传感器是否对用户输入设备做出反应。TRUE表示检测器启动,能够检测用户输入设备动作。该节点的域值很简单,但是节点本身有很多事件接口,以便用户和场景的交互。下面是接触检测器的一些事件接口,考虑到外部输入设备大多是鼠标,所以以鼠标为例对事件加以说明。

(3)事件说明

① isOver:输出事件,单域值布尔型。这个事件指出鼠标当前是否正指在对象上,只要鼠标位于对象上无论是否有操作,都会输出TRUE,否则输出FALSE。

② isActive:输出事件,单域值布尔型。指明鼠标的按键是否正在被按下,若鼠标键正在被按下则输出TRUE,否则输出FALSE。

③ hitPoint_changed:输出事件,单域值三维向量型。当鼠标位于对象上时,单击鼠标左键则会输出此事件。同上面情况有所不同,这里输出的是位置坐标。

④ hitNormal_changed:输出事件,单域值三维向量型。这个事件输出的是hitPoint_changed所指定点的法向量。

⑤ hitTexCoord_changed:输出事件,单域值二维坐标型。hitPoint_changed所指定点的造型表面的纹理坐标。

⑥ touchTime:输出事件,单域值时间型。输出单击鼠标的时间。一般说来,大多数事件要用JavaScript脚本语言或者Java编程语言进行调用控制,但是touchTime由于输出时间值,不用脚本语言也可以使用。可以把它送到时间传感器TimeSensor中,作为时间传感器中的动画周期的时间起始点,这样就可以由用户决定在什么时候开始动画,或者对于已经开始的动画决定什么时候停止。

例6-25

VRML V2.0 utf8

Group {

children [

DEF s1 Transform {

children Inline {

url \"s1.wrl\"

}

}

DEF touch TouchSensor {}

DEF clock TimeSensor {

cycleInterval 5.0

}

DEF s1_path OrientationInterpolator {

key [0.0, 0.2, 0.4, 0.6, 0.8, 1.0]

keyValue [ 0.0 1.0 0.000, 0.0 1.0 0.0 1.256, 0.0 1.0 0.0 2.512

}

]

}