#VRML V2.0 utf8 # On créée un groupe Transform # pour pouvoir bouger la porte, la déplacer, pour l'ouvrir DEF Porte Transform { children Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Box { size 2 2 1} } } # Le TimeSensor qui va rythmer l'animation # Uniquement sur l'ouverture de la porte DEF TimeSOuverture TimeSensor { # La porte s'ouvrira une 1 seconde cycleInterval 1 } # Le TimeSensor qui va rythmer l'animation # Uniquement sur la fermeture de la porte DEF TimeSFermeture TimeSensor { # La porte se fermera une 1 seconde cycleInterval 1 } # Le proximitySensor. # La porte est au centre de la scène, # le centre du ProximitySensor est aussi celui de la porte # on définit un cube de 6 unités d'arrête autour de la porte # lorsque l'utilisateur va entrer dans le ProximitySensor, la porte va s'ouvrir # lorsqu'il va en sortir la porte va se ferme DEF PS ProximitySensor { size 8 8 8 } # l'animation d'ouverture est simple # on passe de l'état fermé à l'état ouvert DEF PositionIOuverture PositionInterpolator { key [ 0, 1 ] keyValue [ 0 0 0, -1.9 0 0] } # l'animation de fermeture # c'est l'inverse : on passe de l'état ouvert à l'état fermé DEF PositionIFermeture PositionInterpolator { key [ 0, 1 ] keyValue [ -1.9 0 0, 0 0 0] } # Les routes pour l'ouverture # Le TimeSensor pour le PositionInterpolator ROUTE TimeSOuverture.fraction_changed TO PositionIOuverture.set_fraction # Le PositionInterpolator recopie sa position sur le groupe Transform de la porte ROUTE PositionIOuverture.value_changed TO Porte.set_translation # Quand on entre dans le ProximitySensor, on démarre le timeSensor de l'ouverture ROUTE PS.enterTime TO TimeSOuverture.startTime # Les routes pour la fermeture # Le TimeSensor pour le PositionInterpolator ROUTE TimeSFermeture.fraction_changed TO PositionIFermeture.set_fraction # Le PositionInterpolator recopie sa position sur le groupe Transform de la porte ROUTE PositionIFermeture.value_changed TO Porte.set_translation # Quand on sort du le ProximitySensor, on démarre le timeSensor de fermeture ROUTE PS.exitTime TO TimeSFermeture.startTime # Le decor # On place trois cubes autour de la porte # Ils serviront de mur s # Ils cacheront la porte lorsqu'elle sera ouverte Transform { translation -2 1 0 children Shape { appearance DEF ApDecor Appearance { material Material { diffuseColor 0 .5 0.3 } } geometry Box { size 2 4 2} } } Transform { translation 2 1 0 children Shape { appearance USE ApDecor geometry Box { size 2 4 2} } } Transform { translation 0 2 0 children Shape { appearance USE ApDecor geometry Box { size 2 2 2} } } Viewpoint { position 0 0 20 }