|
Le VRML (Virtual Reality Modeling Language) a été crée en 1993 par Mark Pesce et Tony Parisi, à une époque où la 3e
dimension était peu répandue sur les machines. Ce langage permettait de développer des applications de réalité virtuelle assez rapidement et d’intégrer des éléments Web. Etant assez vieux, il est peu fréquent de trouver des sites qui l’utilisent encore, et peu de nouveau plugins permettent de profiter de l’Internet en 3D, comme le Java3D.
Nous avons choisi le VRML2 (ou VRML97) pour son aspect proche de la programmation HTML (intégration d’applets Java, liens, nœuds…), et sa facilité de
conception via 3D Studio Max. Pour pouvoir lire les résultats, il faut installer un plugin spécifique car il n’est pas lisible d’origine. Pour notre projet nous avons choisi Blaxxun Contact, pour son interface intuitive
et sa console utile pour le déboguage. C’est aussi le plus récent parmi ceux essayés ce qui permet de mieux tirer profit des technologies actuelles. Le langage se décompose en nœuds (nodes) qui définissent aussi bien
des objets que des capteurs et scripts. Il peut gérer des variables avec son propre format, il est suffisamment rapide pour gérer des algorithmes complexes grâce aux classes java (NB : Blaxxun n’exécute pas les
classes externes au WRL – l’extension du VRML). C’est aussi un format modulaire qui permet de mettre a jour les environnements sans chercher dans un fichier extrêmement grand (car une simple forme un peu lissée peut
prendre une centaine de lignes…) Cependant il a quelques limitations et failles qui nous ont gênées. D’abord en ce qui concerne la modélisation, il ne nous a pas été possible d’appliquer des textures sur chaque face,
ce qui imposait de doubler les murs et plafonds pour changer de texture. Ensuite le rendu est parfois aléatoire (voir l’escalier de l’entrée) et des chevauchements apparaissent à longue distance. Et enfin le plus
gênant est la déformation due au champ de la caméra, ce qui rend les salles souvent visiblement petites, et les portes trop petites, et ce malgré les bonnes dimensions. D’autre part, il était impossible de récupérer
directement la position de l’utilisateur, et seul une astuce dénichée au fond du Web nous a permise de contourner ce problème. Dans notre projet nous utilisons le java, mais il faut savoir que le VRML possède aussi
son langage de programmation, le vrmlscript. Celui étant plus simple mais moins rapide, nous avons préféré utiliser le java, qui est assez proche du C++ étudié cette année. Nous aborderons plus en détail ce point dans
la partie suivante. Quelques rappels sur le VRML
qui vous permettront de mieux comprendre le fichier
virtualensi.wrl commenté qui est la base du projet.
- Une balise est de la forme :
OBJET {
param1 valeur1
param2 valeur2
....
}
On définit une
parenté à l'aide de :
Children [
OBJET1 {....}
OBJET2 {....}
]
Notez la présence
systématique des {} et [], car comme en C il faut
délimiter tout bloc, mais par contre il n'y a pas de
marque de fin de ligne (la visionneuse gère toute
seule)
# Ceci est un
commentaire
Le mot-clé
DEF permet de
désigner un objet par un nom, ce qui permet de le
réutiliser plus tard avec
USE.
Les types de
variables utilisés ici sont (SF désigne une variable
et MF désigne un tableau):
SFInt32/MFInt32
Entier
SFFloat/MFFloat
Flottant
SFNode/MFNode
Objet
SFTime/MFTime
Unité de temps
SFRotation/MFRotation Coordonnées de
rotation
SFVect3f/MFVect3f
Vecteur 3D
Ils peuvent être
déclarés comme
field (variable
globale),
eventIn (variable
d'entrée, cf
ROUTE),
eventOut
(variable de sortie, cf
ROUTE)
et dynamiquement (avec
new,
dans un script java)
La balise inline
permet d'inclure des scènes, ce qui est pratique
lorsqu'on a un modèle qui est souvent modifié, cela
permet de ne modifier que lui (en l'occurrence il
s'agit de l'école)
La balise ROUTE est
très importante pour transférer des variables et
traiter des événements. La syntaxe est la suivante :
ROUTE OBJET1.var1 TO OBJET2.var2
var1 doit être
déclarée en eventOut et var2 en eventIn. Notons que
var1 et var2 doivent être du même type, sinon il faut
utiliser un script de conversion.
Pour plus de détails,
voir à la page Visiter
|