![]() | FAQ |
||||||
![]() | |||||||
|
FAQTable des matièresVoici une liste de réponses à certains problèmes, certes classiques, mais qui peuvent faire perdre un temps précieux. J'ai également inséré des conseils pour améliorer vos projets en ajoutant du contenu comme du son ou du texte. Cette page s'étoffera avec vos propres questions, si vous en avez.
Ajout de contenu dans votre projetComment charger des objets 3d dans mon application ?Les gestionnaires de graphes de scène OpenSceneGraph ou OpenSG, qui sont supportés par VRJuggler, permettent de charger plusieurs types de modèles 3d. Ils permettent entre autre de charger des .wrl (VRML 97 seulement), des .obj, des .off, des .raw et des .osg. Il est possible d'utiliser d'autres gestionnaires de graphes de scène, qui ne sont pas directement supportés par VRJuggler, mais cette option est déconseillée puisque vous risquez d'éprouver certaines difficultés lors de leur intégration. Si vous êtes un expert en infographie ou que vous êtes ambitieux, vous pouvez utiliser ou créer votre propre engin 3d et l'adapter pour qu'il puisse fonctionner avec VRJuggler. Afin de charger des formats de modèles 3d spécifiques, vous devrez implanter par vous même vos algorithmes d'importation. Il est relativement facile de trouver ce type d'algorithmes (souvent en C/C++) sur le web. Faites toujours attentions à la complexité des modèles que vous importez, il peuvent sérieusement nuire à la performance de l'affichage! Un objet qui fait 40000 polygones ou plus est trop complexe par exemple (en plus d'être long à charger)! Il existe des sites avec des modèles gratuits, dans divers formats, vous pouvez utilisez Google :), pour ma part je conseille celui-ci. L'engin de recherche de modèles 3d de l'Université de Princeton peut être aussi fort utile, mais il nécessite que vous ayez installé le plugin de Java pour votre fureteur. Ce site vous donne une liste de nombreux autres sites distribuant des modèles gratuits. Si vous êtes mêlés avec tous les formats différents qui existent, vous pouvez utiliser MilkShape3D, qui est très pratique pour convertir un format dans un autre, avec une période d'évaluation de 30 jours je crois :) Où trouver des textures pour mon application ?Je conseille ce site et celui là Tentez toujours d'utiliser une texture dont la taille est une puissance de 2 afin d'optimiser l'affichage et éviter certains problèmes. Comment ajouter du son à mon projet ?
Comment ajouter du texte 3D à mon projet ?Dans la CAVE, vous ne pouvez pas utiliser la méthode "classique" pour afficher du texte à l'écran. Si vous utilisez du texte 2D, il va s'afficher sur les 4 écrans à la fois. Pour résoudre ce problème, il faut utiliser du texte 3D positionnable dans l'espace et non en coordonnées fenêtre. Je conseille d'utiliser une librairie qui s'appelle FTGL. Compilation et exécution dans la CAVEOù est il préférable de travailler ?Pour des raisons purement logistiques, il ne sera pas possible de faire tout le développement de votre projet à la CAVE. Idéalement, allez à la CAVE uniquement pour tester et débugger, mais pas pour coder. Comment préparer mon environnement de travail ?Avant de pouvoir exécuter votre application dans la CAVE, vous devez configurer votre environnement de travail afin de pouvoir utiliser efficacement le script startCAVE. Pour cela vous devez configurer ssh de façon à ne pas avoir à entrer votre mot de passe à chaque fois que vous vous connectez sur une des machines du cluster:
Où se trouvent les librairies et autres fichiers importants ?Tous les logiciels, librairies et fichiers importants sont maintenant dans les sous-répertoires du répertoire /net/bonne/exports/stk_bonne_fedora.Problèmes diversVRJuggler démarre mon projet, mais rien ne s'afficheSi vous avez compilé votre projet ailleurs, c'est normal. Recompilez sur cvmaitre, tout devrait mieux fonctionner. Mon animation se désynchronise progressivement sur les différents mursSi vous effectuez des animations basées sur le temps d'affichage d'une frame, il faut prendre conscience d'un problème: ce temps varie suivant la machine qui exécute votre programme, il est donc normal qu'il ne soit pas le même. Pour ce faire, il faut ajouter l'include suivant : #include <gadget/Type/AnalogInterface.h> L'accès à un temps global pour le cluster peut se faire par n'importe quel device partage par les éléments du cluster, par exemple le device VJHead qui représente la tète de l'utilisateur. Il suffit donc de déclarer la variable (si ce n'est pas déjà fait): gadget::PositionInterface mHead;Dans le init(), il faut attribuer le device à cette variable en plaçant la ligne : mHead.init("VJHead");Enfin, pour accéder à la valeur désirée, il suffit de coller ces lignes, préférablement dans PreFrame() : static vpr::Interval last_frame; vpr::Interval current_frame = mHead->getTimeStamp(); vpr::Interval diff(current_frame-last_frame); last_frame = current_frame; // pour accéder au delta_t en microsecondes : vpr::Uint64 delta = diff.usec(); Mes appels OpenGL dans PreFrame() ne sont pas effectifsC'est normal car cette fonction exécute tout sauf des commandes OpenGL, elle est justement prévue pour ne contenir que des fonctions non-graphiques (voir la documentation VRJuggler pour pour plus d'explications). J'utilise la méthode 'frame' de la classe osgViewer et rien ne s'afficheOn doit utiliser: viewer.run();ou encore viewer.realize(); while(!viewer.done()) { viewer.frame(); viewer.update(); } Comment modifier la perspective ?C'est impossible avec VRJuggler, car c'est cette librairie qui s'occupe du calcul des différentes projections sur les éléments du cluster. Si vous appelez un gluPerspective, il sera tout simplement ignoré. Je manque de boutons pour faire tout ce que je veux !Oui on arrive vite à utiliser les 3 boutons de la wand (pour la navigation par exemple) et à se trouver à cours pour autoriser une action supplémentaire.Dans ce cas, je dirai qu'il faut faire preuve de pragmatisme et de bons sens. Quelques conseils :
Quel est le meilleur moyen pour la navigation ?Il n'y en a pas ! Tout dépend de votre projet, à savoir quelle liberté de mouvement vous voulez offrir à l'utilisateur. Quelques techniques en vrac, à savoir que les combinaisons sont conseillées, la limite est votre imagination ! :
Voilà pleins d'idées à creuser, faites juste preuve d'imagination et de bon sens, chaque situation à une solution particulière. Lors du lancement de mon application, tout semble bien se dérouler, mais elle ne réussit pas à démarrerIl peut parfois arriver (souvent lors du premier essai) que votre application ne réussit pas à démarrer malgré le fait qu'aucun problème apparent n'est signaler via les divers sessions des machines du cluster. Il s'agit d'un problème lié à la synchronisation des machines du cluster qui provient de l'installation particulière que nous utilisons pour la CAVE: certaines machines attendent indéfiniment l'obtention d'information de la part d'autres machines. Quoi faire? Peu élégant, mais fonctionnel: simplement relancer l'application. Ce problème devrait normalement être réglé d'ici peu... L'effet stéréoscopique est partiellement/totalement non-fonctionnel sur certains écransCe problème provient encore une fois de l'installation particulière que nous utilisons pour la CAVE. Normalement, afin d'obtenir un effet stéréoscopique fonctionnel, il faut que cvfond soit lancée et prête à afficher avant les autres machines des écrans. Pourquoi? C'est elle qui s'occupe de la synchronisation de l'affichage entre les machines des écrans. Le script startCAVE est d'ailleurs conçu de façon à nous assurer que cela se produise. Mais quel est le problème alors? Notre installation actuelle, en rapport avec VRPN, fait que cvfond n'est pas nécessairement toujours la première machine à être prête à afficher. Une race se produit malgré nous entre les machines concernées. Nous somme donc malheureusement contraints aux lois du hasard :(. Quoi faire alors? Croiser les doigts et espérer que cvfond gagne la course afin que l'effet stéréoscopique soit pleinement fonctionnel: relancer votre application jusqu'à temps que l'effet soit acceptable. Normalement, il n'est pas nécessaire de relancer une application plusieurs fois avant que cela se produise. De plus, pour plusieurs situations, le fait que l'effet ne soit pas pleinement fonctionnel n'est pas si dramatique. Ce problème devrait normalement être réglé d'ici peu... | ||||||
![]() | |||||||
© 2000-2025, Polytechnique Montréal - LIRV - Tous droits réservés http://cours.polymtl.ca/inf6802/wwwrv/voute/faq.php Benoît Ozell |