VRMLworks

réponses de la FAQ comp.lang.vrml
5. Techniques

  1. Comment faire pour imbriquer un monde VRML dans un cadre (frame) ou une page web?

    Il y a deux façons d'intégrer texte et graphiques 2D et un monde VRML 3D sur la même page web: mettre le monde dans un cadre (frame) ou l'imbriquer dans la page web.

    Dans le premier cas, vous utilisez l'étiquette <FRAME> à l'intérieur de l'étiquette de contenant <FRAMESET>. Vous trouverez de la documentation au HTML Compendium (entre autres endroits) pour la grammaire et les options des étiquettes <FRAME> et <FRAMESET>.

    Exemple: <FRAME SRC="my.wrl" NAME="vrmlframe">

    Dans le second cas vous utiliserez l'étiquette <EMBED>.

    Exemple: <EMBED SRC="my.wrl" WIDTH="500" HEIGHT="280">

    Dans HTML 4.0, il est préférable d'utiliser l'étiquette <OBJECT>. Voici en exemple de Braden McDaniel qui fonctionne dans MSIE 4.0 mais pas dans Netscape Navigator ou Communicator:

    <OBJECT DATA="foo.wrl" TYPE="model/vrml" WIDTH="320"
       HEIGHT="240" STYLE="width: 100%; height: 100%">
    <PARAM NAME="SRC" VALUE="foo.wrl">
    Le contenu au choix se place ici.
    </OBJECT>

    Braden nous dit que vous pouvez utiliser des valeurs en pourcentage pour les paramètres "width" et "height", ce qui n'est pas conforme à HTML, mais qui sera accepté autant par Netscape Communicator que par Microsoft Internet Explorer 4.0.

  2. Comment faire pour ouvrir une nouvelle fenêtre pour mon monde VRML?

    Avec un script JavaScript:

    <SCRIPT LANGUAGE="JavaScript">
    <!-- Vous savez pourquoi
    function newWindow(width, height, world) {
      window.open(world,'vrmlWindow','width='+width+',height='+height);
    }
    // -->
    </SCRIPT>

    Et plus loin dans la page:

    Cliquez <A TARGET="_self" HREF="javascript:newWindow(300,200,'foo.wrl')">ici</A>

    Notez que le champ "TARGET=" n'est pas nécessaire à moins que vous n'ayez un autre TARGET dans votre contenant HEAD.

    David Frerichs de Cosmo Software dit que vous devriez toujours contrôler les dimensions de la nouvelle fenêtre, soit de cette façon ou en l'imbriquant dans un cadre de grandeur pré-déterminée, afin que vous puissiez mieux contrôler la vitesse et la résolution de la restitution de votre monde. J'ai suivi son avis dans cette FAQ.

  3. Comment faire pour que lorsqu'un usager clique sur un objet, ça démarre une page web ou un autre monde VRML dans une nouvelle fenêtre ou cadre de façon à ce qu'il n'ait pas à recharger constamment le monde VRML d'origine?

    Dans les spécifications pour le nœud Anchor VRML 2.0, il y a un champ "parameter". Vous l'utilisez comme ceci:

      Anchor {
        url "http://home.hiwaay.net/~crispen/vrmlworks/faq/"
        description "Cliquez ici pour la FAQ VRML"
        parameter "target=newpage"
        children [
          Wally
          The_Beaver
        ]
      }
    

    Si vous avez un cadre qui se nomme "newpage", alors la référence de Anchor (dans cet exemple, cette FAQ) apparaîtra dans ce cadre. Si vous n'en avez pas, alors Netscape et Internet Explorer ouvriront une nouvelle fenêtre de navigation intitulée "newpage". Ça veut dire que si vous avez plusieurs Anchors pointant tous à "newpage", vous ouvrirez seulement une nouvelle fenêtre sur l'écran du visiteur au lieu de submerger son bureau de nouvelles fenêtres.

    Il n'y a rien de spécial à propos du nom "newpage". Ce n'est pas un nom réservé de cible dans HTML. Je l'ai choisi parce qu'il est improbable qu'un cadre l'utilise. Si vous utilisez le nom d'un cadre existant déjà sur votre page, le navigateur VRML acceptant cette fonction enverra le code dans le cadre que vous avez nommé. C'est très utile pour les pages web ayant un contenu VRML et textuel permettant de changer le texte en cliquant sur un objet du monde VRML.

    Notez que les navigateurs VRML ne sont pas requis par les spécifications de supporter "target=" dans le champ parameter , mais puisque on le retrouve en exemple dans les spécifications, et puisque c'est si pratique, je ne connais aucun navigateur VRML qui ne l’accepte pas.

  4. Est-ce que je peux me débarrasser du panneau de contrôle du navigateur VRML?

    Il y a une façon qui est absolument indépendante du navigateur VRML utilisée pour la visite de votre monde:

    NavigationInfo {
      type [ "NONE" ]
      ...
    }

    Et dans ce cas, vous aurez à pourvoir certains objets VRML (voir la réponse à une autre question) que le visiteur pourra utiliser pour la navigation du monde.

    Cosmo Software et Intervista supportent les paramètres suivant dans l'étiquette EMBED:

    WorldView:

        <EMBED SRC="my.wrl" WIDTH="500" HEIGHT="280" VRML_DASHBOARD="FALSE">

    Cosmo Player:

        <EMBED SRC="my.wrl" WIDTH="500" HEIGHT="280" VRML-DASHBOARD="FALSE">

    Murat Aktihanoglu nous apprend que si vous utilisez l'étiquette <OBJECT> comme dans cette réponse précédente, l'ajout de

    <PARAM NAME="VRML-DASHBOARD" VALUE="FALSE">

    fonctionnera. Notez que l'utilisation de paramètres qui sont propres à certains navigateurs est généralement une mauvaise idée à moins que vous ne puissiez garantir que seulement les usagers utilisant ces navigateurs visiteront votre monde VRML. Vous bénéficiez de pouvoir contrôler la navigation de l'usager sans qu'il voit le panneau de contrôle, mais vous perdez aussi l'universalité et en plus de vous aliéner les visiteurs qui auraient malencontreusement le "mauvais" navigateur.

  5. Comment faire un substitut au panneau de contrôle VRML qui restera toujours devant le visiteur?

    Ce qu'on appelle en anglais "head-up display" ou HUD (librement traduit par "visualisation à tête levée") peut contenir des contrôles, la visualisation, ou les deux.

    Voici deux exemples que vous pouvez télécharger: un simple HUD par Chris Fouts [téléchargement] et un HUD légèrement plus élaboré par Flounder [téléchargement]. Celui de Chris est rigoureusement commenté et j'ai modifié l'exemple de Flounder, qui à l'origine, montrait des chiffres arrondis, parce que différents navigateurs VRML vont générer des chaînes de caractères de façon différentes dans JavaScript, ce qui rend difficile de prévoir le résultat de l'arrondissement des valeurs sur les différentes plateformes. La réponse à une autre question montre quelques contrôles dans un HUD.

  6. Je n'arrive pas à faire fonctionner [createVrmlFromURL/createVrmlFromString]

    Si vous utilisez Java, le meilleur tutoriel est celui de Justin Couch ici même à VRMLworks. Si vous utilisez ECMAScript, voyez cet exemple [téléchargement] qui utilise createVrmlFromString() -- cliquez sur le cube pour ajouter les enfants (children) ou encore cet exemple [téléchargement], qui utilise createVrmlFromURL() -- approchez le cube jaune et il se changera en une sphère rouge.

  7. Comment faire pour lier (bind) un Viewpoint à la navigation?

    Même s'il est possible de ROUTEr l'eventOut isActive d'un senseur à l'eventIn set_bind d'un Viewpoint comme on le fait dans cet exemple [téléchargement VRML et texture] (approchez le disque et on vous transportera pour une ballade autour du visage sacré de "Bob"*), éloignez-vous du disque toujours en mouvement et vous verrez pourquoi c'est une mauvaise idée. Vous serez désorienté par le saut qui se produira en dehors du disque (si le navigateur vous laisse faire). Dans d'autres applications, si le visiteur s'aventure trop loin du senseur qui déclenche la liaison du viewpoint, il pourrait se retrouver à la position du viewpoint d'origine. Il est de loin préférable de ROUTEr l'eventOut isActive d'un senseur en passant par une diode qu'on établit au moyen d'un Script. Il y a un exemple d'un tel Script de diode dans la réponse à une autre question.

    Ça s'appelle une diode parce que ça ne laisse passer que des valeurs TRUE. En mettant une diode entre le senseur et le viewpoint, vous maintenez le viewpoint lié à la navigation même lorsque le visiteur sort du champ d'action du senseur, et il ne réapparaitra donc pas à un autre endroit de la scène de façon impromptue.

    *Note du traducteur : Il s’agit du visage de J. R. "Bob" Dobbs - qui est Bob Doobs? - et non celui de Bob Crispen

  8. Comment puis-je transporter mes visiteurs dans une ballade en [auto/ballon/véhicule spatial/ascenseur]?

    La réponse à la précédente question est un exemple de la prise en charge du visiteur pour une ballade. Le canard [téléchargement (tar.gz)] du site web de l'évènement VRML 98 contient une ballade encore plus élaborée (attendez que tout soit bien chargé, cliquez ensuite sur le canard pour démarrer la ballade). En résumé, vous liez le point de vue à un viewpoint qui est l'enfant d'un objet que vous animez. Notez qu'après que le canard arrive au château, un ProximitySensor autour du château lie le viewpoint (au moyen d'une diode) pour que le canard puisse s'en aller en laissant le visiteur sur place sans que celui-ci soit catapulté de nouveau à son point de départ au dessus de la montagne.

  9. Comment puis-je optimiser mon monde VRML afin de le rendre plus rapide?

    Il y a une page à VRMLworks traitant de cette question en détail et qui pointe à d'excellents tutoriaux et articles. De combien plus rapide sera-t-il assez rapide? Voici ce que Rikk Carey en disait il n'y a pas si longtemps sur www-vrml:

    Images par seconde Effet

    20-60

    Illusion parfaite, expérience 3D entière, clarté comme dans un rêve

    12-20

    Illusion 3D raisonnable, correcte

    8-12

    Interface 3D opérationnel, frustration inconsciente, navigation houleuse, acceptable pour des outils de design

    1-8

    Interface 3D inutilisable, mauvaise navigation, frustration consciente, envisagez l'utilisation de techniques d'interactions différentes (tel Myst)

  10. Je veux que les visiteurs de mon site voient une bannière VRML, mais s'ils n'ont pas de navigateur VRML, je veux qu'ils voient un GIF animé. Comment faire?

    Ligos a un détecteur VRML gratuit qui détectera un navigateur VRML dans Netscape Navigator/Communicator et Microsoft Internet Explorer et qui montrera le contenu approprié selon le cas. John Fairley de Platinum Technology avec l'aide de quelques membres de www-vrml a écrit un autre détecteur VRML.

  11. Comment puis-je contrôler un Viewpoint pour qu'il suive un objet se déplaçant dans le monde?

    Tom Kaye du bureau SGI de Huntsville a développé un PROTO de caméra traceuse.

  12. Comment puis-je faire communiquer des mondes VRML entre eux au moyen de "sockets"?

    David McLure a écrit un article à ce sujet qui inclut un exemple d'implémentation. Le groupe de travail DIS-Java-VRML a mis au point quelques applications Java qui communiquent via des "sockets" et résolvent certains problèmes introduits par la sécurité du langage Java.

  13. Est-il possible de "transmuter" (morph) des formes dans VRML?

    Oui, avec un CoordinateInterpolator. Voici un exemple de dauphin [téléchargement] dans lequel chacun des points est transmuté. J'ai transformé le célèbre dauphin [téléchargement] du site Avalon Repository en un dauphin transmutable.

  14. Quelle est la formule magique pour trouver les nombres du champ "orientation" d'un Viewpoint de façon à faire pointer la caméra où je veux?

    Voici deux réponses. La première s'adresse aux gens voulant comprendre ces "nombres magiques". Les trois premiers nombres du champ "orientation" représentent un vecteur décrivant de quel côté se trouve "en haut". Mais attendez une minute; trois nombres décrivent un point; comment peuvent-ils décrire un vecteur? C'est simple. L'autre point du vecteur est l'origine (0,0,0). Le vecteur est sensé être un vecteur unitaire, mais je ne connais aucun navigateur VRML qui se plaindra si la longueur du vecteur n'est pas 1. Le quatrième nombre est la rotation autour de ce vecteur, utilisant la règle de la main droite (pointez votre pouce droit le long de la ligne partant du point d'origine au point décrit par les trois premiers nombres, la direction dans laquelle vos doigts se courbent est l'angle positif).

    La seconde réponse s'adresse aux gens qui ne se souviennent plus de leur mathématique collégiale. Au lieu d'essayer de comprendre ce que les nombres signifient, utilisez orient (code source C et exécutable Win95) de Stephen Chenney.

    Certains modélisateurs d'objets et de scènes vous laisseront manipuler la caméra à un endroit de la scène, orienter le point de vue, pour ensuite saisir le résultat en tant que noeud Viewpoint VRML.

  15. Comment utiliser addChildren et removeChildren pour qu'ils fonctionnent?

    Voici deux exemples: l'un utilisant addChildren [téléchargement] et l'autre utilisant removeChildren [téléchargement]. Dans les deux exemples, cliquez sur le cube jaune.

  16. Comment mettre une texture d'un seul côté d'une boîte?

    C'est plus facile à démontrer qu'à expliquer. Voici un exemple [téléchargement].

  17. Comment faire disparaître les objets lorsque l'on clique sur eux?

    La façon la plus simple et probablement la meilleure est d'utiliser le nœud Switch avec un Script. Dans cet exemple [téléchargement], click un clic sur le cube jaune le fera disparaître. Vous pouvez aussi:

    mais toutes ces méthodes induisent une surcharge inutile sur le navigateur, puisqu'il doit encore faire tous ses calculs pour la restitution de l'objet (ou tout au moins pour déterminer s'il est visible). Vous pouvez aussi utiliser removeChildren, mais il s'agit d'un moyen démesuré dans ce cas-ci, spécialement si jamais il vous prend l'envie de faire réapparaître l'objet. Finalement, le nœud LOD est aussi une sorte de senseur, et vous pouvez faire disparaître l'objet quand vous l'approchez en ayant un nœud Group vide dans le champ "range" de ce nœud LOD.

    En modifiant légèrement le code du script de notre exemple on pourra faire apparaître un objet ou encore on pourra le faire disparaître alors qu'un autre apparaît.

  18. Est-ce qu'il y a une façon de connaître la position d'un usager en temps réel?

    Le deuxième exemple d'une réponse précédente montre la position de l'usager. Notez que l'orientation de l'usager est aussi disponible à partir du nœud ProximitySensor et peut être montrée de la même façon.

  19. Lorsque j'attribue la valeur TRUE au champ "solid" d'un objet, je ne vois qu'un seul côté de l'objet. Il n'est pas solide du tout!

    Ouais. Moi aussi j'en ai été dérouté au début. Le champ "solid" permet au navigateur de savoir si un objet est solide et dans ce cas il n'a qu'à en restituer une seule face. C'est la valeur par défaut. À moins que vous n'ayez des objets sans épaisseur et que vous ayez besoin d'en montrer les deux côté, laissez le tel quel.

  20. Peut-on utiliser des mondes VRML dans une application C++ ou Java?

    Open Worlds est une librairie C++ vous permettant de développer des applications autonomes visualisant et manipulant des mondes VRML. [Je serais heureux de mentionner les noms d'autres compagnies produisant des librairies similaires.] Quelques navigateurs VRML, dont Cosmo Player 2.1, WorldView 2.1, et Blaxxun CCPro 3.x, peuvent utiliser COM de Microsoft pour l'interface entre le navigateur VRML et les applications.

    Justin Couch a produit un ensemble de classes appelé JVerge qui réplique les nœuds VRML 97 dans des classes Java individuelles.

    Intervista a un progiciel WorldView for Developers permettant le développement d'applications en C++, Visual Basic, Java, et Macromedia Director Xtras et qui utilise WorldView en tant qu'application VRML imbriquée.

    Open Inventor de Silicon Graphics peut utiliser ses propres nœuds, les nœuds VRML 1, et (ceci est relativement récent) les nœuds VRML 97.

  21. Comment écrire des Scripts en [Visual Basic/Ada/COBOL]?

    Premièrement, pensez à la sécurité. Vous demandez aux visiteurs de votre monde d'exécuter une application sur leur machine alors qu'ils ne vous connaissent ni d'Eve ni d'Adam. Vous devez donner aux visiteurs l'assurance que votre Script ne reformatera pas leurs disques ou n'effacera pas complètement leur collection de photos cochonnes. La façon la plus sûre de s'en assurer avec Netscape Navigator est d'utiliser Java, qui s'exécute dans le "terrain de jeux" de sécurité de Netscape. Pas besoin de coder en Java. Il y a une liste à développer.com de [compilateurs croisés [x]-à-Java et, oui, Ada, Visual Basic et même COBOL sont sur cette liste.

  22. Comment puis-je laisser le visiteur déplacer des objets dans le monde?

    En attachant des senseurs aux objets. Il y a quatre sortes de senseurs que vous pouvez utiliser pour la manipulation d'objets: TouchSensor, PlaneSensor, CylinderSensor, et SphereSensor. Nous avons utilisé un TouchSensor dans l'exemple de la réponse à une question précédente. Cet exemple [téléchargement VRML et texture] utilise un PlaneSensor pour contrôler la vitesse avant et arrière, un CylinderSensor pour le volant, et un SphereSensor pour manipuler un des objets. Il se base sur le HUD de Chris Fouts de la réponse à une question précédente. Vladimir Bulatov nous a fourni la solution à un grave problème de la version originale et a aussi suggéré une manière de lui donner un air un peu plus orienté objet.

    Notez que cet exemple montre aussi une façon d'intégrer des variables au cours du temps. Dans ce cas-ci, nous intégrons les vélocités pour produire une position.

  23. Comment obtenir qu'un LOD pré-charge sont contenu en processus d'arrière-plan?

    La meilleure façon est d'utiliser createVrmlFromURL dans un Script et de déclencher le Script lorsque vous voulez que l'objet soit chargé. Cela fonctionne aussi pour prévenir le chargement de niveaux de détails qui serait invisible, puisque rien dans les spécifications n'indique ou ne demande qu'un navigateur charge ou évite de charger un LOD invisible. Cet exemple montre un LOD qui ne se chargera que lorsque l'usager s'en sera assez approché. [téléchargement].

  24. Comment désactiver la collision avec l'avatar?

    Utilisez un nœud Collision, mettez-le autour de tout ce dont vous ne voulez pas que l'avatar entre en collision, et indiquez FALSE dans le champ "collide". Votre scène contiendra certains objets dont la collision avec l'avatar sera improbable sinon impossible, tel l'ornementation au dessus des édifices, et peut-être vaut-il la peine d'expérimenter avec quelques navigateurs pour voir si le fait d'envelopper ces objets dans un nœud Collision permet une plus grande vitesse d'exécution.

  25. Comment détecter la collision entre des objets de la scène (pas l'avatar) avec d'autres objets?

    Réponse courte: vous ne le pouvez pas. Réponse plus longue: vous devez écrire un Script ou une appliquette EAI qui calculera les collisions pour les objets que vous voulez faire entrer en contact les uns avec les autres. Vous pouvez souvent contourner cette limitation de VRML en pré-programmant le mouvement des objets ou en filtrant le mouvement des objets au travers un Script appliquant des limites pour simuler les collisions. Un document présenté au 1997 VRML Symposium: "V-COLLIDE: Accelerated Collision Detection for VRML" par Thomas C. Hudson et al (pdf) parle d'un programme pour la détection de collisions entre objets.

  26. Comment imprimer une scène VRML?

    Je ne connais aucun navigateur VRML qui vous laissera imprimer une scène à partir du bouton "Imprimer" du navigateur web. Mais il y a une astuce. La plupart des plateformes vous donneront la possibilité d'effectuer une saisie de l'écran (sur le PC Alt-Imp Écr saisira la fenêtre active). Vous pouvez ensuite ouvrir une application graphique 2D tel Photoshop (Mac et PC), Paint Shop Pro (PC), ou xv (Unix) et soit coller l'image dans une autre image vide ou la coller en tant que nouvelle image. Les systèmes Unix peuvent enregistrer automatiquement la saisie de l'écran dans un fichier. Les meilleures applications graphiques 2D vous permettront ensuite de modifier et d'imprimer l'image ou de la convertir vers un format comme EPS qui peut être imprimé.

  27. Comment faire une traînée de mouvement suivant la trajectoire d'un objet?

    Tom Kaye du bureau SGI de Huntsville a développé un PROTO pour la génération de traînées de mouvement [téléchargement].

  28. Est-ce qu'on peut visualiser un objet sous forme fil de fer autant que solide?

    Certains navigateurs le permettent en tant qu'option de visualisation, mais vous pouvez le faire dans n'importe quel navigateur. DEFez votre nœud Coordinate de votre& IndexedFaceSet et ensuite USEz-le dans un nœud IndexedLineSet. Vous aurez besoin de générer le champ "coordIndex" de votre IndexedLineSet, mais ça peut se faire relativement facilement en copiant ce champ dans votre IndexedFaceSet et en élaguant les lignes redondantes. Mettez les deux nœuds dans des branches d'un nœud Switch et commandez le switch à partir d'un script.

  29. À quel moment un gros monde VRML devient-il trop gros?

    Il n'y a pas si longtemps, Dennis McKenzie disait qu'il tentait de maintenir en moyenne pour ses fichiers VRML aussi peu que 2K polygones ou moins. David Frerichs utilise une heuristique plus stricte qui gagne à être mieux connue:

    Vitesse de chargement Type Grosseur Maximum

    28.8Kb/Sec

    NanoVRML

    12KB

    56Kb/Sec, ISDN

    Vignette

    200KB

    CD-ROM, T1

    Immersif

    1MB+

    L'aspect important est ici la vitesse du modem d'un visiteur moyen. Actuellement, cette moyenne est autour de 28.8K.

  30. Combien de décimales de précision faut-il pour les nombres utilisés dans un IndexedFaceSet?

    Procédons d'abord de façon imagée. Si le visiteur moyen de votre monde possède un écran de 800 x 600 , alors la différence entre un point dont les coordonnées sont 1000 0 0 et 1001 0 0 sera un peu moins que de un pixel. Ceci semble vouloir dire que trois décimales de précision seraient suffisantes pour n'importe quel monde virtuel, mais ça ne prend pas en comte le point de vue de l'usager.

    Supposons que vous regardiez une lame dans un microscope virtuel. Une différence entre 4.0000001 et 4 pourrait bien être énorme. D'un autre côté, si les motifs sculptés sur le toit d'un temple ne dépassent jamais 2 degrés de largeur dans le champ de vision de l'usager, vous pourrez sans doutes en réduire la résolution et le nombre de polygones sans effets notables.

    La véritable réponse est d'établir pour chaque objet, et peut être même chaque partie de chaque objet (disons, une machine accrochée sur un long mur duquel le visiteur pourrait bien s'approcher et utiliser), la grosseur que cet objet représentera dans le champ de vue du visiteur, et ensuite d'établir le nombre de polygones et de combien de précision qu'il nous faut pour le reproduire correctement.

    Un dernier point: dans le monde réel nous sommes habitués de voir les objets se révélant graduellement avec de plus en plus de détails à mesure que l'on se rapproche d'eux. C'est une part importante de la façon dont on perçoit la distance. En utilisant sélectivement les LODs, on peut reproduire cet effet dans notre monde virtuel et le rendre ainsi plus réaliste.

  31. Comment fait-on une visite guidée?

    Beaucoup de gens ont remarqué que l'exemple d'une visite guidée dans le livre de Hartman & Wernecke ne fonctionne pas comme il le devrait. Jed a un remplacement commenté exhaustivement pour l'exemple de ce livre.

  32. Comment animé une texture sans utiliser de MovieTexture?

    Cet exemple [téléchargement] montre un bâton de dynamite avec sa mèche et les étincelles utilisant un PixelTextures et un Script. Il y a un  utilitaire ici au VRMLworks qui prend une image ordinaire en GIF ou en JPEG pour en faire un PixelTexture.

  33. Les PROTOs peuvent avoir des exposedFields, mais les Scripts n'en ont pas. Comment peut-on relier un PROTO à un Script?

    C'est une des déficiences connues des spécifications. L'exemple suivant de Greg Seidman montre une façon de contourner cette limitation:

    PROTO Foo [ exposedField SFBool enabled TRUE ] {
      DEF CONTROL Script {
        field SFNode enabled ENABLED PointLight { on IS enabled }
        eventIn SFBool set_enabled
        url [ "vrmlscript:
          function set_enabled(val, time) {
           //faire quelque chose basé sur la nouvelle valeur
          }
        "]
      }
      ROUTE ENABLED.on_changed TO CONTROL.set_enabled
    }

    Greg note qu'il est quelquefois nécessaire d'établir le champ "directOutput" à TRUE. Pour mon propre travail, j'ai souvent réalisé qu'un eventIn ou un eventOut était tout ce qui est nécessaire, tandis que j'évite les exposedFields dans les PROTOs.

  34. Comment fabriquer un ElevationGrid?

    Vous pourriez vous asseoir avec votre éditeur de texte et y taper les points, mais c'est absurde. La majorité des modélisateurs VRML ont un outil pour faire l'ElevationGrid. Mais si vous n'avez pas de modélisateur VRML, ou si vous trouvez que l'outil d'ElevationGrid est difficile à utiliser dans le vôtre, il y a d'autres façons pour en faire un.

    Une façon est d'utiliser une application graphique 2D commune tel  Photoshop ou Paint Shop Pro et d'y créer une carte du terrain en tons de gris. Plus pâle est la couleur, plus haute est l'élévation. Puis enregistrez dans un fichier PGM ou un fichier PNM en tons de gris. La plupart des applications graphiques 2D vous permettront d'enregistrer le fichier dans un de ces formats, et si la vôtre ne vous le permet pas, vous pourrez presque à coup sûr l'enregistrer dans un fichier GIF en tons de gris (256-valeurs de gris) et utiliser "giftopnm", inclus dans l'utilitaire gratuit pnmtopix du VRMLworks, pour le changer en un PNM en tons de gris. Prenez ensuite votre fichier PGM ou PNM et utilisez un utilitaire gratuit du VRMLworks appelé pbm2wrl pour le convertir en un ElevationGrid.

    Une autre façon de faire un ElevationGrid est en prenant des données réelles d'élévation provenant de U.S. Geological Survey ou d'autres sources et d'utiliser un utilitaire gratuit du VRMLworks appelé dem2wrl pour les convertir en un ElevationGrid. Ces fichiers DEMs peuvent être énormes, donc à moins que le niveau de détail contenu dans un DEM soit vital pour votre application, assurez-vous de réduire ces données; j'utilise une réduction de l'ordre de 10-à-1 en moyenne dans ce que j'ai fait.

    Encore une autre façon est de tirer parti du travail fait par les gens de la communauté de "raytracing" sur des outils de génération de terrain. Jörn Seger a créé une liste d'utilitaires de "raytracing", dont plusieurs sont gratuits. J'ai utilisé Terrain Forge de Silver Software et Leveler de Tapio Vocadlo. Dans les deux cas vous exportez une carte 2D en tons de gris (un "bitmap" Windows dans Terrain Forge et un fichier targa dans Leveler -- aussi Tapio et moi-même travaillons à un "plugin" qui permettra à Leveler d'exporter directement des ElevationGrids VRML). Vous utilisez ensuite pbm2wrl pour convertir en un ElevationGrid.


[line]

Ai-je oublié quelque chose qui vous serait utile dans ces questions? Si c'est le cas, Faite-le moi savoir.

-- Bob Crispen
-- Jeudi, 11 juin, 1998

Notes du traducteur:
Si vous avez des suggestions, corrections ou commentaires à apporter,
n'hésitez pas à me contacter

-- Sylvain Carette
-- Dimanche, 17 juin 2001