930 likes | 1.15k Views
VRML 97. Julien Lenoir (Thanks to Stéphane LOUIS DIT PICARD) email : lenoir@lifl.fr. Historique & Présentation . Pourquoi de la 3D ?. Enrichissement du Web Plusieurs avantages à la 3D Conception d’objet 3D (architecture, mécanique,….) TéléVente (présentation, support, ….)
E N D
VRML 97 Julien Lenoir(Thanks to Stéphane LOUIS DIT PICARD) email : lenoir@lifl.fr
Pourquoi de la 3D ? • Enrichissement du Web • Plusieurs avantages à la 3D • Conception d’objet 3D (architecture, mécanique,….) • TéléVente (présentation, support, ….) • Reconstitution historique (monuments, faits, …. ) • Apprentissage (médecine, chimie, ……)
La naissance de VRML 1.0 • 1991: Naissance d’HTML [Beners-Lee] • 1992 : Création du format Open Inventor [SGI] • Mai 1994 : Présentation des travaux de Marc Pesce & Tony Parisi sur les interfaces de Réalité Virtuelle • Création d’une « mailing list » pour définir un langage universel de modélisation 3D
VRML 1.0 • Octobre 1994 : Naissance de VRML 1.0 (basé sur le format Open Inventor de SGI): • Indépendance de la plate-forme • Passage sur des lignes bas-débits (modems) • Format ASCII
L’évolution de la norme VRML • Début 1996 : Proposition d’extension • Prise en compte de la dynamique des « mondes virtuels » • Août 96 : Naissance de VRML 2.0 • Décembre 97 : Normalisation ISO • VRML 2.0 (aussi appelé VRML97)
VRML 97 • Principales améliorations par rapport à la version 1.0 : • Interaction • Animation des scènes • Prototypage d’objets • Amélioration du réalisme
L’avenir : X3D • Multi-utilisateurs • Encore plus de réalisme • Coopération avec les nouveaux standards • D-HTML • MPEG 4 • XML
Le succès de VRML • Standard normalisé et libre de droit • Accessibilité : • format ascii édition/compréhension simple • nombreux browsers sur de nombreux OS (navigateur WEB + Plug-in VRML) • une documentation (http://www.vrml.org)
Un exemple simple • #VRML V2.0 utf8Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Sphere { radius 5.0 }}
L’exemple : l’entête du fichier • #VRML 2.0 utf8 • # Symbole de commentaires • VRML 2.0 fichier contenant une description VRML au format 2.0 • utf8 format utilisé pour coder le texte
L’exemple : la description géométrique • Shape {...} le nœud pour définir un objet visible • appareance {...} paramètre l’attribut visuel de l’objet • geometry {...} paramètre la géométrie de l’objet
Notion de champs, de nœud et d’arbre • Un nœud est composé de champs : • chaque champs est typé • chaque champs permet de configurer le nœud • Une hiérarchie de nœuds forme un arbre : • des nœuds spéciaux (appelés « nœud de groupe ») permettent de créer la hiérarchie
Dans l’exemple • Le nœud Shape est composé : • un champs appearance de type Appearance • un champs geometry de type SFNode (i.e. n ’importe quel nœud) • Le nœud Appearance est composé : • un champs material de type Material • Le nœud Material est composé : • un champs diffuseColor de type SFColor
Type simple : • SFxxx E • Type tableau : • MFxxx [E1, E2, …, En] • Modes d’accès : • EventIn écriture • EventOut lecture • ExposedField lecture/écriture
Booléen : • SFBool • MFBool n’existe pas ! • Vecteur 2D (coordonnées dans un plan) • SFVec2f X Y • MFVec2f [X1 Y1, …, Xn Yn] • Vecteur 3D (position, scale) : • SFVec3f X Y Z • MFVec3f [X1 Y1 Z1, …, Xn Yn Zn]
Rotation : • SFRotation X Y Z angle (en radians) • MFRotation [X1 Y1 Z1 angle1, ..., Xn Yn Zn anglen] • Couleur : • SFColor R G B • MFColor [R1 G1 B1, …, Rn Gn Bn] • Chaine de caractères : • SFString “chaine” • MFString [“chaine1”, …, “chainen”]
Nœud : contient n’importe quel nœud VRML • SFNode nœud • MFNode [nœud1, …, nœudn]
Une boite 3D geometry Box { size X Y Z }
Un cône geometry Cone { bottomRadius R height H side TRUE/FALSE bottom TRUE/FALSE }
Un cylindre geometry Cylinder { radius R height H side TRUE/FALSE top TRUE/FALSE bottom TRUE/FALSE }
Une sphère geometry Sphere { radius R }
Le nœud « Material » • diffuseColor Couleur de l’objet • ambientIntensity Proportion de réflexion (0-1) • specularColor Couleur du spéculaire • emissiveColor Lumière propre • shininess Brillance (0-1) • transparency Degré de transparence (0-1)
Les textures • 3 formats de texture reconnus : • statiques : images au format jpeg & png • animées : vidéo au format mpeg texture ImageTexture { url "texture.jpg" repeatS TRUE/FALSE repeatT TRUE/FALSE }
La « facettisation » • Modélisation courante • Nombreux modeleurs • Formes complexes
Format général : la notion d’index Shape { geometry IndexedFaceSet { coord Coordinate { point [x1 y1 z1, x2 y2 z2, … ] } coordIndex [ 0,1,2,-1, 4,5,1,-1, ... ] }} Un point 3D Une facette
Exemple : Une pyramide geometry IndexedFaceSet { coord Coordinate { point [ 1 0 0, 0 1 0, 1 1 0, 0.5 0.5 1 ] } coordIndex [ 0,1,2,-1 #facette 1 0,1,3,-1 #facette 2 0,2,3,-1 #facette 3 1,2,3,-1 #facette 4 ]}
La couleur des facettes coordIndex […]color Color { color [ 1 0 0, 0 1 0, 0 0 1, 1 0 1, ] } colorPerVertex FALSE
Des textures & des facettes • Placage par défaut sur une boîte englobante • Problème de déformation de la texture • Placage précis: • utilisation du nœudTextureCoordinate
L’extrusion • Extrusion
Un exemple (1/2) geometry Extrusion { crossSection [ 1 0, .67 -.27, .71 -.71, .27 -.67, 0 -1, -.27 -.67, -.71 -.71, -.67 -.27, -1 0, -.67 .27, -.71 .71, -.27 .67, 0 1, .27 .67, .71 .71, .67 .27, 1 0 ] spine [ 0 0 0, 0 0 -6 ] beginCap TRUE endCap TRUE solid TRUE }
Un exemple (2/2) • Résultat visuel :
Les axes Y • Objet centré en (0,0,0) • Comment placer les objets ? X Z
Le point de vue Viewpoint { position 0 0 10 orientation 0 0 1 0 fieldOfView 0.785 # pi/4 description "..." jump TRUE } Y X Z
Group Shape Shape cube Le nœud « Group » • Pour grouper plusieurs objets Group { children [ Shape { geometry cylinder {} } , Shape { geometry cube {} } ] } cylinder
Transform Shape Appareance Material Cylinder Le nœud « Transform » Transform { translation 0.3 0.2 0.1 rotation 0.0 0.0 1.0 3.1415 children [ Shape { appearance Appereance { material Material {} } geometry Cylinder {} } ] }
Les différentes transformations possibles • Une translation de type SFVec3f • Une rotation de type SFRotation • Une mise à l’échelle (scale) de type SFVecf3f
Ordre des transformations Transform { translation tx ty tz rotation rx ry rz angle scale sx sy sz} 3 2 1 ATTENTION A LA COMPOSITION DES TRANSFORMATIONS
Propagation des transformations Objet 1 Transform Objet 2 Transform Objet 3 Transform
DEF & USE • DEF nom_du_nœud nœud {...} • USE nom_du_nœud
Exemple de DEF & USE DEF cuberouge Shape { appearance Appearance { material Material { diffuseColor 1.0 0 0 } } geometry Box {}} ... Transform { rotation ... children [ USE cuberouge ]} ...
Les PROTO • Réutilisation des objets comme pour le DEF • Création de nouveaux nœuds • Paramétrage possible
Syntaxe Générale PROTO nom_du_proto [ field type nom_param valeurs …]{ # définition de l’objet}