#VRML V2.0 utf8 PROTO Slider [ field SFFloat mult 1 # multiply [0..1] output by this much field SFVec3f position 0 0 0 # position slider on screen eventOut SFFloat value_changed # output slider value [0..mult] eventOut SFTime timeValue_changed # output slider value [0..mult] as SFTime ] { Group { children [ DEF WHERE ProximitySensor { size 1000 1000 1000 } DEF HUD Transform { children DEF SCREENPLACE Transform { translation IS position scale .01 .01 .01 children Group { children [ DEF SLIDER PlaneSensor { minPosition -10 0 maxPosition 10 0 } DEF SLIDEE Transform { children Shape { geometry IndexedFaceSet { coord Coordinate { point [ 1 1 0, -1 1 0, -1 -1 0, 1 -1 0 ] } coordIndex [ 0 1 2 3 ] } } } ] } } } DEF SCRIPT Script { eventIn SFVec3f position_changed eventOut SFFloat value_changed IS value_changed eventOut SFTime timeValue_changed IS timeValue_changed field SFFloat mult IS mult url "vrmlscript: // output a value based on slider's x translation function position_changed(val) { value_changed = (val.x+10)/20 * mult; timeValue_changed = (val.x+10)/20 * mult; } " } ] } ROUTE WHERE.position_changed TO HUD.translation ROUTE WHERE.orientation_changed TO HUD.rotation ROUTE SLIDER.translation_changed TO SLIDEE.translation ROUTE SLIDER.translation_changed TO SCRIPT.position_changed }