📄 第二十一章 空间传感器.txt
字号:
第二十一章 空间传感器
1、TouchSensor节点用来检测浏览者在VRML浏览窗口中的光标动作,并且输出一些参数来触发和控制动画效果。
TouchSensor语法
TouchSensor {
enable TRUE #域值类型 SFBool
isActive #输出接口 SFBool
isOver #输出接口 SFBool
touchTime #输出接口 SFVec3f
hitPoint_changed #输出接口 SFVec3f
hitNormal_changed #输出接口 SFVec3f
hitTexcood_changed #输出接口 SFVec3f
}
enable用来设定空间传感器是否处于打开的状态,当域值为TRUE时,这个空间传感器处于打开状态,并且根据浏览者在空间中不同的动作给出相应的输出;而当域值为FALSE时,这个空间传感器处于关闭状态,并不检测浏览者在虚拟世界中的动作,也没有任何的输出。(可以使用事件接口)
当浏览者在浏览窗口中的可传感的空间造型上按下定点设备(例如:鼠标)时,输出接口isActive中将输出一个FALSE值,同时从touchTime输出接口中将输出当前的绝对时间。并且输出接口hitPoint_changed将输出被单击位置的空间三维坐标值;输出接口hitNormal_changed将输出被单击处的表面法向量值;在输出接口hitTexcood_changed中输出的则是被单击点的贴图坐标值。
当浏览者在浏览窗口中的光标经过可传感的空间造型时,输出接口isOver就输出一个TRUE值;而当浏览者的光标离开了可传感的空间造型时,输出接口isOver所输出的就是FALSE值。
[isOver输出接口控制.wrl] 是通过TouchSensor节点的isOver输出接口来控制造型的动画效果的,当浏览者的光标在浏览器窗口中经过空间长方体时,该长方体就开始旋转,知道浏览者的光标离开了这个空间造型为止。
2、PlaneSensor节点
PlaneSensor节点所创建的空间传感器用来检测浏览者在虚拟世界中的动作,并将这些动作转换为适于空间造型的输出,使浏览者像是在一个二维的平面上所观察到的那样。
PlaneSensor节点语法
PlaneSensor {
enabled TRUE #域值类型 SFBool
autoOffset TRUE #域值类型 SFBool
offset 0.0 0.0 0.0 #域值类型 SFVec3f
maxPosition -1.0 1.0 #域值类型 SFVec2f
minPosition 1.0 1.0 #域值类型 SFVec2f
isActive #输出接口 SFBool
translation_changed #输出接口 SFVec3f
trackPoint_changed #输出接口 SFVec3f
}
enable用来设定空间传感器是否处于打开的状态,当域值为TRUE时,这个空间传感器处于打开状态。(同上)(可以使用事件接口)
当浏览者在浏览窗口中的可传感的空间造型上按下定点设备的按键时,输出接口isActive中将输出一个TRUE值;而当浏览者放开了定点设备的按键时,输出接口isActive中将输出一个FALSE值。当浏览者在浏览器窗口中将光标移动到可传感的空间造型上并且单击时,将在单击的位置上建立一个虚拟的空间平面,这个空间平面将和当前空间坐标系的XY面相平行,并且将单击的位置作为这个空间平面的原点。浏览者在浏览器窗口中按下定点设备的按键并且移动光标时,可传感的空间造型就将在这个平面上产生平移。
offset域值给出了一个三维的偏移值,也就是空间造型相对于上面的那个虚拟的空间平面坐标原点的偏移值。(可以使用事件接口)
autoOffset域值用来设置是否在平移中加上offset域值给出的偏移值。当域值为TRUE时将加上这个偏移值,而当域值为FALSE时在平移中将不加上偏移值。(可以使用事件接口)
minPosition域值和maxPosition域值是用来给出在X轴和Y轴方向上平移量的限制,前者给出最小的平移量限制,而后者给出最大的平移量限制。(可以使用事件接口)
上面介绍的这几个域值将共同决定最终平移量的大小,而这个平移量将由输出接口translation_changed传送出来。
[在一个有限平面范围内拖动空间造型.wrl] 这个例子中的空间造型就被限制在X-Y平面的一定范围内能被拖动,浏览者可以试着在浏览器窗口中用鼠标拖动黄色的空间正方体。其实现方法就是将PlaneSensor节点所创建的空间传感器translation_changed输出接口输出到Transform编组节点的输入接口set_translation中。
[多个平移范围传感器的使用.wrl] 为数个空间造型指定相应的平移范围。
3、SphereSensor节点
SphereSensor节点所创建的空间传感器用来检测浏览者在虚拟世界中的动作,并将这些动作转换为适于空间造型输出,使浏览者像是在一个转动的球体上观察到的那样。
SphereSensor节点语法
SphereSensor {
enabled TRUE #域值类型 SFBool
autoOffset TRUE #域值类型 SFBool
offset 0.0 1.0 0.0 0.0 #域值类型 SFVec3f
isActive #输出接口 SFBool
rotation_changed #输出接口 SFVec3f
trackPoint_changed #输出接口 SFVec3f
}
enable用来设定空间传感器是否处于打开的状态,当域值为TRUE时,这个空间传感器处于打开状态。(同上)(可以使用事件接口)
当浏览者在浏览窗口中的可传感的空间造型上按下定点设备的按键时,输出接口isActive中将输出一个TRUE值;而当浏览者放开了定点设备的按键时,输出接口isActive中将输出一个FALSE值。当浏览者在浏览器窗口中将光标移动到可传感的空间造型上并且单击时,将在单击的位置上建立一个虚拟的空间球体表面,并且当前空间坐标系原点作为球体的中心点,将单击的位置和空间坐标系原点之间的距离作为轨迹球体的半径。浏览者在浏览器窗口中按下定点设备的按键并且移动光标时,可传感的空间造型就将沿这个轨迹球体表面上产生移动。
offset域值给出了一个旋转偏移值,也就是空间造型相对于上面的那个虚拟的空间球面中心的旋转值。(可以使用事件接口)
autoOffset域值用来设置是否在旋转中加上offset域值给出的偏移值。当域值为TRUE时将加上这个偏移值,而当域值为FALSE时在平移中将不加上偏移值。(可以使用事件接口)
上面介绍的这几个域值将共同决定最终旋转值的大小,而这个平移量将由输出接口rotation_changed传送出来。
[在球面上旋转空间造型.wrl] 一个圆锥体造型,通过SphereSensor节点指定了一个球面的旋转观察方式,其实现方法就是由SphereSensor节点的输出接口rotation_changed来驱动Transform节点的set_rotation输入接口。
4、CylinderSensor节点
CylinderSensor节点所创建的空间传感器用来检测浏览者在虚拟世界中的动作,并将这些动作转换为适于空间造型的输出,使浏览者像是在围绕着一根轴旋转一个圆柱体所观察到的那样。
CylinderSensor节点语法
CylinderSensor {
enabled TRUE #域值类型 SFBool
diskAngle 0.262 #域值类型 SFFloat
autoOffset TRUE #域值类型 SFBool
offset 0.0 1.0 0.0 0.0 #域值类型 SFVec3f
maxAngle -1.0 #域值类型 SFFloat
minAngle 0.0 #域值类型 SFFloatf
isActive #输出接口 SFBool
rotation_changed #输出接口 SFVec3f
trackPoint_changed #输出接口 SFVec3f
}
enable(同上)(可以使用事件接口)
当浏览者在浏览窗口中的可传感的空间造型上按下定点设备的按键时,输出接口isActive中将输出一个TRUE值;而当浏览者放开了定点设备的按键时,输出接口isActive中将输出一个FALSE值。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -