#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 # Nous allons modifier l'angle de rotation du groupe pour ouvrir la porte 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 # entre l'ouverture et la fermeture 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 (rotation d'un quart de cercle (PI/2) sur l'axe des Y = 0 1 0 -1.57) # Key 3=0.9 : La porte reste ouverte # Key 4=1 : On revient à la rotation 0 1 0 0 -> la porte se referme DEF PositionI OrientationInterpolator { key [ 0, 0.1, 0.9,1 ] keyValue [ 0 1 0 0, 0 1 0 -1.57, 0 1 0 -1.57, 0 1 0 0 ] } # Les routes # Le TimeSensor pour le PositionInterpolator ROUTE TimeS.fraction_changed TO PositionI.set_fraction # L'OrientationInterpolator recopie son orientation sur le groupe Transform de la porte ROUTE PositionI.value_changed TO Porte.set_rotation # 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 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 }