Jusquà maintenant, tous les objets que nous avons insérés dans nos fichiers se plaçaient par défaut au centre de notre scène, au point 0 0 0.
Nous allons donc apprendre à déplacer les objets dans lespace; ce quon appelle une translation. Pour cela, nous appliquons une transformation à lobjet, à laide dun bloc de code Transform { }, qui entoure les blocs de code habituel.
children [ |
#Un cube bleu au côté dun cube rouge #Description dun cube bleu Shape { appearance Appearance { #Déplacement dun cube rouge Transform { children [ appearance Appearance { |
Dans cet exemple, le cube rouge est déplacé sur laxe de la largeur X, mais il ne bouge ni en Y ni en Z. La translation était de 2 en X, 0 en Y et 0 en Z. Cela signifie aussi que le centre du cube se trouvait sur le point 2 0 0.
Avant de regarder le fichier dans Firefox, essayez de limaginer et de déterminer où sera placé le cube rouge. (translation2.wrl)
Exercice: Quelle est la translation à effectuer pour que les axes XYZ se trouvent à l'intersection des deux cubes? (dans un ficher nommé "translation3.wrl")
Inline { bboxSize 20 20 20 bboxCenter 0 0 0 |
#Un cube bleu au côté dun cube rouge #Importe les axes XYZ Inline { bboxSize 20 20 20 bboxCenter 0 0 0 #Description et déplacement dun cube bleu Transform { children [ appearance Appearance { #Description et déplacement dun cube rouge Transform { children [ appearance Appearance { |
Jusquà maintenant, tous les cônes et les cylindres que nous sommes capables de décrire sont pointés vers le haut. Nous nous rendons compte de la nécessité de savoir faire pivoter un objet sur lui-même, ce quon nomme en VRML la rotation.
La rotation est une transformation que lon effectue de la même manière que la translation, à laide dun bloc de code Transform { }, qui entoure les blocs de code habituel.
children [ |
#Description de 2 cones inverses #Description et deplacement du cone rouge Transform { children [ } appearance Appearance { ] #Description et rotation du cone jaune Transform { children [ } appearance Appearance { |
Le terme rotation est suivi de 4 chiffres qui correspondent à: X Y Z Radius
Les valeurs de XYZ se situent entre 0 et 1 (0 = pas de rotation sur laxe; 1 = rotation complète sur l'axe).
La valeur du radius indique la valeur de la rotation qui sera effectuée sur tout axe ayant une valeur supérieure à 0. Le radius est exprimé en radian selon la correspondance suivante avec les degrés:
30° |
0.5236 |
60° |
1.0472 |
90° |
1.5708 |
180° |
3.1416 |
270° |
4.7124 |
Dans l'exemple précédent, la ligne:
signifie que le cône subit une rotation sur l'axe des X avec un valeur de 3.1416, ce qui équivaut à une rotation en avant de 180°. Par contre, le cône ne basculera ni sur laxe des Y, ni sur celui des Z, car leur valeur est égale à 0.
Exercice: Décrire deux cônes selon lillustration suivante
(Le cône rouge est orienté vers la droite et le jaune vers la gauche)
Solution dans le fichier rotation2.wrl
La dernière transformation que nous allons apprendre est la mise à léchelle. Elle nous permettra daplatir les objets ou de les agrandir, proportionnellement ou non.
En bougeant les objets des exemples suivants, vous pourrez voir les effets de cette transformation que lon nomme, en langage VRML, scale.
Le scale est une transformation que lon effectue de la même manière que la translation et la rotation à laide dun bloc de code Transform { }, qui entoure les blocs de code habituel.
children [ |
cylindreplat.wrl | coneplat.wrl |
sphereplate.wrl | scaleformes.wrl |
(tous les exemples subissent une rotation afin de rendre plus visible la mise à l'échelle)
#Description d'un cylindre aplati Transform { children [ } appearance Appearance { |
On peut noter dans cet exemple, que le terme scale est suivi de 3 chiffres qui correspondent à:
X Y Z
La valeur de XYZ correspond au multiple que lon veut appliquer à la dimension de lobjet.
Dans lexemple ci-dessus, on étire deux fois lobjet en X, deux fois en Y, et une fois en Z (= x1, ce qui ne modifie pas lobjet par rapport à cet axe).
Nous avons vu jusquà maintenant les trois transformations séparément, mais il est possible de les effectuer dans le même bloc de code Transform { }.
Les trois exemples précédents ont tous subi une rotation en même temps que la mise à léchelle.
#Description d'un cylindre aplati Transform { scale 2 2 1 children [ } appearance Appearance { |
Les programmeurs trouvent toujours un moyen pour se simplifier la vie. Ainsi, il leur semble absurde de décrire deux fois le même objet.
Pour cette raison, il existe la possibilité de définir un objet en lui donnant une étiquette (DEF). Plus tard, on pourra rappeler cet objet à laide de son étiquette. Cest le principe utilisé dans le fichier scaleformes.wrl, que nous allons examiner en détail.
#Description d'un cone DEF Cone1 Shape { } appearance Appearance { Transform { scale 0.5 2 1 children USE Cone1 |
Dans cet exemple, un premier cône jaune est décrit à laide dun bloc de code Shape { } et on lui rajoute une étiquette
DEF Cone1
Par la suite, dans un bloc de code Transform { }, nous allons rappeler ce cône à laide de son étiquette. Ce que nous faisons sous la forme suivante:
children USE Cone1
Dans ce bloc de code Transform { }, nous pouvons commander nimportes quelles transformations, une rotation, une translation et/ou une mise à léchelle.
Exercice: Décrire deux cônes selon lillustration suivante
Solution dans le fichier 2cones.wrl