LE STANDARD VRML + EXTENSIONS

Ce format a été à l'initiative de plusieurs industriels dont SGI.
Puis il est devenu standardisé et ouvert. Il y a eu jusqu'à ce jour 2 versions du standard, mais aussi différents projets d'extensions à VRML (dont l'EAI ).

Historique de VRML

VRML est réellement né à Genève au printemps 1994, à l'occasion de la première conférence mondiale sur le World Wide Web. Il est le produit d'un groupe de réflexion dirigé par Berners-Lee. Le projet a vraiment été lancé quelques mois auparavant par Mark Pesce et Toni Parisi. Ceux-ci avaient en effet déjà développé un "prototype" (Labyrinth) , puis décidèrent de prendre contact avec Berners-Lee afin de valoriser leurs travaux.
Le but est de développer les spécifications de VRML, qui sera un langage indépendant des plates-formes en liaison avec le World Wide Web, destiné à décrire les scènes 3D, et utilisable dans les browsers (visualiseurs), les logiciels de création et autres outils, autorisant ainsi la réalité virtuelle sur le Web.
Devant le potentiel succès de VRML, Mark Pesce se chargea d'organiser ce développement collectif, afin de concrétiser le projet dans les plus courts délais.
Enfin en 1995, la norme VRML 1.0 voit le jour, ainsi les développeurs ont put commencer à créer des mondes 3D statiques.
Trés vite le besoin de dynamisme s'est fait sentir, certains plugin ont géré des noeuds d'animation. Mais deux ans aprés en 1997, la deuxieme version majeure (la compatibilité déscendante n'est plus assurée) de VRML apparait sous le nom de VRML97 ou VRML2. Parmis les nombreuses amélioration on citera :

Esprit de VRML

VRML est avant tout un langage de description et non un programme, (VRML est à la scène 3D ce que HTML est au document texte)

Qui dit format dit interpréteur, en effet le script VRML doit être parsé pour afficher une scène 3D (une vue 2D de la scène) il faut donc un Navigateur VRML.

Dans un soucis d'uniformisation les navigateurs VRML sont intégrés dans les navigateurs Web sous forme de Plug'ins : Programmes externes ayant l'interface dans un programme hôte.

La description géométrique de la scène est stockée sous forme de structure arborescente (graphe acyclique direct).
Propagation des propriétés (i.e. : Une translation d'un groupe Table entraîne la propagation des 4 pieds)

VRML97 a quelques primitives intéressantes permettant de gérer les animations et gestion d'événements utilisateur / comportement des objets a l'aide de scripts.

Mais ce format et les plug'ins ont des limitations :
Par exemple , on ne peut avoir une session de communication entre un client et un serveur.

Exemple de source VRML

#VRML V2.0 utf8

DEF Camera Viewpoint {   
   orientation 0 1 0 1
   position   5 0 2
}

DEF _TR Transform {
   translation 0 10 0
   rotation 1 0 1 .6
   children  Shape {
       geometry Box { }
       appearance Appearance {
	  texture ImageTexture {  
            url  "http://www.jwz.org/webcollage/collage.jpg" 
          }
       }
    }
}

Extensions de VRML

DIS-Java-VRML Working Group
IEEE DIS : Distributed Interactive Simulation
Infrastructure pour Réalité virtuelle distribuée
But du projet : Implantation du protocole DIS en Java & VRML
Web3D Consorsium / Distribution GPL
X3D
Unification de VRML & XML : http://www.web3d.org/TaskGroups/x3d/index.html
EAI : External Authoring Interface
Dialogue entre le browser vrml et un programe externe

EAI : External Authoring Interface

L'interface permet le controle du plugin VRML, à l'aide d'un langage externe à VRML, soit en java (applet) ou un simple script (javascript).

Ce contrôle permet entre autre :

Dans un premier temps, il faut accéder à l'objet Browser. Ensuite on crée un évement. Et par cet évenement on modifie les primitives et propriétés.

Source Java : Exemple EAI

import vrml.external.*;
import vrml.external.field.*;

/**
 * Exemple d'acces a un noeud VRML par l'EAI
 **/
// Reference le navigateur VRML
Browser _browser = (Browser) Browser.getBrowser(this);
// Reference le noeud Vrml nomé par la directive  vrml DEF/USE
Node n = (Node) _browser.getNode("_anynodename");

// Evenement 
EventInSFVec3f _v3f_trans = null;
_v3f_trans=(EventInSFVec3f) n.getEventIn("set_translation");

float[] v3f_values = {0f , 0f , 0f } ;

// affecte la composante "translation" du noeud vrml "Transform"
for (i=0;i<9;i++) {
  v3f_values[0]=i; 
  _v3f_trans.setValue(v3f_values);
}

RESSOURCES VRML

Specs
Repository : http://www.web3d.org/vrml/vrml.htm
Faq (comp.lang.vrml) : http://home.hiwaay.net/~crispen/vrmlworks/faq/index.html
EAI : External Authoring Interface
Specs : http://www.vrml.org/WorkingGroups/vrml-eai/ExternalInterface.html
Faq : http://www.frontiernet.net/~imaging/eaifaq.html
Exemples : http://tecfa.unige.ch/guides/vrml/examples/eai/navigate/navigate-dyn.html
http://www.cai.com/cosmo/html/faq.htm#java
http://eureka.lucia.it/vrml/tutorial/eai/sgi/index.html
Browsers VRML :
Blaxxun Contact (Win32) : http://www.blaxxun.com
Cosmoplayer (obsolete, Win32, Irix) : http://www.cosmosoftware.com , http://www.sgi.com/software/cosmo/player.html
VRWare (Unix : SGI, Sun Solaris, DecAlpha, HPUX, Linux/ELF ) http://www.iicm.edu/vrwave
WorldView - Intervista (obsolete, ie, win32) : http://www.platinium.com
Cortona - ParallelGraphics : (Win32) http://www.parallelgraphics.com/products/cortona
Live3D - Netscape (obsolete) : http://home.netscape.com/eng/live3d/live3d_overview.html
FreeWRL (Linux) : http://www.crc.ca/FreeWRL/
libVRML97 (Linux, EAI non fiable)
Dimension X - Liquid Réality (obsolete, ie)
Editeurs VRML
Cosmoworld - SGI
3DS Max - Kinetix : http://www.ktx.com/
Internet 3D Space Builder - Paragraph http://www.paragraph.com/
VRealm Builder - IDS http://www.ids-net.com/
Webgraphics Suite - Corel http://www.corel.com/
3D Website builder - Virtus http://www.virtus.com/