![]() |
||
|
| |||
Voici un petit cours qui vous permettra
|
|
Sommaire Étape 1 : Le premier pas > Le viewerÉtape 2 : Les primitives du VRML 2 > Le parallélépipède rectangleÉtape 3 : Le premier objet > Récapitulons...Étape 4 : Les choses sérieuses commencent ;-) > Les formes complexesÉtape 5 : Créer des formes > Et la modélisation dans tout ça ?Étape 6 : L'optimisation > Arrondir les coordonnées et compresser | ||
|
Tout d'abord merci de me faire part des erreurs, fautes d'orthographes et coquilles que vous trouverez sûrement dans ce document (d'autres commentaires sont également les bienvenues). | ||
|
> Le viewer : Pour visualiser les espaces virtuels VRML vous devez posséder un plug-in VRML. Vous pouvez naturellement en installer un dans IE et un autre dans Netscape. | ||
|
> Le type de fichier : Pour commencer une scène, ouvrez Bloc-notes (ou Simpletext pour mac) et enregistrez le document avec une extension *.wrl (si vos extentions de fichier ne sont pas visibles, désactivez la case à cocher «Masquer les extensions MS-DOS pour les types de fichier enregistrés» dans les options du menu affichage de l'explorateur windows), puis écrivez au début du document:
Vous devez copier ce commentaire à la première ligne de tous vos documents VRML. | ||
|
> La couleur du fond : Vous devez ensuite définir la couleur d'arrière plan de votre scène en écrivant le noeud suivant:
Les trois nombres (qui doivent être compris entre 0 et 1) sont respectivement les valeurs RVB (rouge vert bleu) qui définissent la couleur du fond. (0,1 pour le rouge, 0,4 pour le vert et 0,7 pour le bleu, cette dernière étant la plus élevée, nous aurons un fond dans les tons bleu.) | ||
|
> Les points de vue Vous devez ensuite définir le point de vue qu'aura le visiteur en entrant dans votre scène avec le noeud suivant:
Les trois nombres définis dans le champ «position» sont respectivement les coordonnées dans le repère d'axes X, Y et Z. Y est la hauteur, Z est la profondeur (axe du regard par défaut de la caméra avant rotation) et X est la largeur (axe allant de droite à gauche avec la position par défaut de la caméra). (il est important de remarquer que l'unité est le mètre pour que la navigation des plug-ins soit convainquante). Les trois premiers nombres placés après "orientation" définissent les coordonnées XYZ d'un vecteur, et le quatrième définit l'angle de rotation en radians autour du vecteur. (Ici nous avons une rotation de 1.571 radian autour de l'axe Y, ce qui correspond à un quart de tour vers la droite, car le sens de rotation utilisé est le sens trigonométrique qui est l'inverse des aiguilles d'une montre.) Le nom entre guillemets du champ «description» seras le nom du point de vue.
Vous pouvez mettre autant de point de vue que vous voulez, le visiteur pourra les voir successivement à l'aide de sont navigateur VRML. (Le premier point de vue seras celui utilisé à l'ouverture du document.) | ||
|
> Le parallélépipède rectangle : Les formes de base à votre disposition sont le parallélépipède rectangle, la sphère, le cylindre et le cône. Le noeud codant pour le parallélépipède rectangle est:
Les nombres placés après «translation» sont les coordonnées dans un repère XYZ du centre du parallélépipède rectangle. Les trois premiers nombres placés après «rotation» définissent les coordonnées XYZ d'un vecteur, et le quatrième définit l'angle de rotation en radians autour du vecteur. (Ici nous avons une rotation de 60 degrés autour de l'axe Y.) Dans le champ "size" nous avons les dimensions suivant X, Y et Z du parallélépipède rectangle. Enfin dans le champ "diffuseColor" nous avons les valeurs en RVB qui définissent la couleur de notre objet. (Les trois nombres doivent être compris entre 0 et 1 comme pour la couleur de fond.) Vous pouvez voir à quoi ressemble ce parallélépipède rectangle (ainsi que les autres primitives vrml qui vont suivre) sur la première image de l'étape 3: Récapitulons. Note sur la mise en forme du code : (si vous ne connaissez aucun langage de programmation vous serez peut-être étonné par la présentation du code) chaque élément contenu est décalé avec une tabulation par rapport à l'éléments contenant (cela s'apelle l'indentation), et les accolades (ainsi que les crochets) fermantes sont placées à la ligne au même niveau que le noeud qui l'a ouverte. L'ensemble des retours charriots (retours à la ligne), des espaces et des tabulations s'apellent l'extraneous et est purement facultatif mais grandement recommandé pour la lisibilité. | ||
|
> La sphère : Le noeud codant pour la sphère est :
Les champs «translation» et «diffuseColor» ont ici les mêmes fonctions que pour le parallélépipède rectangle (le champ «rotation» est ici inutile sauf cf ci-dessous). Le champ «radius» est comme vous devez vous en douter le rayon de la sphère. Pour réaliser une sphère applatie type Smarties, ou un ballon de rugby allez voir la section homothétie | ||
|
> Le cylindre : Le noeud codant pour le cylindre est:
Les champs «translation», «rotation» et «diffuseColor» ont toujours les mêmes fonctions que pour le parallélépipède rectangle. Le champ «radius» est le rayon du cylindre et «height» est sa hauteur. | ||
|
> Le cône : Le noeud codant pour le cône est:
Le champ «bottomradius» est le rayon de la base du cône et «height» sa hauteur. Les autres champs ont les même fonctions que précédament. | ||
|
> Récapitulons... Ainsi si vous avez copié-collé tous les noeuds présentés jusqu'ici dans Bloc-notes vous devez obtenir le code suivant:
Ce code copié dans Bloc-notes et enregistré avec une extension de fichier *.wrl, vous donnera ceci ouvert avec un navigateur muni d'un plug-in VRML:
Donc voici ce que vous pourriez obtenir en utilisant les divers primitives vues jusqu'à présent :
| ||
|
> Les formes complexes Pour réaliser des formes complexes on utilise le noeud «IndexedFaceSet». Le principe de ce noeud est de donner les coordonnées des points de la forme puis de préciser quels points formeront une facette. Les coordonnées des points sont donnés dans le champ «point» (qui seront numérotés à partir de 0; ici nous avons 12 points de 0 à 11), puis des séries de trois numéros corespondant à trois points formant une facette sont donnés dans le champ «coordIndex»; chaque groupe de trois numéros est suivie du nombre -1 .
Ce qui suit le caractère # correspond à du commentaire et est facultatif; cependant il permet de numéroter chaque point. Vous trouverez de plus amples informations sur comment exploiter ce noeud dans l'étape 5. Vous ne réaliserez peut-être jamais d'objet entièrement au NotePad avec un noeud IndexedFaceSet (sauf si vous êtes un peu fou comme moi et que vous partez dans un trip modélisation au NotePad ;-) ) mais il est néanmoins intéressant de connaître sa structure. Vous remarquerez ainsi que pour traduire un fichier vrml-1 en vrml-2 il suffit de copier-coller les définitions de points et de facettes du fichier vrml-1 dans ce noeud vrml-2. | ||
|
> Le texte Pour inclure du texte dans vos scènes vous pouvez utiliser le noeud "Texte" :
Copiez dans le champ «string» votre texte sans accents (sinon rien ne s'affichera). Dans le champ size entrez la taille du texte et dans le champ «family» trois types de tipo sont disponibles: "SANS", "SERIF" et "TYPEWRITER". L'alignement du texte est défini dans le champ «justify», ici aussi trois valeurs possibles: "BEGIN", "MIDDLE" et "END". | ||
|
> L'homothétie et la symétrie Le champ «scale» permet de déformer la sphère dans les différentes directions (une déformation nulle est scale 1 1 1 puisque ceci multiplie les dimensions de l'objet).
Ce champ est aussi très utile pour réaliser des symétries avec -1 en X, Y ou Z suivant l'axe de symétrie voulu. Ainsi scale 1 -1 1 multiplie par -1 toutes les coordonnées en Y de l'objet. Pour voir comment utiliser cette technique pour simuler un reflet allez voir le didacticiel correspondant sur Wen3D-fr.com. | ||
|
> Les couleurs Les différents paramètres permettant de régler la couleur des objets sont diffuseColor pour la couleur principale (dont le principe de réglage avec des valeurs en RVB à déjà été expliqué plus haut), ambientIntensity est l'intensité d'éclairage ambiant (une valeur entre 0 et 1), emissiveColor pour la couleur émise (type néon; se règle avec une valeur en RVB comme diffuseColor), specularColor pour la couleur des reflets (idem: une valeur RVB), shininess pour la brillance (une valeur entre 0 et 1) et transparency pour la transparence (une valeur entre 0 et 1).
| ||
|
> Les textures Pour réaliser une texture on remplace le noeud «material» par le noeud «texture». Le code d'une boîte avec une texture est alors:
La texture utilisée ici est l'image "image.jpg". Le document VRML et l'image doivent être placés dans le même dossier. Par soucis de clareté lorsqu'un document VRML utilise beaucoup de textures on peut regrouper toute les images dans un dossier appelé par exemple «textures», l'adresse relative spécifiée dans le champ «url» sera alors "textures/image.jpg". Le document VRML et le dossier «textures» doivent être placés dans le même dossier. (C'est le même principe que les liens relatifs html.) Pour réaliser une texture transparente voici la solution (idéal pour recréer de l'eau):
| ||
|
> Le sol Pour réaliser le sol de vos scènes vous pouvez utiliser le noeud «ElevationGrid»:
Les champs «xDimension» et «zDimension» donnent le nombre de point que possède la grille suivant les axes x et z. Les champs «xSpacing» et «zSpacing» donnent l'espacement suivant x et z entre chaque point de la grille. Le champ «translation» indique ici les coordonnées du premier point et non le centre de la grille. | ||
|
> définir le mode de déplacement du visiteur dans la scène Ici le visiteur sera en mode marcher en arrivant dans la scène mais pourra choisir le mode qu'il désir par la suite. Avec type ["EXAMINE", "FLY"] le visiteur sera initialisé avec le mode examiner mais ne pouras choisir que voler en deuxième ressort. Avec type ["WALK"] on impose la marche comme seule navigation possible. Et avec type ["NONE"] le visiteur ne peut naviguer dans la scène (peut-être utilisée pour réaliser une animation ou la caméra est en mouvement grace à une animation du noeud "Viewpoint").
| ||
|
> En savoir plus sur les textures Pour optimiser votre page/scene web en 3D vous pouvez utiliser la même texture pour plusieurs objets différents en colorant cette texture de couleurs différentes. Pour cela il faut enregistrer votre texture en niveau de gris et indiquer la couleur avec laquelle la colorer dans «diffuseColor».
Pour répéter une texture dans 2 dimensions, c'est comme ceci:
Vous pouvez aussi utiliser la propriétéde transparence des images *.gif (une application directe est vue à l'étape : la fausse 3D) Pour optimiser vos scènes par rapport à l'accélération matérielle il faut également utiliser des tailles de textures précises : il faut utiliser des puissances de 2 qui sont des multiples de 64, donc vous avez le choix entre les dimentions en pixels : 64 x 64 ou 128 x 128 ou 256 x 256 (ou pourquoi pas 512 x 512 mais ça commence à faire grand pour du Web-3D et tous les plug-in ne sont pas capables de les afficher et les interprèteront tout simplement comme une texture 256 x 256) Et pour optimiser le poid de ces textures, c'est comme l'optimisation des images pour un site Web-2D, pour les *.gif réduisez le nombre de nuances différentes au maximum (Gimp le fait excellement bien ;-) ) sinon pour les *.jpg vous savez comment faire... | ||
|
> La fausse 3D Un principe bien connu en modélisation est l'intégation d'éléments 2D dans des environnements 3D. Pour réaliser ceci on utlise la propriétée des *.gif intégrants la transparence pour réaliser une image de notre objet détourée puis on plaque cette image sur un plan qui fera toujours face au visiteur. (ainsi on peut intégrer des personnages et des arbres [comme dans les modélisations d'archi] pour donner du réalisme sans avoir une scène qui pèse trop lourd pour être utilisable sur le réseau) (attention la facette doit être carrée si votre map est carrée comme je vous l'ai conseillé plus haut)
| ||
|
> La navigation dans le site entre les pages web-2D et web-3D Pour créer des liens au sein d'une scène web utilisez le noeud «Anchor». url "page2.wrl" sera comme vous l'aurez deviné un lien vers une autre page web 3D et url "page2.html" sera comme vous l'aurez également deviné un lien vers une page web classique en HTML. Mais me direz-vous comment utiliser les frames et autres paramètres de naviguation? Eh bien, lisez la suite ;)
Attribuez les même commandes qu'en HTML à l'attribut "target" du noeud «parameter» pour utiliser les frames et autres paramètres de naviguation. Petit rappel de HTML _new pour ouvrir la page dans une nouvelle fenêtre (qui sera la même pour tous les liens avec ce paramètre), et si vous êtes dans une frame: NameOfFrame pour définir dans quelle frame doit s'afficher la page, _blank pour définir un lien vers une nouvelle fenêtre (une nouvelle fenêtre à chaque lien), _self valeur par défaut (lien à l'intérieur de la même frame), _parent indique que la page doit s'ouvrir en occupant tout le frameset de la frame courante et _top permet à la nouvelle page d'occuper l'intégralité de la fenêtre du navigateur supprimant ainsi tout frameset.
Vous pouvez bien sûr utiliser des liens relatifs ou absolus ainsi que le protocol mailto: . Les commandes JavaScript pour effectuer un retour ou une fermeture de fenêtre fonctionnent aussi. Vous pouvez aussi utiliser les cibles bien connues en HTML (lien dans un même document comme utilisé ici avec le sommaire) pour permettre une navigation dans la scène, c'est alors le nom DEF du «Viewpoint» qui doit être utilisé dans l'attribut url avec une dièse devant celui-ci: url "#vue3" . Vous pouvez aussi faire un lien (à partir d'une page html ou vrml) vers une cible d'une scène vrml et ainsi elle se chargera sur ce Viewpoint et non celui par défaut: url "page2.wrl#vue3" | ||
|
> et la modélisation dans tout ça ? Bon malgré tout vous l'aurez compris c'est pas au NotePad que l'on va modéliser des objets très complexes, donc pour cela vous pouvez utiliser le modeleur de votre choix s'il exporte en VRML (s'il n'exporte pas en vrml, exportez votre objet dans un format que vous pourrez convertir en vrml). Ainsi vous pouvez utiliser Blender pour modéliser vos propres scènes (lisez le didacticiel sur ce sujet) Vous pouvez égalment réutiliser des objets trouvées sur internet (au format VRML 1 ou 2) pour les intégrer dans vos scènes (veillez cependant à avoir l'accord de l'auteur pour les publier sur internet). Cependant vous me demanderez sûrement pourquoi s'intéresser au code alors que les modeleurs exportent en VRML 2 ? Hé bien c'est parce que si vous utilisez Blender ou un des autres modeleurs les plus répendus, ceux-ci n'étant pas spécialisés pour le VRML-2, vous aurez probablement besoin d'éditer le code généré pour arriver à ce que vous voulez obtenir, ou pour l'optimiser. Deplus pour ne pas avoir un fichier trop lourd à charger pour vos visiteurs il vaut mieux évidemment utiliser les primitives du VRML-2, plutôt que de laisser l'ensemble des coordonnées nécessaire pour réaliser par exemple une sphère, surtout quand ses points sont définis avec une précision au micron... D'autre part, il existe malgré tout des modeleurs spécialisés pour le vrml (et ceux pour le X3D viendront sûrement eux aussi) mais le code généré est souvent mal optimisé et connaître le fonctionnement du code source permet de mieux choisir les options en sachant ce qui se passe derrière. Deplus les options avancées du code ne pourront jamais être prises en compte. Et comme l'a dit John Maxwell utiliser un logiciel Wysiwyg «est une méthode rapide, mais [...] le code résultant est toujours plus volumineux et moins performant qu'un travail codé à la main» et pour Jean-Michel Réveillac les modeleurs exportant en vrml «présentent l'inconvénient de générer un code peu optimisé et donc des fichiers de taille importante. Par ailleurs, ces logiciels ne considèrent pas l'intégralité des fonctions vrml et certains cas de figure sont impossibles à créer, ce qui oblige le développeur à reprendre le code». (Attention si vous publiez des choses, faites attention de respecter les droits d'auteur et ne publiez rien que vous ayez obtenu avec un logiciel dont vous ne possédez pas la licence, c'est pourquoi je prends Blender comme exemple qui est libre pour une utilisation non commerciale et non professionnelle. Deplus il a l'avantage d'être extrêmement bien documenté sur le web, et c'est un logiciel avec lequel on peut travailler très vite grâce à son interface «deux mains»). | ||
|
> L'optimisation des fichiers VRML : Un dernier point mais qui a une très grande importance concerne la taille des fichiers générés, car même si vous avez l'adsl pensez que c'est loin d'être le cas pour tous le monde, donc il faut absolument penser à optimiser vos scènes au maximum. En effet une fois compactées vos scènes resteront consultables en ligne, car cette compression ne sert pas à rendre votre scènes plus facilement téléchargeables mais simplement plus légères, car il ne s'agit pas ici de zipper l'ensemble des fichiers dans une même archive, mais de compresser chaque fichier individuellement, car les plug-ins sont capables de visualiser les fichiers vrml compactés. Pour cela vous pouvez utiliser le logiciel de commpression de votre choix s'il peut compresser au format gunzip *.gz ou équivalent; renommez alors le fichier résultant de cette compression *.wrl.gz en *.wrz qui corespond au packed-vrml. Mais pensez bien alors si vous avez des Inline de corriger l'extention des liens relatif! :-) De même pour voir le code d'un fichier récupéré sur internet faites l'opération inverse. (Utiliser l'extension *.wrz permet d'indentifier facilement la nature de vos fichiers, mais l'extension classique *.wrl fonctionne tout aussi bien pour le packed-vrml. Ça peut-être utile de savoir ça si vous avez une scène composée de nombreux "Inlines" et que vous avez la flême de renomer tout vos liens relatifs.) Pensez également à utiliser l'optimiseur de fichier de mon site pour supprimer les décimales superflues des coordonnées de points de vos modèles réalisés avec Blender (ou un autre modeleur et ce même si vous compressez ensuite vos fichiers), en effet une précision au micron est tout de même un peu exagérée pour du web3D, une précision au milimètre, au centimètre ou au décimètre suivant les cas de figure c'est quand même suffisant :o) Lorsque vous avez une scène composée de nombreux fichiers et qu'il devient fastidieux de tous les convertir individuellement vous pouvez utiliser les commandes ci-dessous si vous avez la possibilité d'utiliser des commandes Unix (Linux, Mac Os X) : Pour convertir du vrml en packed-vrml placez vous dans le bon répertoire et faites : $ gzip -9 *.wrlpuis $ rename .wrl.gz .wrz *.wrl.gz Pour convertir du packed-vrml en vrml placez-vous dans le bon répertoire et faites : $ rename .wrz .wrl.gz *.wrzpuis $ gzip -d *.gz | ||
| Bon courage pour vos créations ;-) | ||
| Retour Accueil |
| Et voici la fin de ce petit cours de VRML, il n'y a que les bases pour l'instant, mais cela devrait vous permettre de faire vos premiers pas en VRML... Surtout qu'il n'est pas dur de progresser car il suffit de chercher des scènes existantes sur le réseau et d'afficher le code source (ou après décompression s'il est compressé)... |
|
20 internaute(s) sur Web3d-fr
|
Copyright Web3d-fr 2001-2004
|
| Création de mondes VRML/X3D | |
| Autres technos Web3d | |
| Outils et logiciels | |
| 3D multi-utilisateurs | |
| Articles et informations | |
| Ressources gratuites | |
| Autres sites et portails 3D | |
| Trouver un emploi | |
|
| |