Cours VRML2.0
VRML (Virtual Reality Modeling Language) est un langage de description de scène. Il possède une certaine richesse inhérente a ses primitives de base, il posséde une richesse gràce à la facilité de créer ses propres primitives, mais au delà de la richesse des concepts et du langage, la qualité première que l'on demande aux scènes VRML est la finesse et la beauté du rendu. C'est actuellement, pour VRML, le point le plus délicat car il souffre du manque de qualité et de rapidité des browsers VRML. Il existe peu de browsers VRML2.0, et les quelques browsers qui existent actuellement n'implémentent qu'une partie des fonctionnalités décrites dans les spécifications. Tous les browsers proposés, a peu pres 8, tournent sur PC uniquement. Seulement 2 d'entre eux sont portés sur materiel Sun sous UNIX, trois existent sur SGI sous IRIX. Il existe actuellement quelques builders de scènes VRML2.0 qui restreignent les possibilités du langage. Actuellement, VRML a un peu de difficultés a s'imposer et a prendre l'essor qui lui etait promis. Le document qui vous a été distribué est le cahier des charges du langage, disponible aussi sur le WEB:
Il décrit précisement tout ce qu'un concepteur de scène peut utiliser, ce qu'un builder doit pouvoir fournir, ce qu'un browser doit implémenter.
VRML2.0 décrit une scène par un arbre dans lequel chaque noeud possède un nombre précis de fils (feuille ou noeud). La description d'une scène se fait au travers d'un fichier texte . Au niveau de la syntaxe, on peut dire que la description d'une scène ressemble àune declaration monstreuse de structure en C. La syntaxe est donc relativement simple, et surtout agrementée de quleques facilités qui rendent les scènes moins rebarbatives. A cette notion de noeud, VRML2.0 rajoute des ROUTE qui vont permettre aux noeuds de dialoguer de façon à rendre une scène animées ou interactive.
Comme en shell, la première ligne est d'une importance capitale, elle doit être exactement
C'est cette ligne, le header, qui précisera au parseur de fichier quel est le type de fichier.
Les noeud VRML2.0 se déclinent en familles. La description de ces familles va introduire rapidement toutes les possibilités qu'offre la langage et donc qu'offriront les scènes qui seront décrites.
Bien sur, décrire une scène, c'est placer des objets dans l'espace. Les objets visibles seront décrits dans un noeud shape (forme). Ce noeud est classe dans la famille des common nodes de la classification des noeuds.
Syntaxe: Shape=shapes3.html
Ce noeud prend deux fils, l'un geometry qui décrira la géometrie de la forme, l'autre appearance qui définira les attributs de visualisation. Si rien n'est précisé, le noeud shape ne contiendra aucune information a afficher.
Donc, afin de visualiser quelque chose, il faut renseigner l'attribut geometry du noeud shape, pour cela il est nécessaire de connaitre quelques noeuds de la famille des geometric nodes. Box, Cone, Cylinder et Sphere en font partie et il est intuitif de deviner la fonction de chacun.
La syntaxe: Box=shapes5.html,
Cone=shapes6.html,
Cylinder=shapes7.html,
Sphere=shapes8.html.
Exemple:code=shapes9.html,
rendu=shapes10.html.
La définition exhaustive de tous les attributs d'un noeud n'est pas obligatoire. Les attributs non renseignes peuvent être supprimés du code pour alleger la syntaxe, ils prendront alors une valeur par défaut qui apparaît dans les spécifications..
La description d'une forme ne suffit pas pour décrire une scène. Une scène décrite avec un empilement de noeuds Shape ne possèderait aucune semantique donc serait incompréhensible. Le noeud Group de la famille des group nodes permet de rassembler des noeuds dans un tableau de fils, créant ainsi un concept d'entité objet. Cela ne remet pas en cause la notion que chaque noeud a un nombre de fils predéfinis, voyons plutôt la syntaxe.
Syntaxe: Group=shapes11.html.
Exemple: code=shapes12.html,
rendu=shapes13.html.
Le noeud text appartient, une fois de plus, à la famille des geometric nodes. Ce noeud permet de définir un texte, au travers d'un tableau de chaines de caractères à afficher, mais aussi des attributs de tracé, gràce à un noeud de type FontStyle. Le noeud de type FontStyle va permettre de désigner la fonte que l'on souhaite utiliser ainsi que le type d'alignement des caractères.
Syntaxe: Text=text3.html,
FontStyle=text5.html,
FontStyle=text6.html.
Exemple: code=text7.html,
rendu=text8.html.
Par défaut, toutes les formes sont définies autour de la position (0, 0, 0) du repère local. Jusqu'à présent, le repère local de notre objet est confondu avec le repère global de la scène, la position (0, 0, 0) est donc le centre du monde. Le noeud Transform,qui fait partie de la famille des group nodes, va permettre de définir un repère local qui sera repositionné en translation, rotation et mise àl'échelle par rapport a son repère parent. Tous les fils de ce noeud bénéficieront de ce nouveau repère en tant que repère parent. Pour faire un parallele avec le noeud Group rencontré précédemment, en plus de rajouter une sémantique à la scène, nous plaçons dans l'espace l'integralité d'un objet.
Syntaxe: Transform=trans6.html.
Exemple: code=trans17.html,
rendu=trans18.html.
Le rendu par défault d'une forme est facheusement blanc et sans aucune profondeur, aucun volume. Le noeud Appearance, de la famille des appearance node, va permettre de remédier a ce problème en offrant un contrôle sur les couleurs, la transparence, ... .
Exemple: rendu=appear2.html.
Syntaxe: Appearance=appear4.html.
Un des attributs du noeud Appearance est un noeud Material. C'est effectivement lui qui précisera les données de comportement de l'objet soumis aux différents types de lumière.
Syntaxe: Material=appear5.html.
Exemple: code=appear7.html,
rendu=appear8.html.
Les noeuds Group, Switch, Transform, Billboard
Group, Switch, Transform, Billboard appartiennent tous à la famille des group nodes. Nous avons introduit tout à l'heure le noeud Group utilisé dans le but de donner une sémantique à notre scène. Le noeud Transform, lui, a été défini comme le noeud Group, en rajoutant la fonctionnalité de positionner l'objet dans l'espace en créant un nouveau repère local. Le noeud Switch va permettre de sélectionner un fils parmi l'ensemble de ceux disponibles. Seul celui sélectionné apparaîtra dans la scène.
Syntaxe: Switch=group3.html.
Le noeud Billboard va permettre de créer un nouveau repère local pour l'objet de telle sorte l'axe Z de ce nouveau repère soit en permanence orienté vers l'observateur (ou la camera). A chaque mouvement de l'observateur, le repère sera repositionné.
Syntaxe: Billboard=group5.html.
Example: rendu=group6.html.
Une autre méthode pour donner de la sémantique à ses scènes, est de stocker chaque objet dans un fichier VRML2.0 propre. Pour créer une scène complète, il faudra alors utiliser le noeud Inline, noeud de la famille des special group nodes. Ce noeud permet en effet de charger un objet décrit dans un fichier VRML2.0 externe nommé par son URL.
Syntaxe: Inline=inline3.html.
Example: code=inline4.html,
rendu=inline5.html.
Comme dans les jeux video, VRML2.0 offre la possibilité de la touche HyperEspace. En utilisant le noeud Anchor, de la famille des noeuds de regroupement, un click sur l'objet va vous permettre de changer de monde de la même façon qu'en utilisant un lien hypertexte avec un browser HTML. Ce changement de monde permettra soit de se positionner directement à un autre endroit de la scène, soit de se positionner dans une autre scène VRML2.0.
Example: code=anchor4.html,
rendu=anchor5.html.
Il est impossible de créer des objets complexes en utilisant des primitives géometriques telles que la boite, le cone, la sphere et le cylindre.
example: rendu=slifssi.html.
VRML2.0 offre donc la possibilité de créer des formes géometriques a partir d'un ensemble de points ou sommets. Dans un premier temps, il faut définir un noeud Coordinate. Bizarrement, le noeud Coordinate est catalogué comme un noeud geometric property node. Ce noeud Coordinate contiendra, bien sur, la position, dans le repere de l'objet, de tous les points ou sommets de votre objet.
Syntaxe: Coordinate=slsc.html.
Les types de noeud qui possèdent un noeud Coordinate comme fils sont les trois noeud suivant, de la famille des geometric nodes, PointSet, IndexedLineSet et IndexedFaceSet. D'après leur dénomination, il est facile de comprendre que le premier ne dessine que des points, le second relie les points pour créer des lignes, et le troizième construit des facettes. Soit, mais dessiner des points a partir d'une liste de coordonnées, ca semble logique.
Syntaxe: PointSet=slpsn.html.
Exemple: rendu=slpse.html.
Mais pour dessiner des lignes ou des facettes, il doit falloir ordonner les coordonnées pour relier les bons points entre eux. Et bien non, chaque ligne ou facette est décrite par une succession d'indice de coordonnées du tableau des coordonnées. Chaque flot d'indice sera séparé par un -1 très significatif. Dans le cas des facettes, il est possible de créer des facettes à n sommets par une succession de n indices valides séparées par un -1. Dans le cas des lignes, il est possible de créer des lignes à n points par une succession de n indices valides separée par un -1. Le mot Indexed dans le nom des deux noeuds indique le principe d'utilisation.
Syntaxe: IndexedLineSet=slilsn.html,
IndexedFaceSet=slifsn.html.
Example: rendu=slilse.html,
rendu=slifsex.html.
Le noeud IndexedFaceSet est d'une utilisation agréable pour beaucoup d'objets. Cependant, il en existe un pour la modélisation naturelle de terrain (mnt) qui reste le plus facile d'utilisation, C'est le noeud ElevationGrid, de la famille des geometric nodes, il permet de définir la hauteur (ou altitude) d'un terrain à chaque intersection d'une grille dont la taille est précisée.
Syntaxe: ElevationGrid=slbegns.html.
Exemple: rendu=slege.html.
Pour faciliter la création d'objets de révolution, ou d'objets formés a partir du déplacement dans l'espace d'une forme 2D, le noeud Extrusion, de la famille des geometric nodes, est là pour répondre à vos besoins.
Syntaxe: Extrusion=slbens.html.
Example:rendu=slessi.html.
Les primitives géometriques IndexedFaceSet, IndexedLineSet, PointSet et ElevationGrid possèdent, dans la liste de leurs attributs, un noeud Color. Ce noeud permet de maitriser la couleur au niveau des points, des lignes ou des facettes de façon a créer des effets assez réalistes. Pour les noeuds IndexedFaceSet et ElevationGrid, la couleur peut être affectée par facette si le champ colorPerVertex est a FALSE ou par sommet si ce même champ est a TRUE. Ceci permettra le coloriage soit en dégrade d'un sommet a l'autre d'une facette, soit en mode une couleur sur la facette.
Syntaxe: Color=slsyn.html,
IndexedFaceSet=slifscne.html.
Les noeuds ImageTexture, MovieTexture et PixelTexture permettent d'améliorer l'apparence d'un objet en plaquant des motifs sur la surface des noeud géometriques.
Exemple: rendu=sltmsi.html.
Le noeud Texture va dominer le noeud Material en plaquant sur toute la surface de l'attribut geometry du noeud Shape l'image designée. Une texture peut être une image, ImageTexture, une séquence video, MovieTexture ou une description brute, PixelTexture. Les formats autorises pour les images sont le jpeg, png et gif, pour les video, le mpeg.
Exemple: code=sluitn.html,
code=slumtn.html,
code=sltptf.html.
Quand on applique une texture sur un objet, il est souvent indispensable que le motif soit bien placé, ait la bonne taille, ... . VRML2.0 offre deux noeuds pour permettent de maitriser complètement la façon dont le browser va appliquer la texture sur votre objet. La méthode reste quand meme délicate mais le processus est le suivant.
Gràce au noeud TextureCoordinate, définir une zone dans l'image. Il est à noter que le noeud TextureCoordinate est un attribut présent dans les noeuds IndexedFaceSet et ElevationGrid. Il est indispensable que le nombre de sommets de la zone à peindre soit le même que celui de la zone de la texture. Les coordonnées de la texture sont toujours entre 0.0 et 1.0 dans le sens u et v (notation usuelle pour les textures pour largeur et hauteur). Dans le noeud Appearance, positionner les attributs du noeud TextureTransform aux bonnes valeurs.
Syntaxe: TextureCoordinate=sltcns.html,
TextureTransform=slttns.html.
Example: rendu=sltcns2.html,
rendu=slttns2.html.
Par defaut, la valeur des normales sont calculées par la position des sommets des facettes. En general, ces valeurs sont suffisantes mais pour créer des illusions, il peut être nécessaire de les modifier. Le noeud Normal , rangé dans la famille des geometric property nodes, va permettre de redéfinir la normale aux facettes afin de gérer différemment la gestion de l'éclairage.
Syntaxe: Normal=slnns.html.
Les noeuds créant des facettes IndexedFaceSet, ElevationGrid et Extrusion possèdent des attributs permettant l'affectation des normales par facette ou par sommet, au travers d'un couple tableau de normale, tableau d'index de normale.
En synthese d'images, il y a deux façons de gérer l'ombrage de facettes, le flat shading et le smooth shading. L'un va considérer une normale uniforme sur toute la surface de la facette, créant ainsi des cassures nettes à la jointure des facettes, l'autre va faire évoluer cette normale de façon progressive d'un sommet à l'autre en fonction de valeurs interpolées à partir des normales calculées en chaque sommet, créant un rendu lisse au traver de l'éclairage. Les noeuds créant des facettes IndexedFaceSet, ElevationGrid et Extrusion possèdent tous un attribut creaseAngle qui va permettre définir un seuil d'angle au dessous duquel le lissage sera automatiquement validé.
Exemple: rendu=slcaf2.html,
rendu=slcaf4.html.
Eclairer une scène met en oeuvre les jeux d'ombres et de lumière. Afin de réaliser des effets recherchés, plusieurs types de source lumineuse sont disponibles, les noeuds PointLight, DirectionalLight et SpotLight. Ces noeuds sont tous classés dans la famille des common nodes. Par défaut, ces noeuds représentent des sources blanches, allumées dont l'intensite est de 1.0 et ne genérant pas d'éclairage ambiant.
Syntaxe: PointLight=slpntlit.html,
DirectionalLight=sldirlit.html,
SpotLight=slpotlit.html.
Le noeud Material permet, en plus de donner une couleur, de gérer le comportement des formes au regard de l'éclairage.
Syntaxe: Material=appear5.html.
Exemple: data=slsbv.html;
rendu=slsbe.html.
Afin de donner un aspet plus réaliste a notre scène, VRML2.0 offre la possibilité de créer un arriere plan. La gestion d'un arrière plan est infiniment moins couteux que de définir une forme gigantesque, englobant complètement la scène. En effet, cet arrière plan reste en permanence a une distance infinie de l'observateur, ce qui le place systématiquement au delà de tous les objets propres a la scène. Elle n'intervient à aucun moment dans un tri en distance ou dans la gestion du Z-buffer donc n'ajoute pas de charge de calcul au moment du rendu, juste une charge de visualisation. Deux types d'arrière plan sont possible. Une sphère colorée (Backdrop) permettant de simuler le ciel et le sol, ou une boite texturée (Panorama) permettant de simuler un paysage ou autre. C'est le noeud Background, de la famille des bindable nodes, qui permet de réaliser cet effet réaliste.
Exemple: rendu=ch1ex1.html,
rendu=ch1ex2.html,
rendu=ch1ex3.html.
Syntaxe: Background=ch1bkdrp.html,
Background=ch1panor.html.
Afin de donner encore un peu plus de réalisme à notre scène, il est possible de simuler le brouillard et de faire ainsi en sorte que les couleurs se fondent toutes en une seule au delà d'une certaine distance. C'est donc le noeud Fog, de la famille des bindable nodes, qui permet de réaliser cet effet de phénomène naturel.
Syntaxe: Fog=ch2syn.html.
Example: rendu=ch2ex1.html,
rendu=ch2ex2.html,
rendu=ch2ex3.html.
Une scène peu s'étendre sur une surface, voire même un volume important, être composée de plusieurs dizaines d'objets répartis sur cette surface ou dans ce volume. Depuis un point de vue ou une position particulière, il sera impossible de voir les détails de tous les objets. Le noeud LOD, dire LevelOfDetail, noeud de la famille des special group nodes, permet de grouper plusieurs représentations d'un même objet et de n'afficher qu'une seule d'entre elle en fonction de la distance séparant l'observateur de l'objet. Il va de soit que les représentations que l'on verra de près seront completes, avec tous les details de l'objet, par contre, les représentation qui seront visibles de plus loin seront épurées de tous les détails pour ne laisser apparaître que les formes grossières. De cette manière, en n'affichant que des objets grossiers à des distances lointaines, le moteur de rendu ne sera pas surchargée par l'affichage de détails invisibles et la charge sera donc diminuée. Ce noeud est un facteur inportant d'optimisation de scène.
Syntaxe: LOD=ch3syn.html.
La stratégie pour concevoir des représentations de plus en plus simple d'un même objet reste un sacré problème. On peut par exemple dans un premier temps enlever les textures, les textes, les effets sur l'objet. Par la suite, on devra simplifier la géometrie.
Example: rendu=ch3ex1.html,
rendu=ch3ex2.html.
Les noeuds Viewpoint d'une scène permettent de predéfinir des positions intéressantes d'ou l'observateur pourra se rendre compte des beautés de celle-ci. Ce noeud appartient à la famille des bindable nodes. En géneral, les browsers de scène VRML2.0 permettent de se placer en ces positions en les proposant dans un menu spécial, certains permettent aussi d'effectuer des animations en se déplacant d'une position prédéfinie á une autre.
Syntaxe: Viewpoint=ch4syn.html.
Se déplacer dans une scène de terrain, d'espace, ou pour la mise au point de la représentation d'un objet, voila trois cas où le mode de déplacement souhaité est complètement different. VRML2.0 propose trois types de deplacement pour satisfaire ces cas, les modes walk, fly et examine. Ces mode sont initialisés par noeud NavigationInfo, noeud de la famille des indable nodes, mais les browsers permettent de changer interactivement de mode.
Syntaxe: NavigationInfo=ch5syn.html.
Pour augmenter encore le réalisme d'un déplacement dans un monde virtuel, VRML2.0 propose la possibilité de se déplacer en activant la collision avec certains objets. Le noeud Collision, noeud de la famille des group nodes, est prévu a cet effet. La collision ne met en oeuvre que le déplacement de l'observateur avec les objets choisis. La fonction collision ne s'apercevra pas qu'un objet rentre en collision avec vous, static, ni que deux objets se heurtent.
Syntaxe: Collision=ch6syn.html.
En general, une scène VRML2.0 est stockée dans un fichier dont le nom est étendu par .wrl. Au niveau de la scène elle même, il existe un noeud, WorldInfo de la famille commn nodes, qui permet de nommer la scène et d'y insérer des informations diverses.
Syntaxe: WorldInfo=ch7syn.html.
Une scène sans son, reste une scène asceptisée. VRML2.0 propose deux noeuds, AudioClip et Sound de la famille common nodes, qui permettent de rajouter des sons et des bruitages à la scène. Bruit de fond, sons localisés ou bruitages sont possibles. Sound est aux bruitages ce que TextureTransform est aux textures, AudioClip est aux bruitages ce que ImageTexture est aux textures. AudioClip est un noeud qui va permettre de lire un son dans un fichier designé par un URL et de le jouer tant qu'on le lui dit. Le format des sons peut être du wave (.wav) ou du midi (.mid).
Syntaxe: AudioClip=ch8syn1.html.
Sound est le noeud qui va donner au son une position, une direction, une atténuation, ... . C'est au travers de ce noeud que l'on obtiendra des effets sonore tres réalistes voire même hors du commun.
Syntaxe: Sound=ch8syn2.html,
Sound=ch8syn3.html.
Une route permet de faire circuler un événement issu d'un noeud vers un autre noeud. Un événement est un message qui contient des valeurs typées. On reconnait les informations qu'un noeud peut émettre ou recevoir en regardant leur déclaration dans le manuel. En effet, les attributs d'un noeud contiennent quatre informations, le statut de l'attribut, le type de donnée, le nom de l'attribut et la valeur par défaut. C'est le champ statut qui importe pour le momment.
Le nombre de statuts utilisés interdit les attributs suceptibles d'être modifiés mais ne pouvant pas émettre d'événement (field & eventIn) ou encore (field & eventOut). On remarquera chez certains noeuds que le nom de l'événement est set_* ou *_changed et que le * est en fait le nom d'un attribut field du noeud. C'est en fait pour ndiquer qu'un attribut field n'est pas en entrée/sortie mais uniquement en entrée ou en sortie.
Un noeud est donc configuré pour recevoir et émettre des événements et gérer ses données.
Exemple: Fields&Events=ch9fne2.html.
La route permet de faire circuler un événement d'un noeud vers un autre noeud si:
Bien sur, une route va pouvoir acheminer un seul événement eventOut d'un noeud vers un seul événement eventIn d'un autre noeud, mais aussi pusieurs route pourront acheminer le même événement eventOut d'un noeud vers plusieurs eventIn de noeuds différents. Afin de créer une route, il faut que les noeuds concernés soient nommés, pour cela il faut utiliser la primitive DEF. La route se représentée par une phrase utilisant les mots clé ROUTE et TO.
Exemple: DEF=ch9rout3.html.
Mettre un zone sous surveillance, afin qu'un événement soit signalé quand un observateur pénètre dans ou regarde cette zone est possible. C'est objet du ProximitySensor et du VisibilitySensor, noeuds de la famille des sensor nodes. Ces noeuds comme les autres noeuds de la même famille, ne sont pas visibles, ne permettent pas de structurer une scène. Il ne font que signaler que quelqu'un se meut dans ou voit une zone en fournissant la date d'entrée, la position, l'orientation pour le ProximitySensor et bientôt la date de sortie de l'intrus.
Syntaxe: ProximitySensor=ch10syn1.html.
Exemple: code=ch10ex1.html.
Deux noeuds deja étudies surveillent aussi des zones, les noeuds LOD et Collision. Ces noeuds retournent aussi des événements relatifs a la position de l'observateur.
Exemple: code=ch10ex2.html.
Pouvoir gérer les interactions avec l'utilisateur fait partie des objectifs de VRML2.0. L'utilisateur pourra déplacer les objets qui composent la scène. Ces possibilités sont offertes par les noeuds TouchSensor, CylinderSensor, PlaneSensor et SphereSensor qui offrent chacuns des variantes propres. Tous ces noeuds appartiennent a la famille des sensor nodes qui, tout comme les ProximitySensor et VisibilitySensor, ne sont pas visibles, ne permettent pas de donner une sémantique à la scène mais sont la pour générer des événements concernant les actions de l'observateur. Les interactions entre une scène VRML et l'observateur sont implémentées de façon differentes suivant les browsers, certains utilisent le bouton gauche pour le déplacement et le bouton droit pour les interactions, d'autres ont differencié les modes et il faut commuter de mode pour passer du déplacement à l'interaction. Les interactions gérées sont le click , appui, lacher et le drag.
Exemple: TouchSensor=ch11ex1.html,
PlaneSensor=ch11ex2.html.
Juste un rappel, d'autre noeud gérent les interactions entre l'opérateur et la scène, je fais réference ici au noeud Anchor qui permettait de charger une autre scène en cliquant sur un de ses fils. Il faut préciser que, au contraire du noeud Anchor, les noeuds sensibles ne servent pas a regrouper d'autre noeuds. Ces noeuds servent à animer une scène, il sont utilisés en relation avec une route pour interférer avec d'autre noeuds.
Utiliser le temps, le noeud TimeSensor
Une scène doit pouvoir être animée de façon régulière, ou pour un temps défini. Le noeud TimeSensor, de la famille des sensor nodes, est fait pour cela. Le noeud TimeSensor permet de contrôler des événement pour démarrer et arréter des animations, définir un rythme pour un mouvement, ... .Un noeud TimeSensor est utilisé en relation avec une route pour interférer avec d'autre noeuds.
Syntaxe: TimeSensor=time4.html.
Exemple: code=time8.html.
Animation, les noeuds d'interpolation
Les noeuds d'interpolation sont disponibles pour gérer des valeurs interpolées a partir du temps. Bien sur, ces noeuds se situent entre un TimeSensor et un noeud particulier. Ainsi, à chaque événement set_fraction, l'interpolateur calcule une nouvelle valeur interpolée entre les différentes valeurs fixes précisées dans le noeud interpolateur. Ces valeur seront ensuite transmise par un événement value_changed vers le noeud destinataire.
Exemple: table=pos4.html.
Syntaxe: PositionInterpolateur=pos5.html.
Exemple: PositionInterpolateur=pos7.htm,
OrientationInterpolateur=other3.htm,
ColorInterpolateur=other4.htm,
CoordinateInterpolateur=other5.htm,
NormalInterpolateur=other6.htm,
ScalarInterpolateur=other7.htm.
Le noeud Script
Le noeud Script, de la famille des common nodes, permettent d'ouvrir le nombre fixe de noeuds predéfinis vers le monde des noeuds "user define". Le noeud Script permet d'utiliser des classes java pour créer des noeuds utilisateurs. La déclaration des classes inclu des event_in, event_out et field.
Syntaxe: Script=script3.htm,
Script=script4.htm.
Le noeud Script peut aussi utiliser du code javascript pour gérer aussi bien les attributs field, que les eventIn et les eventOut. Un lot de fonctions predéfinies sont alors à implémenter pour atteindre cet objectif.
Création de nouveaux noeuds
Il peut être intéressant de créer un nouveau noeud qui encapsule les noeuds predéfinis du langage, en utilisant des attributs spécifiques à notre nouveau noeud. La primitive PROTO va vous permettre de réaliser ceci. Cela rend donc possible la création de noeuds de haut niveau.
Syntaxe: PROTO-interface=proto3.htm,
PROTO-interface=proto4.htm.
La directive EXTERNPROTO va permettre de créer un nouveau noeud décrit dans un fichier VRML2.0. La seule condition est de connaitre l'interface du-dit noeud.
Syntaxe: EXTERNPROTO=proto12.htm.
Conclusion
VRML2.0, ce sont des spécifications, c'est un langage,
c'est aussi un demi-douzaine de browsers, des sites web et des newsgroup.
Cependant, VRML2.0 ne connait pas l'envol qu'il lui etait réserve
à sa creation. Maintenant ce langage est taloné par de nouveaux
concept principalement Java-3D.