Cette page présente les différents outils de navigation réalisés (ou plutôt adaptés) dans le cadre de mon mémoire de diplôme STAF à Tecfa.
Dans cette page d'exemple, j'ai utilisé comme scène de base une de celles fournie avec la version d'évaluation du logiciel CosmoWorld. Cette scène s'appelle "city".
Lévénement qui rentre dans le script (eventIn) est la position actuelle récupérée grâce au ProximitySensor. Les 3 événements sortant (eventOut) sont les chaînes de textes des 3 axes (x, y et z).Lévénement qui rentre dans le script (eventIn) est la position actuelle récupérée grâce au ProximitySensor. Les 3 événements sortant (eventOut) sont les chaînes de textes des 3 axes (x, y et z).
Les exemples suivants n'utilisent pas les possibilités du navigateurs vrml mais disposent d'outils de navigation intégrés dans la scène.
Le fait de savoir où l'on se trouve dans une scène VRML est important pour la navigation, mais ça l'est encore plus lors de la phase de programmation.
Deux versions sont proposées, la première première affiche uniquement les coordonnées polaires de l'utilisateur (X, Y et Z).
La deuxième, propose en plus l'orientation de l'utililisateur et "crache" ces informations dans la console sous la forme d'un viewpoint qu'il est facile ensuite de copier-coller dans la scène.
Pour diminuer l'impression que peut avoir un utilisateur d'être perdu dans le mondes en trois dimensions, on peut imaginer que la présence d'une boussole est apréciable. Cet exemple est repris intégralement des travaux de David Ott pour le Campus Virtuel de Tecfa.
Comme dans lexemple précédent, nous avons besoin de la position actuelle enregistrée par le ProximitySensor (PS). De plus, et toujours par le PS, nous obtenons lorientation actuelle. Ce qui sorts du script (les deux eventOut) sont respectivement les orientations des deux éléments qui composent la boussole, la tige et la pointe.
Un fil d'Ariadne vous suit et vous indique les endroits déjà parcourus en laissant traîner un fil rouge derrière votre passage. Cet exemple est aussi issu des travaux de David Ott pour Tecfa.
De part lutilisation des prototypes et autres stratégies de réduction de la taille des fichiers vrml, certaines parties dune scène sont souvent reproduites (par exemple, les immeubles ou les arbres sont souvent réutilisés à plusieurs endroits). La navigation souffre de cette uniformité, cela rend plus difficile la mémorisation puisque chaque élément nest pas unique, mais susceptible dêtre reproduits x fois. Une manière de limiter la confusion que peut entraîner ces répétions, est lutilisation dun fil dAriadne. Un fil d'Ariadne indique les endroits déjà parcourus en dessinant une ligne derrière le passage de lutilisateur. Sa fonction se rapproche donc de la couleur violette utilisée de manière conventionnelle dans les navigateurs web pour signifier quune page a déjà été visitée.
Le plus facile pour cummuler les avantages des coordonnées polaires et de la boussole, la carte dynamique (un pointeur indique sur la carte à la fois la position et l'orientation du point de vue de la caméra) semble le plus efficace. Cette version présente dans un HUD une représentation 2D de la scène avec un pointeur qui indique la position actuelle de l'utilisateur.
Le script principal de cet exemple sattache à animer le pointeur de la carte de manière à reproduire les déplacements et les changements dorientation du point de vue de lutilisateur. De plus, il renvoie sous forme de string les valeur de X et dY (comme le fait déjà lexemple des coordonnées polaires).
Cet version ressemble beaucoup au précédent, mais cette fois la carte est constituée de la scène visitée, réduite et à laquelle on fait subir une rotation. Pour permettre une localisation de lutilisateur sur la carte miniature, on cummule cette représentation 3D avec un fil dAriadne décris plus haut.
La mécanique de cet exemple se révèle beaucoup plus simple malgré son aspect plus sophistiqué. Elle consiste regrouper la scène et son fil dAriadne dans un objet que lon projette, en réduisant sa taille, dans le Hud.
Un petit exemple de TouchPad permettant de se déplacer de manière originale dans la scène.
Cet exemple propose une balle d'aide qui, dès quelle se trouve dans le champs de vision de lutilisateur, se rapproche de lui en rebondissant. Lintérêt, sous langle de la navigation, est par exemple de permettre à lutlilisateur de cliquer sur cette balle daide pour retrouver le viewpoint dorigine de la scène. Il suffit pour cela de rajouter un lien sur la balle (une ancre).
Un VisibilitySensor détecte lorsque lutilisateur regarde la balle et active un TimeSensor Ce TimeSensor conduit le PositionInterpolator qui crée les rebonds de la balle en la bougeant sur laxe des Z. Ce script modifie la sortie de cet interpolateur avant son envoi au Transform qui entoure la balle daide. Il détecte la position de lutilisateur par un grand ProximitySensor et utilise cette information pour changer les valeurs de X et de Y de la position envoyée depuis le PositionInterpolator. Les positions en X et Y de la balle sont changées presque à chaque frame de manière à bouger la balle devant lutilisateur. La position modifiée est ensuite envoyée au Transform, qui bouge la balle.
Encore une scène, cette fois-ci vous êtes à bord d'un véhicule. Vous ne voyez que le cockpit du véhicule, vous pouvez tourner le volant et jouer de l'acélérateur en déplaçant le carré sur la droite.
Le plus instable de ces exemples... Permet de lier un lien hypertexte vers un viewpoints. Le changement de viewpoint est extrêmement lent (environ 10 à 15 secondes...). Cet exemple utilise une fonction "javascript" pour envoyer les informations à l'applet Java. Il semble que ce soit cette interaction entre javascript et java qui soit à l'origine de cette lenteur.
Une scène qui permet de sélectionner les viewpoints par un applet java en dehors de la scène VRML. Le déplacement est très rapide, mais l'on perd le côté "fun" des transitions entre les viewpoints.
Applet java qui reproduit les flèches du clavier et permet le déplacement dans la scène.
* Ne fonctionne qu'aléatoirement avec MSIE, je vous conseille d'utiliser Netscape (mais pas la version 6 !!!). Evitez de cliquez sur les contrôles Java avant que la scène soit complétement chargée.