#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 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 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 entre dans le ProximitySensor, la porte va s'ouvrir DEF PS ProximitySensor { size 8 8 8 } # l'animation est identique à l'ouverture de porte par TouchSensor DEF PositionI PositionInterpolator { key [ 0, 0.1, 0.9,1 ] keyValue [ 0 0 0, -1.9 0 0, -1.9 0 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 entre dans le ProximitySensor, on démarre le timeSensor, donc l'animation ROUTE PS.enterTime TO TimeS.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 }