#VRML V2.0 utf8 # Le groupe avec la porte # on créée un groupe pour y appliquer un touchSensor Group { children [ # 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.5 2 1} } } # Le TimeSensor qui va rythemer l'animation DEF TimeS TimeSensor { # on a 8 secondes pour réaliser l'opération complète # c'est à dire qu'entre l'ouverture et la fermeutre de la porte, on a 8 secondes cycleInterval 8 } # Le TouchSensor pour récupérer le clique sur la porte DEF TouchS TouchSensor {} ] } # Voir le plus important, l'animation # Key 1=0 : la forme est fermée, c'est le début de l'animation # Key 2=0.1 : La porte s'ouvre (position 0 1.8 0, la porte se déplace vers le haut) # Key 3=0.9 : position 0 1.8 0 La porte ne bouge pas entre 0.1 et 0.9, elle reste ouverte # Key 4=1 : position 0 0 0 la forme se referme # la porte fait 2 de haut. On la monte de 1.8 pour garder une partie de la porte visible DEF PositionI PositionInterpolator { key [ 0, 0.1, 0.9,1 ] keyValue [ 0 0 0, 0 1.8 0, 0 1.8 0, 0 0 0 ] } # Les routes # Le TimeSensor pour le PositionInterpolator ROUTE TimeS.fraction_changed TO PositionI.set_fraction # Le PositionInterpolator recopie sa position sur le groupe Transform de la porte ROUTE PositionI.value_changed TO Porte.set_translation # Quand on clique sur la porte, on démarre le timeSensor, donc l'animation ROUTE TouchS.touchTime TO TimeS.startTime # Le decor # On place trois cubes autour de la porte # Ils serviront de mur # 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