VRML97 sous Java-OpenGL – Jean-Marie ABISROR – Mémoire CNAM juin 2002
Résumé : C’est en mai 1995 que la première version officielle du VRML fut définie, celle-ci ne permettait que la description
de scènes immuables, sans possibilité d’animation. VRML 1.0 dérivait du langage graphique Open Inventor de Silicon
Graphics permettant de réaliser des descriptions complètes de scènes 3D incluant la géométrie, les éclairages, les textures.
Durant le SIGGRAPH 96 qui se déroulait à la Nouvelle Orleans, le VRML Architecture Group (V.A.G.) présenta les
spécifications officielles de VRML 2.0 et créa le VRML Consortium (VRMLC). L’élaboration formelle de VRML 2.0 pour
devenir un standard international avait débuté en juin 1996 avec les spécifications préliminaires du Consortium pour le
VRML 2.0.
La nouvelle version de VRML devait permettre des interactions avec des documents HTML, des scripts Java et inclure des
comportements permettant des animations d’objets. En avril 1997, ces nouvelles spécifications furent l’objet d’une
soumission à l’ISO sous le nom de VRML97. C’est finalement en décembre 97 que VRML97 fut approuvé par l’ISO.
Alors que HTML est un langage permettant de représenter des documents hypertextes en 2D, VRML permet de modéliser
ces informations en 3D. En VRML, une scène 3D est constituée par un ensemble d’objets appelés nœuds ayant comme
particularité de respecter une hiérarchie dont l’abstraction est un graphe sans cycle, encore appelé graphe de scène. VRML
n’est pas un langage de programmation mais un langage descriptif : l’implémentation des différents nœuds n’est pas à la
charge de l’utilisateur mais d’un navigateur spécifique.
Le rendu de la scène est assuré ici par OpenGL, une bibliothèque graphique très évoluée et totalement portable offrant de
nombreuses ressources aux programmeurs qui souhaitent élaborer un moteur 3D. Elle reçoit des ordres de tracé de primitives
graphiques (facettes,etc.) directement en 3D, une position de caméra, des lumières, etc. Ensuite, OpenGL prend en charge les
changements de repère, la projection en perspective à l’écran, l’élimination des parties cachées, l’interpolation des couleurs,
le tracé ligne à ligne des faces pour en faire des pixels. OpenGL est conçue comme une interface rationnelle, indépendante du
matériel, qu’il est possible d’implémenter sur de nombreuses plate-formes matérielles différentes. OpenGL ne propose pas de
commandes de haut niveau permettant de décrire des modèles d’objets tridimensionnels. Il faut construire le modèle à partir
d’un jeu restreint de formes géométriques primitives : des points, des lignes et des polygones.
L’objet de ce mémoire a été, à partir d’un logiciel capable de gérer la hiérarchie des nœuds VRML 2.0 en java, appelé
CyberVRML97, et d’un logiciel permettant l’utilisation des fonctions OpenGL en Java au travers de bindings Java-OpenGL,
appelé GL4Java, d’écrire une interface Java (non exhaustive) entre VRML et OpenGL, permettant d’obtenir un navigateur
VRML écrit entièrement en Java. Pour réaliser cela, il a fallu traduire la sémantique des nœuds VRML en utilisant des
fonctions OpenGL adéquates. Par exemple, une boite 3D décrite par un nœud VRML Box très simple traduit dans sa
sémantique la présence des six faces d’un cube. Dans la syntaxe d’OpenGL, il conviendra dans ce cas précis de décrire ces
six faces à l’aide de polygones et de préciser l’orientation de la lumière pour que toutes les faces de la figure soient
potentiellement visibles. Un module d’animation capable de prendre en charge les scènes animées a été développé. Une
animation pouvant être déclenchée par un clic de souris, il a été nécessaire d’implanter les objets de type Sensor de VRML97,
sortes de capteurs, en utilisant le mécanisme de sélection d’OpenGL, qui permet de contrôler la sélection d’un objet 3D à
l’aide du pointeur de la souris.
Mots-clés : VRML, OpenGL, Graphe de scène, Navigation 3D, Animation 3D
KeyWords : VRML, OpenGL, scene graph, 3D browsing, 3D animation