TRAVAIL D`ÉTUDE ET DE RECHERCHE : Interactions 3D

Transcription

TRAVAIL D`ÉTUDE ET DE RECHERCHE : Interactions 3D
!"#$%&'(')*+,&-"$./0%
'''1**2%'344563447
''
891:1);'<=>8?<@'@8'<@'9@AB@9AB@'C
)*$%&"D$.,*#'E<
F&"G'10&2H.%*
9.DI%H-.'J%"*KLI.H.MM%
!".'3447
@*D"N&%-%*$'C'<."*%';.*O&"*N
@/0.M%'9".*P,QR';"P,&"$,.&%')ESR'S,MI."'1*$.M,H.#
@*'D,HH"P,&"$.,*'"T%D'C
AS8U'VA%*$&%'SD.%*$.+./0%'%$'8%DI*./0%'N0'UW$.-%*$XR'S,MI."'1*$.M,H.#
Table des matières
I Introduction
Présentation du projet
3
1 Présentation du sujet
4
2 Présentation du CSTB
2.1 Salle immersive « Le Corbusier » . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Plateforme materielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Intégration de notre projet au CSTB . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5
5
5
3 Présentation de Delta3D
6
II
7
Travail de Recherche
4 Inventaire
4.1 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Travail réalisé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Organisation du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
III
Implementation
8
8
8
8
10
5 Architecture GameManager
5.1 Introduction . . . . . . . . . . . . . . . . . . .
5.2 Notion d’Acteur . . . . . . . . . . . . . . . . .
5.2.1 Projet, Map, STAGE . . . . . . . . .
5.2.2 Acteurs, Proxies et Propriétés . . . . .
5.2.3 Bibliothèques d’acteurs . . . . . . . .
5.3 Game Manager et Messages . . . . . . . . . .
5.3.1 Game Manager : GM . . . . . . . . .
5.3.2 Game Actor . . . . . . . . . . . . . . .
5.3.3 Game Manager Component . . . . . .
5.3.4 Game message . . . . . . . . . . . . .
5.3.5 Créer une simulation avec GameStart
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
11
11
12
13
14
14
15
15
16
16
6 Wiimote
6.1 Présentation . . . . . .
6.2 Driver . . . . . . . . .
6.3 Intégration à Delta3D
6.4 Utilisation . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
17
17
18
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
TABLE DES MATIÈRES
2
7 Application de test
7.1 Introduction et but . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
19
19
8 Acteurs externes à l’application
8.1 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 Traitement des Messages et événements . . . . . . . . . . . . . . . . . . . . . . . .
21
21
22
9 Intégration des acteurs externes
9.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Intégration du composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3 Contraintes, intéractions isolées . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23
23
23
IV Résultats obtenus
Conclusion
Perspectives
26
10 Planning
27
11 Résultats obtenus
11.1 Tests d’intégration au CSTB . . . . .
11.1.1 Contexte . . . . . . . . . . . .
11.1.2 Déroulement des tests . . . . .
11.1.3 Complexité de l’intégration . .
11.1.4 Lancement de l’application . .
11.2 Bilan . . . . . . . . . . . . . . . . . . .
11.2.1 Concernant notre architecture .
11.2.2 Déplacement des acteurs . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12 Conclusion
13 Travaux à poursuivre
13.1 Couche réseau . . . . . . . . . .
13.2 Centrale inertielle . . . . . . . .
13.3 Gestaction . . . . . . . . . . . .
13.4 Fonctionnalités supplémentaires
13.5 Site web : Retour d’utilisateurs
28
28
28
28
28
29
29
29
29
30
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
31
31
31
32
32
Première partie
Introduction
Présentation du projet
3
Chapitre 1
Présentation du sujet
Le sujet de notre projet est : Les interactions 3D.
Ce projet comprend tout d’abord une partie recherche qui consiste en la réalisation d’un inventaire interactif des différents périphériques d’interaction 3D existants. Cet inventaire permettra
de se faire une idée précise des produits existants et éventuellement d’utiliser l’un de ces produits
dans notre partie développement.
La partie principale de ce projet a pour but de développer de nouvelles façons d’interagir avec un
environnement 3D. Le CSTB (Centre Scientifique et Technique du Bâtiment) de Sophia Antipolis
dispose d’une salle immersive, permettant de créer des scènes 3D très réalistes. L’environnement
logiciel de cette salle repose sur le moteur Delta3D. Actuellement, les interactions se font de
manière classique, au moyen d’un clavier et d’un joystick. Notre but est de créer des « acteurs »
Delta3D utilisant d’autres types de périphériques, et de pouvoir intégrer ces acteurs, développés
de façon autonome, dans une scène déjà conçue au CSTB, sans avoir de modification à apporter
à leur code.
Ce qui nous intéresse également est le fait que actuellement, les spectateurs qui prennent place
dans la salle immersive sont totalement passifs, le contrôle de la caméra étant confié à un opérateur
assis à la console de commande.
On voudrait rendre les scènes plus interactives, avec la possibilité pour chaque spectateur de
disposer de son propre avatar dans la scène et d’un périphérique lui permettant de le diriger et
pourquoi pas d’interagir virtuellement avec les autres spectateurs présents.
4
Chapitre 2
Présentation du CSTB
Le Centre Scientifique et Technique du Bâtiment est un organisme public, qui est à la pointe
dans le domaine du bâtiment. Son but est d’améliorer la sécurité et le bien-être dans les nouvelles
constructions. Par exemple : résistance au vent, insonorisation, lutte contre l’incendie, etc...
Le CSTB possède plusieurs sites en France. Celui de Sophia Antipolis possède une salle immersive, qui permet de recréer sur une simulation informatique en 3D n’importe quel bâtiment ou
même une ville entière.
2.1
Salle immersive « Le Corbusier »
Cette salle possède un écran de projection conique de 9 mètres de diamètre et de 2.80 mètres
de haut, sur lequel sont projetées des images en très haute résolution (5000 x 1200 px). La salle
est équipée d’une quinzaine de sièges et dispose également d’une système de sonorisation complet
permettant des simulations audio-visuelles très poussées.
Bien qu’elle existe depuis plusieurs années, la salle a cependant été profondément modifiée cette
année, avec le remplacement complet de l’infrastructure matérielle.
2.2
Plateforme materielle
Jusqu’à l’an dernier, la salle disposait d’un super-calculateur SGI plutôt imposant (2 armoires
complètes) pour générer les scènes 3D, le tout relié a 3 video-projecteurs CRT.
La nouvelle plate-forme se compose de :
– 3 Vidéo-projecteurs DLP
– Une station de travail Dell :
– Bi-processeur Intel Xeon dual-core
– 32 Go de RAM
– 2 cartes graphique nVidia Quadro FX
– OS : Linux Mandriva (64 bits)
2.3
Intégration de notre projet au CSTB
Le but du projet est de créer un acteur indépendant, sous la forme d’une bibliothèque partagée,
qui pourra être intégrée facilement à une application déjà fonctionnelle au CSTB. Et cela sans
avoir à modifier le code ou à recompiler quoi que ce soit dans l’application.
5
Chapitre 3
Présentation de Delta3D
Delta3D est un moteur utilisé pour des jeux, simulations, modélisations et autres applications
en 3D. Il a été créé par l’institut MOVES, de la « Naval Postgraduate School » (Etats-Unis), et
est développé par l’armée Américaine. Le fonctionnement de Delta3D et ses fonctionnalités seront
étudiés en détails dans la partie « Implémentation ». Notons qu’il est écrit en C++.
Compagnies utilisant Delta3D Delta3D est surtout utilisé par des organisations gouvernementales ou militaires : Naval Postgraduate School, Office of Naval Research, Program Manager
for Training Systems, Naval Education and Training Command ...
OS supportés
– Windows
– Linux
– Mac OS X (support partiel)
Licence
Delta3D est sous licence GNU Lesser General Public License (LGPL).
Dépendances Pour pouvoir fonctionner, Delta3D utilise de nombreuses bibliothèques (libres)
externes telles que :
– Open Scene Graph (OSG) pour la 3D
– Open Dynamics Engine (ODE) pour la physique
– Character Animation Library (CAL3D) pour l’animation des personnages
– OpenAL pour l’audio
– Producer pour les périphériques d’entrée
– et bien d’autres...
Le rendu dans Delta3D s’effectue via OpenSceneGraph, qui utilise lui-même OpenGL.
Fig. 3.1 – Logo Delta3D
6
Deuxième partie
Travail de Recherche
7
Chapitre 4
Inventaire
Durant la première partie du TER, nous avons réalisé un inventaire des périphériques 3D
existants.
4.1
Limites
L’objectif de ce travail est de faire l’état de l’art des périphériques 3D disponibles. Or il est
souvent difficile de trouver des informations pertinentes sur ce genre de matériel. En effet même
les sites des constructeurs restent très vagues quant aux possibilités réelles de leurs produits. De
plus, il est presque impossible d’obtenir des tarifs pour la plupart des produits, sachant que ceux
ci coûtent en général plusieurs milliers d’euros.
Notre but est donc de regrouper le maximum d’informations au même endroit, afin d’avoir
un aperçu complet de l’offre de périphériques 3D. Il s’agit en même temps pouvoir recueillir des
critiques venant des utilisateurs de ces produits.
4.2
Travail réalisé
Nous avons réalisé un site web qui contient notre inventaire. Ce site a été rempli avec le
maximum d’informations disponibles, ce qui n’est d’ailleurs pas grand chose pour certains des
périphériques ! Cet inventaire est interactif puisqu’il permet aux visiteurs du site de laisser des
commentaires sur un produit ou bien de regarder les commentaires déjà laissés par d’autres utilisateurs.
Le site est en ligne à cette adresse : http://thx009.free.fr/TER/inventaire/
4.3
Organisation du site
Dans notre inventaire, nous avons choisi de répartir les périphériques en 6 catégories qui sont :
– Motion capture
– Gloves
– Haptic devices
– HMD : « Head Mounted Displays »
– 3D input devices
– 3D Displays
Motion capture il s’agit entre autres des centrales inertielles, qui permettent de capturer un
mouvement de manière plus ou moins complexe.
8
4.3. ORGANISATION DU SITE
9
Gloves Les gants interactifs permettent de « toucher » des objets dans une scène en 3D et
d’interagir avec eux. Certains sont dotés de systèmes à retour de force, qui permettent d’augmenter
le réalisme.
Haptic devices Ce sont des périphériques dont le principal intérêt est de fournir un retour
d’effort, la plupart sont composés d’une sorte de stylet relié a plusieurs moteurs, qui donnent une
sensation de toucher très réaliste.
Head Mounted Displays Il s’agit de casques ou de lunettes munis de petits écrans LCD. Ils
permettent une immersion totale dans un environnement en 3D. La plupart sont également munis
d’un système audio, afin de rendre l’environnement le plus réaliste possible.
3D input devices Ce sont des périphériques d’entrée souvent similaires à des Joysticks mais
leur conception a été pensée pour la 3D. Ils disposent en effet de 6 degrés de liberté, contre 3 pour
les périphériques plus classiques.
3D Displays Il s’agit d’écrans LCD qui utilisent la stéréoscopie, afin d’afficher des images en
3D sans avoir besoin d’utiliser des dispositifs externes, comme des lunettes par exemple.
Fig. 4.1 – Extrait d’une page de l’inventaire
Troisième partie
Implementation
10
Chapitre 5
Architecture GameManager
5.1
Introduction
Ce chapitre présente quelques notions fondamentales utilisées dans Delta3D, en particulier les
notions d’acteur et de message. Il vise également à montrer l’un des composants principaux de
Delta3D, qui sera utilisé dans notre implémentation : le Game Manager.
5.2
5.2.1
Notion d’Acteur
Projet, Map, STAGE
Projet Un projet est composé de plusieurs maps, de la même manière qu’un jeu peut se dérouler
dans plusieurs niveaux. Il est responsable des ressources importées dans l’éditeur, comme les
textures, les maillages et les sons.
Map Une map est constituée d’un ensemble d’acteurs, plus précisément de proxies d’acteur. Elle
est visualisable et éditable dans l’éditeur STAGE. Une map est enregistrée sous forme d’un fichier
XML, possédant des balises pour chaque acteur et leurs propriétés, ainsi que des informations
générales et les librairies et ressources importées.
Fig. 5.1 – Project - Map : Diagramme de Classes
11
12
CHAPITRE 5. ARCHITECTURE GAMEMANAGER
STAGE STAGE (Simulation, Training, And Game Editor) est un éditeur permettant de construire
un environnement 3D utilisable par le moteur Delta3D. Il est développé en C++/QT.
Eléments de l’interface graphique de STAGE :
– barre de menus
– barre d’outils
– éditeur de propriétés d’un acteur
– vues (haut, côté, face, perspective)
– explorateur de ressources (maillages, textures, sons, particules, ...)
– explorateur des acteurs
Fig. 5.2 – Editeur : STAGE
5.2.2
Acteurs, Proxies et Propriétés
Actor Un acteur est un objet qui possède des propriétés qui lui sont propres. Le terme d’acteur
est assez global, il peut être un maillage (par exemple un avion, un personnage), un système de
particules, une texture, du son, un terrain, une caméra, une source de lumière ... Les acteurs sont
des objets spécialisés qui permettent de définir un jeu ou une simulation.
ActorProxy Un proxy sert à envelopper un acteur. Les proxies sont de simples classes stockant
des données. Ils servent à deux choses. Tout d’abord, ils fournissent une interface standardisée
reconnue par l’éditeur (STAGE), contrairement aux acteurs proprement dits qui peuvent contenir
5.2. NOTION D’ACTEUR
13
n’importe quoi. Ils ont de plus accès à toutes les caractéristiques de l’acteur, en particulier les
propriétés.
Ces proxies permettent aux acteurs de communiquer leur comportement à des applications
externes, et d’établir un protocole de communication générique entre eux.
ActorProperties Ce sont les propriété d’un acteur, affichables et éditables, que ce soit dans
l’éditeur STAGE ou dynamiquement dans le code. Elles permettent de changer le comportement
d’un acteur en fonction du contexte de la simulation, et ce sans changer le code. Par exemple, un
drapeau est caractérisé par sa longueur, sa largeur et sa texture.
Les propriétés fournissent donc un mécanisme du type accesseurs/modifieurs, similaire aux
Java Beans.
Fig. 5.3 – Actor et ActorProxy : Diagrammes de Classes
5.2.3
Bibliothèques d’acteurs
Utilité Les bibliothèques d’acteurs sont des composants distribuables qui servent à encapsuler
des groupes d’acteurs et leurs proxies. Ce sont des librairies dynamiques de code C++ qui peuvent
être chargées dans l’éditeur ou dans d’autres applications. C’est un des outils les plus intéressant
de Delta3D dans le cadre de notre projet, qui consiste à intégrer un module externe dans une
application existante.
LibraryManager, ActorPluginRegistry et ActorType
LibraryManager Le LibraryManager gère les bibliothèques enregistrées et les types des
acteurs que chaque bibliothèque peut créer. C’est à travers lui que l’éditeur connait les acteurs
externes, plus précisément leurs proxies.
ActorPluginRegistry Cette classe permet aux développeurs de créer leur propre librairie en
l’étendant. Elle permet, via un ActorProxy, de créer un acteur à partir de son type (ActorType).
CHAPITRE 5. ARCHITECTURE GAMEMANAGER
14
L’éditeur ne connait rien des classes de l’objet/acteur, c’est l’ActorPluginRegistry qui sert de
passerelle. L’ActorPluginRegistry sert à enregistrer les types d’acteurs fournis et à les lier aux
proxies correspondants.
ActorType C’est une simple classe de données qui décrit un type d’acteur particulier. Il y
a un ActorType pour chaque classe d’acteur. Le type est caractérisé par un nom, une catégorie et
une description. La catégorie donne la hiérarchie de l’acteur, par exemple : "véhicule.voiture.4x4".
Intégrer une bibliothèque avec STAGE Une bibliothèque peut être importée très simplement dans STAGE. Les acteurs disponibles dans la bibliothèque s’ajoutent à la liste des acteurs
standards, on peut alors ajouter des acteurs dans la map.
5.3
Game Manager et Messages
Cette section vise à présenter l’infrastructure du Game Manager, qui sert à gérer les intéractions
entre acteurs dans un monde 3D. Elle donne une vue d’ensemble de ce que sont les Game Actors,
Game Components et Game Messages.
Fig. 5.4 – Organisation du Game Manager
5.3.1
Game Manager : GM
Le Game Manager est le coeur d’une application. Il gère tous les acteurs, les composants et les
messages. Ces notions seront expliquées plus loin. Le manager sert à gérer les intéractions entre
5.3. GAME MANAGER ET MESSAGES
15
tous les acteurs et les composants dans un monde 3D, et ce de manière générique et automatique.
Il serait bien sûr possible de gérer tout cela à la main mais cela deviendrait vite fastidieux !
Un exemple :
Comment intégrer un objet dans la scène qui puisse être utilisé par un personnage ?
Comment faire connaitre les actions d’un acteur aux autres instances d’acteur présentes ?
C’est là qu’intervient le Game Manager, qui fournit une architecture générique pour gérer ces
intéractions.
Afin de superviser une simulation, le GM effectue 3 tâches :
La première, la plus importante, est la gestion des messages (Game Messages), qui permettent la
communication entre les acteurs, les composants et le GM. Les messages peuvent être utilisés lors
d’événements, par exemple l’entrée d’un nouvel acteur dans la scène, ou bien une action effectuée
par un acteur. Mais ils ne s’envoient pas tout seuls, c’est le GM qui s’en charge : il reçoit et diffuse
les messages.
La deuxième tâche du GM est de cataloguer tous les acteurs dans l’application. Ceci inclut les
acteurs normaux et les GameActors (voir plus loin). Il repère les acteurs qui ont été créé dans le
code ou dans la map (via l’éditeur STAGE). Il indique aux acteurs de traiter les messages, gère
leurs entrées/sorties dans la scène et les font évoluer à intervalle régulier (à chaque frame).
La troisième tâche du GM est de gérer les composants (GMComponent). Un composant est un
objet de haut niveau qui utilise les messages. Contrairement aux acteurs, qui ne reçoivent que les
messages qui leurs sont dédiés, les composants reçoivent tous les messages. De plus, ils ne peuvent
avoir qu’une seule instance et ils assurent des fonctions plus globales que les acteurs comme la
gestion des périphériques (réseau, joystick ...).
5.3.2
Game Actor
La notion d’acteur a été vue plus haut. Un GameActor est simplement un acteur qui travaille
directement avec un Game Manager. Les acteurs normaux sont des objets statiques dans le monde.
Ils peuvent représenter des maillages statiques comme des bâtiments, des arbres, des sources
de lumières immobiles, un terrain. Ils ne possèdent pas de comportements. Les Game Actors,
quant à eux, donnent vie à la simulation. Ils possèdent des comportements qui leur sont propres,
peuvent envoyer et recevoir des messages, plus généralement ils peuvent intéragir avec le monde
environnant.
Tout comme les acteurs normaux, un GameActor a besoin d’un proxy (GameActorProxy). En
fait, le Game Manager ne connait que les proxies, ce qui lui permet d’être générique et donc plus
flexible. Il ne fait par exemple pas la différence entre un personnage et un véhicule.
5.3.3
Game Manager Component
Un GMComponent est un objet géré par le Game Manager, qui peut recevoir et envoyer
des messages. Contrairement aux acteurs, il reçoit tous les messages du système. Il fournit des
comportements de haut niveau. L’utilisation de composants est la principale solution pour ajouter
des comportements avancés, et ce sans modifier le Game Manager qui reste ainsi générique.
Par exemple, si l’on veut rajouter une couche pour l’audio ou un nouveau périphérique d’entrée,
il suffit de créer un composant qui pourra être rajouté/supprimé dynamiquement à l’exécution.
Puisque les composants reçoivent tous les messages du système, ils peuvent connaître tout
ce qui se passe, et en particulier les états des acteurs. On peut créer un composant simple, qui
attend des messages spécifiques et qui détecte et traite les événements d’un périphérique tel que
CHAPITRE 5. ARCHITECTURE GAMEMANAGER
16
le clavier. On peut aussi avoir un composant plus complexe, qui possède une liste d’acteurs et
effectue certaines actions en fonction de leurs états.
5.3.4
Game message
Une des principales fonctionnalités du Game Manager, et plus généralement de Delta3D, est
l’utilisation de messages. Les messages sont typiquement utilisés pour envoyer des données (ex :
changement d’une propriété d’un acteur) ou des comportements (requêtes ou commandes).
Un acteur ou un composant envoie un message au Game Manager, qui le diffuse aux autres
acteurs/composants concernés. Le composant, qui reçoit tous les messages, peut les traiter directement ou renvoyer des messages plus spécifiques à d’autres acteurs.
Les acteurs ne reçoivent pas tous les messages. En effet, puisqu’il peut y avoir de très nombreux
acteurs dans le monde, le fait d’envoyer tous les messages à tous les acteurs peut nuire aux
performances. Les acteurs ne s’enregistrent qu’à certains types de messages. Ce peut être par
exemple un message de communication entre acteurs, ou bien le « Tick » (message qui est envoyé
à chaque frame).
Événements : Game Events Les événements (Game Events) sont de simples mots-clés qui
sont envoyés dans un message du type GameEventMessage lorsqu’un certain événement se produit.
Ils représentent une action telle que ’Entre dans la salle’.
Tick message A chaque frame, le message ’Tick’ est envoyé par le Game Manager.
L’utilisation d’un message à chaque tour de boucle permet de ne pas mettre à jour tous les
acteurs. En effet, ceux-ci peuvent être nombreux et certains sont statiques et donc n’ont pas besoin
d’être modifiés, ou bien attendent un événement spécifique et asynchrone. Ainsi, seuls les acteurs
qui se sont enregistrés à ce message se mettent à jour à chaque frame.
Fig. 5.5 – Game Messages
5.3.5
Créer une simulation avec GameStart
Le Game Manager fournit un point d’entrée pour les applications : GameStart.
GameStart est un exécutable qui sert à lancer des applications, sans avoir à compiler un
exécutable. Ainsi notre application est sous la forme d’une bibliothèque dynamique qui contient
les classes des acteurs, proxies et composants. Elle possède aussi un point d’entrée (classe héritant
de GameEntryPoint), qui sert à charger l’application par le GameStart.
GameEntryPoint permet de créer le Game Manager automatiquement. Il permet ensuite de
créer tous les composants, de charger la map et d’effectuer toutes les tâches préliminaires que l’on
veut, avant de commencer la simulation.
Chapitre 6
Wiimote
6.1
Présentation
La Wiimote est la « manette » de la console de jeu Wii de Nintendo, sortie en décembre 2006.
Contrairement aux manettes de jeu classiques, elle a la particularité de posséder des accéléromètres
qui permettent de connaître les mouvements effectués par l’utilisateur. Elle dispose également d’un
récepteur Infra-Rouge qui permet à la wiimote de se repérer dans l’espace, en fonction de « spots »
émis par une barre munie de plusieurs diodes IR. De plus, la Wiimote est sans-fil et utilise le
protocole Bluetooth pour communiquer avec la console.
La Wiimote dispose de plusieurs accessoires dont le « Nunchuk », qui est un joystick possédant 2 boutons, il est également munis d’accéléromètres. Nous utiliserons le Nunchuk dans notre
implémentation.
Notons également qu’un des gros avantages de ce périphérique est son prix. En effet, une Wiimote
coûte 40 e et un Nunchuk 20 e ce qui est peu comparé aux prix d’autres périphériques ayant
moins de possibilités.
6.2
Driver
Comme nous l’avons dit, une Wiimote utilise un protocole de communication standard, ce qui
fait que de nombreux programmeurs se sont mis à programmer des drivers pour utiliser la Wiimote
avec un ordinateur équipé en Bluetooth. On trouve donc sur internet de nombreux drivers, à la
qualité et aux fonctionnalités variables pour n’importe quel OS (Linux, Mac OS X, Windows).
Dans le cadre de notre projet, nous travaillons sous Linux, et avons donc choisit comme base
de travail le driver Linux qui nous semblait le plus complet. Ce driver est bien entendu écrit
en langage C. Il nous donne facilement accès à la mémoire de la Wiimote et permet de récupérer
l’état des différents boutons de la télécommande ainsi que les valeurs des accéléromètres. Il permet
également d’utiliser le haut-parleur intégré et la fonction de vibration.
6.3
Intégration à Delta3D
Delta3D utilise une architecture orienté objet et est écrit en C++, nous avons donc écrit une
classe en C++, qui sert d’interface entre le driver de la Wiimote et Delta3D.
17
CHAPITRE 6. WIIMOTE
18
Nous avons donc un objet de type « Wiimote » qui permet de récupérer n’importe quel paramètre
de la Wiimote directement en C++. Il permet également d’envoyer diverses informations à la
Wiimote (allumage d’une LED, activation des vibrations, etc...). Notons également que notre
architecture permet de connecter jusqu’à 4 Wiimote à la même machine.
6.4
Utilisation
La Wiimote est utilisé dans Delta3D au niveau de notre InputComponent et l’intégration dans
le code est semblable à celle d’un joystick, ou de n’importe quel autre périphérique d’entrée.
Nous n’avons pas eu de problème d’utilisation de la Wiimote dans Delta3D. Nous avons cependant rencontré un problème de gestion de mémoire qui faisait planter l’application à certaines
occasions. Après vérifications, le problème ne semble pas venir du driver de la Wiimote, et il semble
que nous soyons tombé sur un problème de gestion de la mémoire dans Delta3D, étant donné qu’il
n’est pas réaliste de débugger Delta, nous nous sommes contentés d’allouer plus de mémoire au
driver, que ce qui lui est normalement nécessaire. Cette solution est évidemment peu élégante mais
elle résout le problème.
Fig. 6.1 – Wiimote et Nunchuk
Chapitre 7
Application de test
7.1
Introduction et but
Le but de cette partie est de créer un module externe contenant un acteur contrôlé grâce à une
Wiimote. Ce type d’acteur sera intégré dans les applications de la salle immersive du CSTB. La
seule information connue est que ces applications utilisent un Game Manager. Pour tester cette
intégration au cours de l’élaboration du module, une application de test a été créée, celle-ci étant
également basée sur un Game Manager. Cela permet de tester notre module dans une application
et de tester son intégration.
7.2
Fonctionnalités
L’application de test est minimale et ne propose qu’un nombre restreint de fonctionnalités. Elle
sert seulement à vérifier que notre bibliothèque peut être ajoutée de manière transparente à une
application existante.
Map Nous avons créé une map très simple représentant une petite ville avec quelques immeubles,
un environnement (le ciel) et un terrain plat basique. Nous avons également placé dans cette map
un GameActor tout simple, contrôlé au clavier.
Tout cela est réalisé grâce à l’éditeur STAGE.
Caméra, MotionModels On veut pouvoir changer de MotionModel de manière dynamique,
afin de changer le comportement de la caméra : Orbit, Walk, Fly, FPS, Collision, etc... Notre
navigation (au clavier) permet de déplacer la caméra comme l’on veut. Il est important de vérifier
que cela n’interfère pas avec nos acteurs externes. En effet, l’utilisation d’une même touche pour
des actions différentes peut entraîner des conflits, de même pour la gestion de la caméra, qui ne
peut pas aller dans 2 directions différentes en même temps.
Acteurs Nous avons un acteur « figurant » dans la map juste pour tester que cela ne pose pas
de problèmes avec nos acteurs, ainsi qu’un terrain qui entoure la ville.
Un GameActor (un tank) est également présent : ses déplacements sont contrôlés avec les
touches du clavier. Les mouvements prennent en compte l’inertie de l’engin, avec une accélération
et un freinage poussifs. Son déplacement entraîne un jet de poussières, créé par un système de
particules. Il possède ses propres propriétés de vitesse et vitesse de rotation.
La ville elle-même est représentée en tant que GameActor. Même si elle ne possède pas de
comportements proprement dits, elle est réceptive à un événement/message "Tsunami" (la ville
"s’incline", renversant le tank ...). Elle possède la propriété booléenne pour savoir si un tsunami
est en train de passer.
19
20
CHAPITRE 7. APPLICATION DE TEST
Déplacements du tank et collisions Les déplacements de l’acteur tank dans la ville sont
gérés de façon qu’il reste au niveau le plus bas. Cela suffit pour l’application de test, dont le
but n’est pas de recréer des situations complexes, même si cela peut être utile pour chercher des
fonctionnalités que peuvent apporter la wiimote. La map ne possédant qu’un seul niveau (celui
de la ville), l’acteur se déplace soit sur le sol, soit sur le toit. Le fait qu’il n’y ait pas de niveaux
inférieurs a l’avantage de ne pas gêner les mouvements.
Les collisions ne sont gérées qu’en mode de déplacement CollisionMotionModel : les acteurs
ont une zone de collision de type maillage, ce qui permet un contact plus réaliste. Ainsi, dans ce
mode, la caméra ne peut traverser les murs et le tank... Par contre, les collisions entre le tank et
les murs ne sont pas gérées de facon réalistes : le tank se retrouve sur le toit ... La raison est que
nous effectuons les déplacements du tank à la main et ne stoppons pas le tank en cas de contact.
Chaque acteur possède son proxy, qui permet d’avoir accès et de modifier ses propriétés initiales
dans l’éditeur STAGE.
InputComponent Ce composant permet d’effectuer des actions globales, comme metre en
marche / arrêter le tank, le mettre en mode turbo. Elles sont effectuées lors des événements
clavier correspondants (appui sur certaines touches).
Il permet également d’augmenter/diminuer la vitesse de la simulation. C’est-à-dire que les
messages ’TICK’ sont envoyés avec une fréquence plus ou moins grande.
Point d’entrée (GameEntryPoint) Le point d’entrée crée les MotionModels, crée et enregistre l’InputComponent dans le GameManager, charge la map et les acteurs (plus précisément
leus proxies) présents, place la caméra afin d’avoir une vue globale de la ville.
Fig. 7.1 – Aperçu de l’application de test
Chapitre 8
Acteurs externes à l’application
Nous avons écrit deux modules externes.
Le premier permet de contrôler les acteurs au clavier, il nous a servi pour effectuer les premiers
tests d’intégration de notre bibliothèque à l’application, alors que l’intégration de la wiimote n’était
pas encore finalisée.
Le fait de concevoir une architecture indépendante de la wiimote et de son driver a d’autres
avantages.
Même si l’équipe n’est que de 2 personnes, il faudrait au moins 2 wiimotes chacun pour tester
les intéractions entre acteurs. Or nous n’avions pas assez de périphériques.
Un autre avantage est de se séparer les tâches : pendant que l’un s’occupe de la wiimote et de
son intégration, l’autre se concentre sur l’organisation du programme et des messages.
Le second permet de contrôler les acteurs via une wiimote.
Les modifications par rapport au module sans wiimote concernent l’intégration de la wiimote
dans le code et la gestion des événements du périphérique, que ce soit à la réception d’un message
particulier, ou pour envoyer un message.
Ce module a l’avantage de tester les intéractions entre plusieurs acteurs à l’aide de plusieurs
wiimotes. C’est ce module qui sera intégré et testé au CSTB.
Emulation de la wiimote Il est possible de simuler les déplacements plusieurs wiimotes avec
un clavier, en assignant différentes touches pour chaque acteur. Cela a été fait dans le module sans
wiimote, en ajoutant une propriété "Numéro" aux acteurs : ceux-ci réagissent à certaines touches
en fonction de leur numéro (OLKM pour le 1, YHGJ pour le 2).
Mais il n’est pas possible de vérifier le bon traitement des messages par chaque acteur, qui peut
les interpréter différemment selon son état et la cible du message. De même, la wiimote possède
certaines fonctionnalités qui le clavier n’a pas (voir le chapitre Wiimote).
8.1
Fonctionnalités
Nos modules permettent de créer des « GameMeshActor » (maillage représentant un personnage). Ils permettent également des déplacer ces acteurs et de les faire interagir à l’aide de messages.
Tout sela est fait avec la wiimote, ou émulé au clavier.
Composant externe Nous utilisons un composant personnalisé pour gérer tous les acteurs
externes : il possède la liste de tous leurs proxies et a donc également accès aux wiimotes. Un de
ses rôles est de mettre à jour l’état de chaque wiimote.
21
22
CHAPITRE 8. ACTEURS EXTERNES À L’APPLICATION
Communication entre acteurs Le composant possède une fonction utilitaire qui permet de
connaître l’acteur visible le plus proche d’un autre. Cela leur permet de s’envoyer des messages du
type « Bonjour ». On ne veut évidemment pas que ce genre de message soit envoyé à des acteurs
éloignés.
Ainsi chaque acteur possède la propriété « ChampDeVision », qui représente la distance maximale laquelle il peut "voir" les autres acteurs.
Le message "bonjour" reçu par l’acteur le plus proche est caractérisé par la vibration de sa
wiimote.
Acteur principal Le premier de nos acteurs a être instancié est dit acteur « principal « . En plus
de ses fonctionnalités de base, il peut également quitter l’application ou bien envoyer un message
à tout les autres acteurs du même type. Par exemple, nous avons écrit un message qui fait tomber
tout les acteurs externes présents dans la scène.
Vue à la troisième personne Enfin, chacun de nos acteurs peut verrouiller la caméra sur lui
(vue à la troisième personne). Cela est réalisé à l’aide d’un Tripod qui permet d’attacher la caméra
à un objet quelconque. Chaque acteur possède son Tripod, qu’il active ou non.
8.2
Traitement des Messages et événements
Message « Bonjour » d’un acteur vers son plus proche voisin.
Lorsque l’utilisateur appuie sur le bouton correspondant de la wiimote, l’acteur associé demande au composant quel est son plus proche voisin. Il le met en tant que cible du message
(SetAboutActorId). Il faut noter que le message sera envoyé à tous les acteurs, même s’ils n’en
sont pas la "cible". La différenciation se fait lors de la réception du message : si l’acteur est la
cible, il fait vibrer sa wiimote. Sinon, il ne fait rien.
Message « Chute » lancé par l’acteur principal à tous les acteurs y compris lui-même. Le
message est envoyé lorsque cet acteur appuie sur le bouton approprié. C’est en fait au niveau
du component qui le message est envoyé : en effet, il regarde l’état de la wiimote du premier
acteur enregisté dans sa liste, qui correspond à l’acteur principal. Tous les acteurs qui recoivent
ce message tombent (leur maillage est renversé au sol).
Message « Lock » L’acteur émetteur se met en tant que cible dans le message, qui est envoyé
à tous les acteurs, y compris lui-même. Lorsqu’un acteur reçoit ce message : s’il en est la cible, il
active son Tripod (qui l’attache à la caméra). Sinon, il le désactive (il se lie à une caméra "nulle").
Message « UnLock » Il n’y a pas de message pour désactiver son Tripod. Mais il est possible de
désactiver tous les Tripods afin de revenir au mouvement de la caméra par défaut. Cela s’effectue
avec le même message "Lock", en ne spécifiant aucun acteur comme étant la cible du message.
Ainsi, chacun désactive son tripod. Le message est envoyé lorsqu’un des acteurs appuie sur le
bouton correspondant.
Quitter l’application envoyé par l’acteur principal à l’application. Aucun message n’est utilisé :
l’acteur demande à l’application du GameManager de s’arrêter.
Déplacements Pour pouvoir se déplacer, tous les acteurs reçoivent le message « Tick Local »à
chaque frame. A la réception de ce message, les acteurs doivent recalculer leurs positions. Les
déplacements utilisés sont basiques : avancer, reculer, tourner à droite ou à gauche. Ces événements
sont gérés avec le joystick de la wiimote.
Chapitre 9
Intégration des acteurs externes
9.1
Principe
Nos acteurs sont intégrés à l’application (au GameManager) via l’éditeur STAGE qui se charge
d’éditer le fichier XML de la map. Il suffit d’importer notre bibliothèque dans STAGE au préalable.
La map sera chargée au lancement de l’application.
On peux également éditer le fichier XML à la main, mais sa structure étant assez complexe, il
est préférable de laisser STAGE faire cela !
9.2
Intégration du composant
utilité Nous utilisons également un « Component »qui est chargé de mettre à jour la ou les
wiimotes connectées (une par acteur). Il permet également de gérer les actions globales des acteurs.
Dans le cadre d’une intégration d’acteurs qui possèdent des comportements complexes ou
utilisent des ressources externes, ou si l’on veut rajouter de nouvelles fonctionnalités à l’application,
le fait de pouvoir intégrer un composant devient préférable voire nécessaire.
approche originale Notons que notre approche est assez différente de ce qui se fait normalement, en effet Delta3D n’est pas vraiment conçu pour reçevoir un acteur sous cette forme de
« plug-in »que nous avons réalisé. Il a donc fallut faire un certain nombre d’arrangements pour
pouvoir intégrer notre composant dans l’application, plus précisément dans le Game Manager.
Normalement, un composant doit être créé dans l’EntryPoint du Game Manager. Or, comme
nous l’avons dit, nous n’avons pas accès au GameManager qui est dans le code de l’application et
nous nous refusons donc d’y toucher.
Nous avons donc créé un composant qui est intégré dans l’appli par un de nos acteur (en fait,
par son proxy). Le proxy est chargé d’instancier le composant et de le lier au Game Manager. Il
connait celui-ci car il fait partie de la map utilisée.
Comme il peut y avoir plusieurs acteurs et donc plusieurs proxies, mais un seul composant,
nous avons appliqué le design pattern « Singleton »pour notre composant afin qu’il n’en existe
qu’une seule instance.
9.3
Contraintes, intéractions isolées
Acteurs externes et Scène Les acteurs externes peuvent communiquer entre eux dans la scène
de l’application.
Ils peuvent se lier à la caméra avec des MotionModels ou un Tripod. Mais ils ne peuvent pas
la déplacer "à la main" ...
23
24
CHAPITRE 9. INTÉGRATION DES ACTEURS EXTERNES
Acteurs externes et Messages internes De plus, ils ne sont pas réceptifs aux messages
internes à l’application.
Pour cela, il faudrait connaitre leurs propriétés, comme leur type, leur nom, leur description.
On pourrait donc avoir besoin d’accéder au code source de l’application interne, ou de disposer
de ces information dans un format générique et public : ce peut être un fichier XML, ou bien un
ensemble de propriétés des messages visibles dans l’éditeur STAGE.
Cela n’est pas géré par la version actuelle de Delta3D (1.4).
Sans cette approche, il n’est pas possible d’avoir des interactions entre acteurs externes et
internes.
Acteurs internes et Messages externes Delta3D n’est pas conçu pour intégrer des plugins. Il est possible de définir des messages externes, mais leur utilisation par les acteurs internes
nécessite de modifier le code pour y rajouter l’enregistrement à ce type de message et le traitement
à effectuer lors sa la réception. Cela est contraire à notre but, qui est d’intégrer des acteurs sans
toucher à l’application.
Fig. 9.1 – Aperçu de 2 acteurs externes ajoutés dans l’application
9.3. CONTRAINTES, INTÉRACTIONS ISOLÉES
Fig. 9.2 – Intégration de la librairie dans l’application
25
Quatrième partie
Résultats obtenus
Conclusion
Perspectives
26
Chapitre 10
Planning
Nous présentons ici une version résumée du planning que nous avons suivi. De plus, nous ne
couvrons ici que la période suivant la pré-soutenance.
Le planning complet ainsi que les plannings individuels sont en ligne à l’adresse suivante :
http://thx009.free.fr/TER/
Semaine du 9 au 15 Avril :
– Ajout de périphériques dans notre inventaire
– Installation de Delta3D
– Découverte de Delta3D et des logiciels associés
Semaine du 16 au 22 Avril :
– Amélioration de l’ergonomie du site web
– Etude des tutoriaux de Delta3D
– Discussion sur une première architecture pour notre implémentation
Semaine du 23 au 29 Avril :
– Première visite au CSTB : démonstration de leurs applications
– Essai avec les fonctionnalités réseau de Delta3D
– Création d’une première bibliothèque pour utiliser la Wiimote dans Delta3D
– Réalisation d’une première application de test complète
Semaine du 30 Avril au 6 Mai :
– Suite et fin de l’implémentation concernant la Wiimote
– Ajout d’interaction entre nos acteurs (envoi de messages)
– Perfectionnement de l’application de test
Semaine du 7 au 13 Mai :
– Ajout de fonctionnalités à nos acteurs (messages, caméra personnalisé)
– Le 10 Mai : Tests au CSTB : intégration de notre bibliothèque dans une application
– Rédaction du rapport
Du 14 au 16 Mai : Fin de la rédaction de notre rapport
27
Chapitre 11
Résultats obtenus
11.1
11.1.1
Tests d’intégration au CSTB
Contexte
Scène Des acteurs pilotés par des Wiimotes se déplacent et communiquent dans la ville de
Cannes et dans le futur campus STIC.
Premier test Sur un portable possédant la même configuration logicielle que la machine de la
salle immersive.
Linux Mandriva (32bit), Bluetooth non intégré
Second test Dans la salle immersive.
Linux Mandriva (64bit), Bluetooth non intégré
11.1.2
–
–
–
–
–
Déroulement des tests
Installation du driver et des utilitaires Bluetooth
Installation du driver de la wiimote
Test de notre application de démonstration
Ajout de plusieurs de nos acteurs dans une scène du CSTB
Lancement de l’application et tests
11.1.3
Complexité de l’intégration
Les tests sur le portable n’ont posé aucun problème.
Nous avons eu des problèmes dans la salle immersive. En effet, l’adaptateur Bluetooth USB
n’était pas reconnu.
Après plusieurs essais, nous nous sommes rendus compte que le problème était matériel. En
effet, la machine est dans une salle dédiée à l’écart de la salle immersive, ce qui fait qu’il n’est pas
possible de connecter le module Bluetooth directement sur la machine, car il serait hors de portée
de fonctionnement. Nous avons donc utilisé la rallonge USB sur laquelle sont branchés clavier,
joystick, etc... et celle-ci était apparemment au maximum de sa capacité, il a donc fallu utiliser
une autre rallonge.
L’intégration de notre bibliothèque dans l’application a été rapide et simple. Il a simplement
fallu éditer le fichier XML de configuration, pour y déclarer l’importation de notre bibliothèque,
ainsi que les paramètres nécessaires pour créer 2 acteurs.
28
11.2. BILAN
11.1.4
29
Lancement de l’application
Nous avons rajouté 2 acteurs contrôlés par une Wiimote dans la scène. Le déplacement de la
caméra globale étant effectué à l’aide du joystick. Il faut noter que nous avons rencontré quelques
problèmes de latence lorsque l’on déplace la caméra à l’aide du joystick, dans ce cas, les mouvements
des acteurs Wiimote sont décalés dans le temps. La cause de ce problème n’est pas très claire mais
il semble que cela soit du à un problème au niveau du driver de la Wiimote, qui ne gère pas assez
rapidement les événements Bluetooth dès que nous l’intégrons dans Delta3D.
Fig. 11.1 – Démonstration dans la salle immersive
11.2
11.2.1
Bilan
Concernant notre architecture
Nous avons comparé l’architecture utilisée au CSTB avec la nôtre. Celle-ci peut être améliorée
par l’utilisation de callback et en évitant d’effectuer trop de tâches dans le « TickLocal » de chaque
acteur (tick d’horloge, message recu à intervalle régulier).
Il peut être également utile de gérer tous les événements de la Wiimote uniquement dans un
composant, même ceux liés au déplacement de l’acteur. Son déplacement s’effectuerait par l’envoi
de messages du genre « Deplace-toi » à l’acteur concerné.
11.2.2
Déplacement des acteurs
Nous avons remarqués que notre gestion des collisions au niveau de nos acteurs n’était pas
adaptée pour toutes les scènes. En effet, nos acteurs marche sur le plan horizontal situé le plus
bas dans la map. Si cela ne pose pas de problème quand on se déplace par exemple dans les rues
de Cannes, cela est gênant lorsqu’on veut se déplacer à l’intérieur des bâtiments du campus STIC,
nos acteurs restent en effet toujours à l’étage le plus bas. Ce comportement devra bien sur être
corrigé.
De plus, la prise en main est difficile si l’on se déplace en même temps que la caméra principale.
Enfin, la vue à la troisième personne a posée des soucis, lorsque l’on rentre dans un bâtiment : la
caméra reste en dehors (la distance par rapport à l’acteur est fixe)
Chapitre 12
Conclusion
Pour conclure, nous pouvons dire qu’en ce qui concerne l’implémentation, nous sommes arrivés
au but fixé, c’est-à-dire créer un module qui puisse être ajouté facilement dans une application au
CSTB. Et nous avons réussi à intégrer des périphériques « exotiques »dans Delta3D.
Cela n’a pas été réalisé sans mal. En effet, nous n’avions aucune expérience avec Delta3D avec ce
TER, et il a donc fallu apprendre à maîtriser cette API qui est loin d’être simple. On peut en effet
noter que Delta3D est peu documenté et que la communauté d’utilisateurs est assez restreinte, il
est donc difficile d’obtenir de l’aide lorsque l’on ne comprend pas quelque chose. La seule vraie
source d’informations est le forum officiel de Delta3D qui n’est pas si actif que ça. De plus les
tutoriaux disponibles sur le site de Delta3D sont buggés ou plus à jour depuis longtemps, ce qui
constitue un frein de plus à l’apprentissage de son utilisation.
De plus nous n’avons appris le travail exact que nous devions réaliser que morceau par morceau,
ce qui a compliqué notre implémentation. Le module que nous avons développé n’est d’ailleurs
pas vraiment dans l’esprit de Delta3D qui n’est normalement pas fait pour fonctionner selon ce
principe.
En revanche, une fois passé cet apprentissage difficile, Delta3d apparaît comme étant d’une
grande flexibilité, en particulier l’aspect transmission de messages est très important et simple à
utiliser. Plus globalement, il n’y a en fait jamais beaucoup de code à écrire pour réaliser des choses
assez complexes, le plus dur étant de savoir par où commencer.
Ce projet nous a en tout cas permis de découvrir des technologies que nous ne connaissions pas
du tout. Cela s’est avéré être très intéressant pour nous. Nous comptons d’ailleurs poursuivre ce
travail lors d’un stage durant le mois du Juin.
Les objectifs que nous nous sommes fixés pour cette suite sont détaillés dans le chapitre suivant.
30
Chapitre 13
Travaux à poursuivre
Nous allons encore travailler sur ce projet durant le mois de Juin, voici donc les suites envisagées.
13.1
Couche réseau
Intérêt Nous voulions avoir la possibilité d’utiliser des fonctionnalités réseau dans Delta3D, afin
de pouvoir développer un acteur complet sur un ordinateur portable, et brancher directement cette
machine sur le réseau du CSTB. Cela nous permettrait de n’avoir aucune installation à effectuer
sur la machine du CSTB, comme c’est le cas actuellement. Par exemple, quelqu’un vient avec son
portable sur lequel il a tous les drivers nécessaires pour un périphérique donné et un acteur qui
utilise ce périphérique, il pourrait se connecter via le réseau a une application qui tourne déjà
au CSTB et y faire rentrer son acteur à n’importe quel moment. De plus l’ordinateur portable
pourrait afficher une vue différente de celle projetée sur l’écran principal, par exemple avoir une
vue centrée sur son personnage au lieu de la vue globale.
Une couche réseau existe plus ou moins dans Delta3D mais cela n’est pas finalisé. Pour le
moment cela reste encore de très bas niveau, avec gestion de paquets de données à la main. La
prochaine version de Delta devrait apporter tout un ensemble de classes pour la gestion du réseau,
avec possibilité de création de « NetworkComponent ». Etant donné qu’on ne sait pas quand cette
version de Delta3D sortira, cette partie est suspendue pour le moment.
13.2
Centrale inertielle
Nous voulions également utiliser une centrale inertielle (InterSense InertiaCube3) comme périphérique d’entrée. Delta3D propose une classe « Tracker » pour cela. Nous avons écrit un fragment
de code pour faire un test simple, ce code est théoriquement valide, mais nous n’avons pas pu le
tester, suite à des problèmes avec l’alimentation électrique de la centrale.
13.3
Gestaction
Nous aimerions au final pouvoir intégrer toute sorte de périphériques dans l’architecture du
CSTB. En plus de la Wiimote et de la centrale inertielle, nous pourrions par exemple intégrer le
gant interactif développé dans le cadre du projet « Gestaction » de l’équipe Rainbow.
31
CHAPITRE 13. TRAVAUX À POURSUIVRE
32
13.4
Fonctionnalités supplémentaires
– Contrôle de différents MotionModel par une wiimote, pour suppléer le joystick encombrant
et unique
– Gérer le zoom dans la vue à la 3ème personne
– Rejoindre un acteur, se transférer dans une zone de rassemblement (entrée du campus, Resto
U ...)
– Vue à la 3eme personne : rapprochement automatique de la caméra si l’acteur est caché par
un obstacle (difficile !)
– ...
13.5
Site web : Retour d’utilisateurs
Une fois la réalisation du site terminée, nous devions réaliser une publicité de ce site auprès des
communautés de logiciels de création 3D. Cela aurait permis de recueillir des commentaires d’un
grand nombre d’utilisateurs et ainsi de voir quels produits ont de bonnes performances, et surtout
de juger du rapport qualité/prix de ces produits, ce qui est très important compte tenu des tarifs
auxquels sont vendus la plupart de ces périphériques. Cela n’a pas été fait dans la mesure ou Mme
Lingrand nous a demandé de nous consacrer à notre implémentation, qui est la partie principale
du TER. Le site est donc entièrement fonctionnel et est prêt à être utilisé le moment venu.
Bibliographie
Site officiel de Delta3D : http://www.delta3d.org/
Site officiel de OpenSceneGraph : http://www.openscenegraph.com/
Documentation de l’API de Delta3D : http://www.delta3d.org/api/index.html
Site de vente en ligne de périphériques 3D : http://www.inition.co.uk
Sites de constructeurs de périphériques 3D :
http://www.isense.com/
http://www.ascension-tech.com/
http://www.polhemus.com/
http://www.3dconnexion.com/
http://www.immersion.com/
http://www.forcedimension.com/
http://www.sensable.com/
http://www.sensics.com/
Et bien d’autres.
Philippe Fuchs : Le traité de la réalité virtuelle - 2eme édition
D’autres liens sont disponibles ici : http://thx009.free.fr/TER/liens.html
33

Documents pareils