VRML & X3D

Exemple de fichier

Fichier VRML

Voici le code VRML permettant de réaliser l'image dynamique 3D ci-dessus :

On définit le fond de la scène, on précise, tout simplement, la couleur du ciel. En VRML, Toutes les couleurs sont décrites par trois composantes :

Chaque valeur va de 0 à 1
0 0 0 = noir
1 1 1 = blanc
Ici, on a du bleu foncé

Background {  skyColor	0 0.1 0.4 }

On donne quelques informations générales de navigation.
Ici, on défini la façon dont on va visualiser l'objet. "Examine", signifie que l'on va pouvoir tourner autour de l'objet pour voir ses différentes caractéristiques.

NavigationInfo { type "EXAMINE"}

Ici, nous allons définir un objet Text qui s'appelera MainTransform.

DEF MainTransform Transform {

On va également pouvoir tourner le cube selon l'axe de rotation définie.

rotation 0 1 12 0

On va placer notre texte selon un axe X, Y, Z :
X = 0
Y = 0,9
et Z = 0

translation 0 .9 0

Nous allons maintenant définir la forme.

 children [

 Shape {

Notre objet est un objet texte, qui possede la chaine de caractère "Hello World" et dont les caractéristiques sont qu'il sera centré, gras, de taille 0,9, et de police "Times".

geometry Text {
string ["Hello World"]
fontStyle FontStyle {
justify ["MIDDLE", "MIDDLE"]
family "Times"
style "BOLD"
size .9
}
}
				

On va ensuite définir l'apparence de notre texte. Ce texte va bouger selon son axe de rotation, on va donc définir une couleur de base, une intensité, ainsi qu'une zone d'ombre.

   appearance Appearance {
	material Material {
	 diffuseColor .8 1 .8
	 ambientIntensity .3
	 shininess .3
	}
   }
				

On oublie pas de refermer les balises.

  }
 ]
}

On va définir une orientation pour faire pivoter notre image. Voici les spécifications de la méthode OrientationInterpolator :

Type Champ Defaut Borne Utilisation
SFFloat set_fraction eventIn - Lance le calcul d'une orientation, en fonction du tableau key
MFFloat key
[]
- Tableau permettant de donner le temps écoulé entre deux keyValue
MFRotation keyValue [] - Donne la liste des angles de rotation par lesquels doit passer l'objet
SFRotation value_changed eventOut - Envoie l'orientation calculée en fonction du set_fraction

DEF MainInterpolator OrientationInterpolator {
  key [ 0 0.5 1 ]
  keyValue [0 1 0 0 0 1 0 3.14 0 1 0 6.28]
}
				

On définit ensuite un objet de time TimeSensor, qui va nous permettre de faire tourner l'objet en boucle, selon un interval de 5 secondes.

DEF MainTimer TimeSensor {
loop TRUE cycleInterval 5 }

Les chemins des événements sont décrits par la commande ROUTE. Cette commande est très importante lorsqu'on veut gérer des interactions dans la scène.
La syntaxe est la suivante :

ROUTE <nom du noeud>.<champ (field) ou événements (eventName)> TO <nom du noeud>.<champ (field) ou événements (eventName)>

ROUTE MainTimer.fraction_changed TO MainInterpolator.set_fraction
ROUTE MainInterpolator.value_changed TO MainTransform.rotation