Senseurs

La plupart des senseurs permettent de détecter une activité de l'utilisateur et de provoquer une réaction de l'environnement virtuel.

TouchSensor

Ce type de senseur détecte si l'utilisateur clique sur un objet. Dans ce cas, un évenement de sortie touchTime est généré, celui-ci pouvant être routé sur un évenement d'entrée d'un autre objet.

#VRML V2.0 utf8

NavigationInfo {
type "EXAMINE" }

Viewpoint {
position 0 1 1
orientation 1 0 0 -0.15
description "Vue initiale"
}

Viewpoint {
position 0 1 -1
orientation 1 0 0 -0.15
description "Vue ecran"
}


Transform {
translation 0 0 -2
children
Inline {
url ["desk.wrl"]
}}

Transform {
translation -0.19 1.01 -1.845
rotation 1 0 0 -0.1
children [ Shape {
appearance Appearance {
texture DEF movie MovieTexture { url ["../movies/fellowship.mpeg"] } }
geometry Box { size 0.39 0.31 0.02 } }
DEF ecran TouchSensor {} ] }

ROUTE ecran.touchTime TO movie.startTime

PlaneSensor

Ce senseur permet de déplacer des objets dans un plan X Y. Un évenement translation_changed, vecteur 3D, est généré lorsque un mouvement est détecté sur ce senseur, cet évenement peut être routé sur la position d'un objet pour le déplacer. Ce senseur possèdent, entre autres, les champs suivants :

CylinderSensor

Le noeud CylinderSensor définit un senseur envoyant un évenement de sortie rotation_changed, sur l'axe Y, lorsqu'il est utilisé. Cet évenement peut être routé vers un évenement d'entrée set_rotation d'un objet pour modifier son orientation. Il existe en particulier les champs suivants dans un noeud CylinderSensor :

SphereSensor

Ce senseur agit de la même manière que CylinderSensor à l'exception qu'il génère une rotation 3D pouvant également être routé vers un évenement set_rotation d'un objet.

#VRML V2.0 utf8

Viewpoint {
position 0 0 5 }

DEF forme Transform {
translation 0 1 -1
scale 0.5 0.5 0.5
children Inline { url ["x_wing.wrl"] } }

Transform {
translation -2 -1 -1
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 0 0 } }
geometry Box { size 1 1 0.2 }
}
DEF plane PlaneSensor {
maxPosition 2 1.5
minPosition -2 0
} ] }

Transform {
translation 0 -1 -1
children [
Shape {
appearance Appearance {
material Material { diffuseColor 0 1 0 } }
geometry Cylinder {
radius 0.5
height 0.15 } }
DEF cylinder CylinderSensor {} ] }

Transform {
translation 2 -1 -1
children [
Shape {
appearance Appearance {
material Material { diffuseColor 0 0 1 } }
geometry Sphere { radius 0.5 }
}
DEF sphere SphereSensor {} ] }

ROUTE plane.translation_changed TO forme.set_translation
ROUTE cylinder.rotation_changed TO forme.set_rotation
ROUTE sphere.rotation_changed TO forme.set_rotation

 

Anchor

Le noeud Anchor permet de rediriger l'utilisateur sur une autre page Web lors d'un clic sur la forme définie dans ce noeud. Les champs principaux sont children définissant les enfants de l'Anchor et url liant avec la page Web ciblée.

#VRML V2.0 utf8

Viewpoint {
position 0 0 2 }

Anchor {
children Inline { url ["ant.wrl"] }
url ["x_wing.wrl"] }

 

Collision

Le noeud Collision permet de détecter une collision entre l'utilisateur et les objets décrits dans son champ children. Ce noeud génère alors un évenement de sortie collideTime qui peut être routé pour lancer une animation. Le champs collide du noeud Collision spécifie si les objets enfants peuvent être traversés ou non.

#VRML V2.0 utf8

Viewpoint { position 0 0 2 }

DEF sphere Collision {
collide TRUE
children Shape {
appearance Appearance {
material DEF couleur Material { diffuseColor 1 0 0 } }
geometry Sphere { }
} }


DEF onChange Script {
eventIn SFTime change
eventOut SFColor color
field SFInt32 col 0

url "javascript:
function change(time) {
color[col] = 0;
col += 1;
if (col > 2) col = 0;
color[col] = 1;
} "

directOutput TRUE
}


ROUTE sphere.collideTime TO onChange.change
ROUTE onChange.color TO couleur.diffuseColor

TimeSensor

Un noeud TimeSensor spécifie une animation dépendant d'un timing, celle-ci est cyclique si le champ loop du noeud est à TRUE. Le champs cycleInterval détermine la durée d'un cycle en secondes. Ce noeud possède également les champs startTime et stopTime définissant les temps de départ et de fin absolus de l'animation. Ces champs, exposedField, peuvent être utilisé lors d'un routage.

#VRML V2.0 utf8

NavigationInfo { type "EXAMINE" }

DEF timer TimeSensor {
cycleInterval 10
loop TRUE }

DEF boite Transform {
translation 0 0 -3
children [
Shape {
appearance Appearance {
material DEF couleur Material { diffuseColor 1 0 0 } }
geometry Box {} } ] }

DEF rotation OrientationInterpolator {
key [ 0 0.1 0.2 0.80 1 ]
keyValue [
1 0 0 0,
0 1 0 1,
0 0 1 1.57,
0 1 0 -1,
0 1 0 0,
] }

DEF color ColorInterpolator {
key [ 0 0.25 0.5 1 ]
keyValue [
1 0 0,
0 1 0,
0 0 1,
1 0 0] }

ROUTE timer.fraction_changed TO rotation.set_fraction
ROUTE timer.fraction_changed TO color.set_fraction
ROUTE rotation.value_changed TO boite.set_rotation
ROUTE color.value_changed TO couleur.diffuseColor

Il existe également les noeuds ProximitySensor et VisibilitySensor qui respectivement détectent la proximité de l'utilisateur avec un objet et la visibilité qu'à l'utilisateur d'une zone rectangulaire.