|
VRML 1.0 |
LES NUDS
Dernière modification |
VRML (Virtual Reality Markup ou Modeling Language): Langage de description de scènes 3D "Equivalent" pour la 3D à ce que permet de faire HTML en 2D. Deux versions de VRML:
VRML 97 non totalement syntaxiquement compatible avec VRML 1.0 quoique très ressemblant. Reprise en version 97 des fonctionalités de la version 1.0 avec en plus l'intégration de:
X3D: Successeur de VRML
Modélisation de scènes 3D illuminées, affectées de matériaux ou texturées Utilisation de caméras de visualisation Création de zones cliquables permettant de réaliser:
Une scène VRML est décrite dans un fichier VRML caractérisé par une entête définissant son type. #VRML V1.0 ascii est l'entête pour un fichier VRML 1.0 au format texte. Concepts et syntaxe de la modélisation
Document VRML: Ensemble de nuds (objets) organisés sous forme hiérarchique (gestion de listes avec la possibilité
d'inclure des listes dans des listes) Un fichier VRML est lu du début à la fin. L'ordre d'apparition des nuds correspond au parcours prioritairement en profondeur de l'aborescence de scène. Cet ordre possède donc une influence directe sur la scène modélisée. Tout nud possède un type (Sphere, Cube, WWWInline, Separator,...). Deux importantes catégories de nuds:
Les nuds propriété modifient létat interne du processus daffichage de telle manière que le nouvel état
ainsi configuré reste actif jusquà nouvelle modification. Un nud peut comporter des champs qui ont pour rôle dindiquer les informations le concernant. Le nom du nud est suivi, entre accolades, des noms et des valeurs de ses différents champs. L'espace est le délimiteur unique pour les noms de champs et leurs valeurs (pas de virgule, de point-virgule ou de parenthèses). Un champ non renseigné (nom et valeur(s) non indiqués) est initialisé à sa valeur par défaut. Exemples: Sphere contient le seul champ radius. Sphere { radius r }
Cube en contient 3. Cube { width w height h depth d }
#VRML V1.0 ascii Sphere { radius 10 } Scène composée d'une unique boule blanche
Sphere { radius r }
Cube { width w height h depth d }
Cone { parts p height h bottomRadius br }
Cylinder { parts p height h radius br }
|
Accès au testeur |
Nud de groupe: Nud qui, outre ses propres champs s'il en possède, peut contenir d'autres nuds.
Tout le contenu d'un nud de groupe est vu comme un seul objet.
Separator: Nud de groupe sans champs destiné à contenir d'autres nuds. C'est via les nuds Separator que sont structurées les arborescences de scène dans les fichiers VRML. Exemple: Voir plus loin, voir plus loin, voir plus loin |
Tout ce qui se trouve dans un nud de groupe, faute d'indication contraire, est défini dans le même repère de modélisation: le repère courant. Les transformations géométriques sur le repère de modélisation peuvent être réalisées au moyen des nuds:
Translation {
Rotation {
Scale {
MatrixTransform {
Transform {
Transform {
ATTENTION: Un nud transformation géométrique compose la transformation géométrique courante de l'environnement VRML avec la transformation géométrique spécifiée. #VRML V1.0 ascii Separator { Sphere { radius 10 } Separator { Transform { translation 10 0 15 } Sphere { radius 2 } } Separator { Transform { translation -10 0 5 } Sphere { radius 1.5 } } }
|
|
|
Material: Spécifie les caractéristiques de rendu optique d'une surface. Material { ambientColor r v b diffuseColor r v b specularColor r v b emissiveColor r v b shininess f transparency f }
#VRML V1.0 ascii Separator { Material { diffuseColor 1 1 0 } Sphere { radius 10 } } La sphère définie après Material est affectée de la couleur jaune. Il s'agit de la couleur quelle réfléchit par diffusion.
#VRML V1.0 ascii Separator { Material { diffuseColor 1 1 0 } Sphere { radius 10 } Separator { Transform { translation 10 0 15 } Material { diffuseColor 0 0 1 } Sphere { radius 2 } } Separator { Transform { translation -10 0 5 } Material { diffuseColor 1 0 0 } Sphere { radius 1.5 } } }
#VRML V1.0 ascii Separator { Translation { translation 0 0 -30 } Material { diffuseColor 0 0 1 } Separator { Translation
{ translation 12 0 0 } Material { diffuseColor 1 0 0 } Sphere { radius 10 } } Separator { Translation { translation -12
0 0 } Sphere { radius 10 } } }
|
|
Plusieurs nuds lumière sont utilisables en VRML:
PointLight {
DirectionalLight {
SpotLight {
Ils éclairent les objets définis après eux. #VRML V1.0 ascii Separator { PointLight { intensity 1 location 0 0 0 color 1 1 0.9 } Material { emissiveColor 1 1 0 } Sphere { radius 10 } Separator { Translation { translation 18 0 0 } Material { diffuseColor 0 0 1 shininess 0 } Sphere { radius 5 } Separator { Translation { translation 10 0 0 } Material { diffuseColor 0.7 0.7 0.7 shininess 0 } Sphere { radius 3 } } } }
Utilisation d'un PointLight au centre du soleil Material { diffuseColor 0 0 1 specularColor 0.9 0.9 0.9 shininess 0.8 }
Les objets d'une scène VRML peuvent être rendus cliquables. -> création de liens vers d'autres mondes virtuels ou, plus simplement, d'autres pages WEB ou tout autre document. Le nud WWWAnchor WWWAnchor est un nud de groupe. -> il contient les nuds à lier avec l'URL indiquée.
WWWAnchor {
name et description doivent être donnés entre guillemets. #VRML V1.0 ascii Separator { Material { emissiveColor 1 1 0 } WWWAnchor { name "http://www.univ-fcomte.fr" description "Un lien vers la Franche-Comté" Sphere { radius 10 } } }
|
Les caméras VRML effectuent par défaut une visualisation selon l'axe -z. Il est toutefois possible de définir une rotation appliquée à cet axe. Il est aussi possible de choisir la position de la caméra. Deux types de caméra:
PerspectiveCamera {
OrthographicCamera {
Ces caméras permettent de définir des points de vue dans les scènes VRML. Une caméra peut être définie globalement pour une scène par définition immédiate après l'entête de fichier VRML. Si elle apparait en cours de scène, elle ne concernera que les noeuds situés après elle dans l'arborescence de scène. Dans ce dernier cas, les objets sont affichés comme visualisés par cette caméra.
PerspectiveCamera {
PerspectiveCamera { Exemples
|
|
VRML autorise le texturage des objets d'une scène. Le nud propriété Texture2 permet cette réalisation. Une texture peut être donnée sous deux formes:
Texture2 {
Tous les objets placés après le nud texture sont texturés au moyen de ce nud.
La couleur des pixels est directement donnée dans le fichier VRML sous la forme de la résolution en x, puis de la résolution en y, puis du nombre d'octets par pixel (3: RVB), et enfin, d'une suite de pixels en notation hexadécimale. Texture2 { image 4 4 3 0xC0C0C0 0x808080 0xFFFFFF 0x404040 0x808080 0x202020 0x808080 0xC0C0C0 0x202020 0x808080 0xFFFFFF 0x808080 0x808080 0xC0C0C0 0x808080 0x202020 }
Dans le SceneViewer
Dans le plugin WorldView
On indique ici l'URL d'un fichier contenant l'image à mapper.
Texture2 {
(1) Utilisation du nud Coordinate3 pour indiquer les coordonnées 3D des sommets
Coordinate3 {
(2) Utilisation du nud IndexedFaceSet pour indiquer la liste des facettes par indexation dans la liste des sommets IndexedFaceSet { coordIndex [ s1 s2 ... sn -1, s1 s2 ... sm -1, s1 s2 ... sp -1, ... ] materialIndex normalIndex textureCoordIndex }
#VRML V1.0 ascii Separator { Material { diffuseColor 0.0 1.0 0.0 ambientColor 0.0 0.1 0.0 } Coordinate3 { point [ 1.0 -1.0 1.0, 1.0 -1.0 -1.0, -1.0 -1.0 -1.0, -1.0 -1.0 1.0, 1.0 1.0 -1.0, -1.0 1.0 -1.0, -1.0 1.0 1.0, 1.0 1.0 1.0 ] } IndexedFaceSet { coordIndex [ 2, 1, 0, -1, 2, 0, 3, -1, 4, 1, 2, -1, 4, 2, 5, -1, 5, 2, 3, -1, 5, 3, 6, -1, 6, 3, 0, -1, 6, 0, 7, -1, 4, 5, 6, -1, 4, 6, 7, -1, 1, 4, 7, -1, 1, 7, 0, -1 ] } }
DEF permet d'attribuer un nom à un nud (un objet) de manière que ce nud puisse être réutilisé par la suite (cet objet puisse être instancié).
DEF nom_objet type_de_noeud { }
DEF Soleil Separator { Material { diffuseColor 1 1 0 } Sphere { radius 10 } }
A tout instant, un appel à USE permet d'instancier un objet nommé.
USE nom_objet
USE Soleil #VRML V1.0 ascii DEF Planete Separator { Material { diffuseColor 1.0 1.0 1.0 ambientColor 0.1 0.1 0.1 } Sphere { } } Translation { translation 2 3 4 } USE Planete Translation { translation 4 3 2 } WWWAnchor { name "http://www.univ-fcomte.fr" description "Retour sur Terre" USE Planete }
WWWInline est un nud de groupe permettant l'inclusion par référence d'objets à l'intérieur d'une scène. -> non construction entière d'un objet, mais seulement référenciation des parties de cet objet comme provenant d'autre documents VRML.
WWWInline {
La boite englobante est affichée en filaire tant que l'objet référencé n'est pas chargé. Elle doit être d'une taille voisine de l'objet qu'elle représente.
Image intermédiaire
Image finale Le nud de groupe LOD permet l'adaptation d'un objet visualisé à la distance d de visualisation.
LOD {
Un nud LOD contient théoriquement n+1 nuds.
#VRML V1.0 ascii Separator { LOD { range [ 50,100 ] Separator { Material { diffuseColor 1 1 0 } Sphere { radius 10 } } Separator { Material { diffuseColor 1 0 1 } Cone { bottomRadius 10 height 10 } } Separator { Material { diffuseColor 1 1 1 } Cube { width 10 height 10 depth 10 } } } }
Récapitulatif des nuds et valeur par défaut des champs
Cube {
Sphere {
Cylinder { parts: composition de SIDES, TOP, BOTTOM et ALL Exemple: (SIDES|TOP)
Cone { parts: composition de SIDES, BOTTOM et ALL
Coordinate3 {
DirectionalLight {
IndexedFaceSet {
IndexedLineSet {
LOD {
Material {
MatrixTransform {
OrthographicCamera {
PerspectiveCamera {
PointLight {
PointSet {
Rotation {
Scale {
SpotLight {
Texture2 {
WRAP ENUM
Transform {
Translation {
WWWAnchor {
MAP ENUM
WWWInline { |