interaction d`un personnage virtuel 3d depuis un pocket pc vers un pc

Transcription

interaction d`un personnage virtuel 3d depuis un pocket pc vers un pc
INTERACTION D’UN PERSONNAGE VIRTUEL 3D DEPUIS
UN POCKET PC VERS UN PC
Projet de Semestre Eté 2002-2003 EPFL, I&C, VRlab
Développé par :
Pascal Porte
Professeur : D. Thalmann
Assistant : M. Gutiérrez
Table des Matières
1
2
3
4
5
6
7
8
INTRODUCTION .................................................................................................1
1.a
Description du Projet .....................................................................................1
1.b
A propos de ce Rapport..................................................................................1
1.c
Les Bases du Projet........................................................................................1
1.d
Logiciels et Outils utilisé pour ce Projet........................................................2
1.e
Déroulement du Projet ...................................................................................2
INTERFACE .........................................................................................................3
2.a
Description de l’Interface ..............................................................................3
2.b
Utilisation.......................................................................................................4
2.c
Problèmes Rencontré .....................................................................................5
ANIMATION ........................................................................................................6
3.a
Personnage Virtuel.........................................................................................6
3.b
Chargement des Animations ..........................................................................6
INTERACTION ....................................................................................................9
4.a
Réseau ............................................................................................................9
4.b
Protocole ........................................................................................................9
PERFORMANCES .............................................................................................11
5.a
Caractéristiques du PDA de Test .................................................................11
5.b
Analyse des Performances ...........................................................................11
CONCLUSION ...................................................................................................13
APPENDICE .......................................................................................................14
7.a
Network.h.....................................................................................................14
7.b
Primities.h ....................................................................................................15
7.c
Class Surface1App.......................................................................................16
7.d
Class Obj......................................................................................................18
REFERENCES ....................................................................................................19
1 INTRODUCTION
1.a Description du Projet
On assiste ces dernières années à la démocratisation des plates-formes
mobiles tel que téléphones et ordinateurs portables, Pockets PCs, … Plus
récemment encore, les réseaux sans fil ont fait leur apparition avec entre
autres les normes BlueTooth et WiFi. Concernant cette dernière, nous avons
vu ces derniers mois de plus en plus de bornes d’accès être installées à
l’EPFL dans le cadre du projet TSF [1].
C’est à partir de ce constat que ce projet a été défini. En effet il a pour but de
mettre en œuvre un système permettant l’interaction d’un personnage virtuel
3D depuis un Pocket PC vers un PC à travers un réseau. Il doit aussi être
possible de jouer des animations extraites depuis des fichiers BAP respectant
la norme MPEG-4 sur l’animation de personnage [2]. Il est aussi important
que l’application finale ait de bonnes performances. Il est à noter que
l’application sur PDA doit aussi pouvoir fonctionner sans être connecté à un
PC.
1.b A propos de ce Rapport
Deux personnes ont travaillé sur ce projet : Pascal Porte et Alexis Touon. Le
travail a été divisé en deux parties distinctes, à savoir la partie Pocket PC et la
partie PC. Concernant ce rapport, il ne fait état que du travail effectué sur le
PDA.
1.c Les Bases du Projet
L’assistant de ce projet, Mario Gutiérrez a, par le passé, fait un projet
similaire à celui-ci [3]. Il avait implémenté un lecteur d’animation MPEG-4
de personnage 3D pour Pocket PC. Mais il y avait plusieurs limitations. En
effet, il n’y avait pas d’interaction possible avec le personnage et il n’était
possible de faire jouer qu’une seul animation : Charleston. De plus les
performances étaient limitées puisque le modèle 3D était composé de 10'000
polygones. Le projet actuel a pour but d’améliorer tous ces points.
-1-
1.d Logiciels et Outils utilisé pour ce Projet
Pour ce projet, plusieurs outils ont été utilisés. Il a d’abord fallu choisir quelle
librairie allait être utilisée pour développer la partie 3D. Il y avait deux choix
possible, Diesel Engine [4] ou PocketGL [5]. C’est finalement Diesel Engine
qui a été choisie, d’une part parce que c’est ce qu’avait utilisé Mario
Gutiérrez dans son précédent projet, et d’autre part parce que la librairie
PocketGL est toujours en développement. De plus, Diesel Engine est un
« clone » de DirectX pour Pocket PC, ce qui permet de pouvoir gérer
aisément le stylet et les touches du PDA. Un autre avantage de cette librairie
est de pouvoir tester l’avancée de l’implémentation directement sur PC, ainsi
il n’est pas nécessaire de transférer le programme sur le PDA pour le tester.
Pour implémenter la partie réseau, c’est la librairie standard Winsock qui a
été choisie.
Pour les outils de développement, le logiciel Microsoft Visual C++ 7 a
largement été utilisé. Pour la compilation pour Windows CE [10] (système
d’exploitation des Pocket PC) et le transfert de l’application sur le PDA, le
logiciel Microsoft eMbedded Visual C++ 3.0 a été utilisé. Ce dernier dispose
d’un émulateur qui permet de tester les programmes pour Pocket PC sans
avoir à les transférer sur un vrai PDA. Malheureusement il n’a pas été
possible de l’utiliser, en effet il semblerait que la librairie Diesel Engine ait
quelques problèmes avec cet émulateur. Mais comme il était justement
possible de tester l’application sur PC, cela n’a pas posé de problèmes.
1.e Déroulement du Projet
Le but du projet étant de faire une interaction entre un PDA et un PC, c’est
l’interface réseau qui a été implémenté dans un premier temps avec la librairie
Winsock.
Ensuite la partie graphique a été implémentée avec la librairie Diesel Engine,
ce qui a permis de mettre en place l’environnement : la lampe, la caméra…
Après cela, c’est la création du modèle 3D du personnage qui a débuté. Il a
été décidé de faire un modèle simplifié du personnage afin de privilégier les
performances. Chaque partie du corps a une forme de prisme, ce qui diminue
considérablement le nombre de polygones par rapport à un modèle réaliste.
Une fois le modèle 3D terminé, c’est l’interaction qui a été implémentée. Il a
donc fallu interfacer le moteur graphique avec les entrées telles que le stylet
et les boutons du PDA.
Enfin, c’est la lecture d’animation qui a été rajoutée à l’application. Cela
permet à la personne qui utilise le PDA de faire jouer au personnage une des
animations disponible dessus.
-2-
2 INTERFACE
2.a Description de l’Interface
Vous pouvez voir sur l’image suivante à quoi ressemble l’interface
graphique :
On peut remarquer plusieurs choses sur l’image précédente. La première,
c’est la simplicité du modèle. Comme il a déjà été dit, cette simplicité est
voulue.
Il est possible de sélectionner une partie du corps pour pouvoir interagir avec.
Lorsqu’une partie du corps est sélectionnée, celle-ci apparaît en jaune.
Dans le coin en haut à gauche, on aperçoit des informations textuelles. La
première ligne indique la vitesse d’affichage en images par seconde, la
deuxième ligne indique le nom du membre sélectionné et enfin la dernière
indique l’animation sélectionnée.
-3-
2.b Utilisation
L’utilisateur a plusieurs moyens pour utiliser l’application, un stylet est bien
sûr à sa disposition, mais il a aussi la possibilité d’utiliser les boutons du
PDA. Voici une image tirée de l’aide de Diesel Engine référençant les
différents boutons utilisables sur un Pocket PC.
On peut remarquer que tous les boutons ne sont pas utilisables.
Voici les fonctions assignées aux différentes combinaisons d’entrées :
o Stylet : l’utilisation du stylet permet à l’utilisateur de faire tourner le
membre sélectionné suivant ses axes x et y,
o DIK_DEVICE0 + Stylet : permet d’interagir avec le personnage en
faisant tourner le membre sélectionné le long de son axe z,
o DIK_DEVICE1 + Stylet : cette combinaison permet de déplacer la
caméra autour du sujet,
o DIK_DEVICE2
: ce bouton permet de quitter l’application,
o DIK_UP
: permet de sélectionner l’élément suivant,
o DIK_DOWN
: permet de sélectionner l’élément précédent,
o DIK _LEFT
: ce bouton sélectionne l’animation précédente,
o DIK_RIGHT
: celui-ci sélectionne l’animation suivante,
o DIK_RETURN
: arrête ou démarre l’animation sélectionnée.
-4-
2.c Problèmes Rencontré
La méthode utilisée pour mettre à jour les angles de l’articulation sélectionnée
en fonction des mouvements du stylet utilise une méthode de la libraire
Diesel Engine. Cette méthode permet de connaître les déplacements du stylet
d’une image à une autre. L’utilisation de cette méthode a apporté quelques
problèmes qu’il a fallu corriger. En effet, quand le stylet était utilisé à un
endroit de l’écran du PDA, des problèmes apparaissaient lorsque le stylet était
levé de l’écran puis réutilisé à un autre endroit de l’écran. Ces problèmes se
manifestaient sous forme de « sauts » durant la rotation du membre
sélectionné. Ce bogue vient du fait que, contrairement à ce que l’on aurait pu
penser, le mouvement du stylet n’est pas nul lorsque celui-ci est déplacé d’un
endroit à un autre de l’écran en étant soulevé. Plus le déplacement du stylet
était grand, plus les valeurs renvoyées pour le déplacement du stylet étaient
grandes et donc en une seule image, l’élément sélectionné était tourné d’un
grand angle ce qui donnait une impression de saut.
Une fois la source du problème trouvée, il fut simple de le résoudre, il a
simplement suffit d’ignorer la première valeur de déplacement du stylet
quand on posait celui-ci sur l’écran, ce qui permet maintenant d’avoir un
fonctionnement normal quelque soit l’utilisation du stylet…
-5-
3 ANIMATION
3.a Personnage Virtuel
Pour des raisons de performance, le modèle du personnage a été adapté. Il est
constitué de 16 parties cubiques: tête, torse, ventre, bassin, bras gauche/droit,
avant bras gauche/droit, main gauche/droite, cuisse gauche/droite, mollet
gauche/droit et enfin pied gauche/droit. Il est possible avec le Diesel Engine
de créer des hiérarchies. Cette possibilité a été utilisée pour constituer le
personnage, chaque partie du corps étant liée avec son parent, sauf le bassin
qui constitue le sommet de la hiérarchie.
Pour les articulations, le centre de gravité des différentes parties a été déplacé
à l’endroit où se trouve le joint avec son parent supérieur. Ainsi, pour
modifier la disposition d’un membre, il suffit juste de modifier son angle de
rotation par rapport à l’angle d’origine. Par exemple, pour le bras, son centre
de gravité a été déplacé au niveau de l’épaule. Ses mouvements de rotations
auront donc pour centre l’articulation de l’épaule.
3.b Chargement des Animations
Une fois l’application lancée, il est possible d’animer le personnage suivant
plusieurs animations pré-enregistrées. Plusieurs animations sont disponibles,
celles-ci sont chargées lorsque le programme démarre. Lors du chargement,
l’application lit les fichiers BAP (Body Animation Parameters) de ces
animations. Ces fichiers d’animations respectent la norme MPEG-4
concernant l’animation de personnage. Un fichier BAP contient les
informations des angles de chaque articulation au cours de l’animation. Il est
ainsi possible d’animer un personnage ayant jusqu’à 296 paramètres. La
majorité des articulations ont 3 paramètres pour leur mouvement, certaines en
ont moins car elles ne peuvent pas s’orienter suivant tout les axes, c’est le cas
par exemple du coude, qui ne peut tourner que suivant un axe.
Un fichier BAP a la structure suivante : chaque image de l’animation est
décrite par deux lignes, la première ligne est un masque, elle est constituée de
0 ou de 1 pour chacun des 296 paramètres. Un 0 signifie que l’angle
concernant ce paramètre est à sa valeur par défaut. Un 1 signifie que, au
contraire, l’angle concernant le paramètre n’a pas la valeur par défaut. Pour
connaître cette valeur, il faut alors aller à la ligne suivante. En effet, cette
ligne contient des valeurs entières qui correspondent aux paramètres qui
avaient un 1 dans le masque.
Dans le masque, l’ordre des paramètres est défini dans la norme. Dans la
deuxième ligne, l’ordre des valeurs entières suit l’ordre d’apparition des 1
dans le masque.
-6-
La transformation des valeurs entières en radians se fait selon la formule
suivante :
angleEnRadian = valeurEntière * π / 100000
Voici un exemple d’un fichier BAP décrivant l’animation ayant une durée
d’une image et contenant de 5 paramètres :
1 1 0 1 0
1542 1542 -3483
Concernant le chargement de l’animation en mémoire après la lecture du
fichier BAP, l’animation est stockée sous forme de tableau à deux
dimensions, avec une ligne pour chaque image et une colonne pour chaque
angle. Afin d’économiser la mémoire, il n’y a que les paramètres
correspondant aux membres du modèle simplifié qui ont été gardé, soit 37
paramètres sur les 296. Les valeurs entières concernant les angles des
paramètres du fichier BAP sont directement transformées en radians durant le
chargement. La valeur par défaut pour les paramètres dont le masque vaut 0
est 0. L’image suivante représente la posture que prend le personnage virtuel
quand ses membres ont leur orientation par défaut :
Lorsque l’application joue une animation, à chaque image, les valeurs des
angles des joints sont mises à jour à l’aide du tableau cité plus haut.
-7-
Plusieurs choix d’animations à jouer sont disponibles. Lors de
l’implémentation, une classe a été créée pour les animations. Ainsi chacune
des animations est un objet, il n’est pas difficile d’en rajouter, il suffit
simplement d’en créer un nouveau pour la nouvelle animation. Il faut alors
spécifier quel est le fichier BAP, le nombre d’images que comporte
l’animation ainsi que son nom.
-8-
4 INTERACTION
4.a Réseau
L’interaction ne se fait que dans un sens, en effet, il est possible en utilisant le
PDA de faire bouger le personnage virtuel sur un PC mais on ne peut faire
bouger le personnage du PDA depuis un PC. On peut dire que le Pocket PC
agit comme une télécommande. L’application a le rôle de client, tandis que le
PC aura celui de serveur.
Quelques difficultés on été rencontrées lors de l’implémentation de la partie
réseau. En premier lieu, c’est la librairie Winsock2 qui avait été utilisé.
Comme les tests se faisaient sur PC, cela ne posait aucun problème.
Cependant, des problèmes sont apparus lorsqu’il a fallu utiliser le réseau sur
le PDA. En effet, la librairie Winsock2 n’est pas disponible sur Pocket PC.
Seul la librairie Winsock permet d’accéder aux ressources réseau. Ces deux
librairies étant assez proches, il n’a pas été difficile de modifier le code
existant pour le rendre compatible avec Winsock.
Il est possible de connecter un Pocket PC à un réseau soit en utilisant une
carte réseau, soit en le branchant à un PC via un câble USB. Pour la dernière
possibilité, il faudra que le logiciel de synchronisation Miscrosoft ActiveSync
soit installé, c’est ce dernier qui fera la liaison entre le PDA et le réseau
auquel est branché le PC.
Pour que le PDA connaisse l’adresse du serveur auquel il doit se connecter
pour pouvoir interagir sur le personnage virtuel, un fichier ip.txt a été créé sur
le PDA. Dans ce fichier est écrit l’adresse IP du serveur ainsi que le port de
connexion. De cette manière, si l’adresse du serveur venait à changer, il
suffirait d’éditer ce fichier pour que le programme puisse retrouver le serveur.
4.b Protocole
Pour interagir avec le personnage virtuel depuis le PDA sur le PC, il a fallu
créer un protocole pour transférer les informations du mouvement. Les
messages de ce protocole sont de cette forme :
Num_Joint X Y Z
ou
16 angleA angleB
où Num_Joint représente un numéro entre 0 à 16 inclus. Les valeurs entre 0
et 15 représentent les différentes parties du corps. La valeur 16 indique la
caméra.
Les valeurs X, Y, Z, angleA et angleB sont en radians ; pour les joints, ils
représentent les valeurs des angle pour les axes x, y et z et pour la caméra ils
-9-
représentent les angles coordonnées polaires pour sa position. Voici la table
de correspondance entre les valeurs de Num_Joint et les parties du corps :
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Tête
Torse
Ventre
Bassin
Bras Droit
Bras Gauche
Avant Bras Droit
Avant Bras Gauche
Main Droite
Main Gauche
Jambe Gauche
Jambe Droite
Mollet Gauche
Mollet Droite
Pied Droit
Pied Gauche
Voici un exemple de message envoyé :
12 2.4567 0.4556 0.0000
Durant une interaction, un message comme celui-ci est envoyé à chaque
image à travers le réseau.
Il faut noter que les messages envoyés ne respectent pas la spécification
MPEG-4 concernant l’animation de personnage. Il en a été décidé ainsi parce
que durant l’interaction, il n’est possible de bouger qu’un membre du corps à
la fois, il est alors inutile d’envoyer, comme le ferait la norme MPEG-4, des
informations concernant toutes les autres parties du corps si elles sont
identiques à l’image précédente.
- 10 -
5 PERFORMANCES
5.a Caractéristiques du PDA de Test
L’application a été testée sur deux modèles de Pocket PC différents. Pour le
premier, il s’agit de l’iPaq 3850 de marque Compaq dont voici les principales
caractéristiques [8] :
Processeur :
Mémoire :
Affichage :
Intel StrongARM à 206 MHz
64 MB RAM, 32 MB ROM
Ecran TFT, 240 x 320, 64K couleurs
Voici les caractéristiques du deuxième modèle, un iPaq 3950 de la même
marque [9] :
Processeur :
Mémoire :
Affichage :
Intel XScale à 400 MHz
64 MB RAM, 48 MB ROM
Ecran TFT, 240 x 320, 64K couleurs
5.b Analyse des Performances
Voici les performances en terme d’images par secondes qui ont été relevées
pendant les tests sur l’iPaq 3850 :
o Aucune interaction ni animation : ~17.8 fps
o Interaction
o réseau RJ45 : ~15.9 fps
o réseau USB : ~15.9 fps
o pas de réseau : ~16.2 fps
o Animation : ~16.8 fps
Et sur le 3950 :
o Aucune interaction ni animation : ~27 fps
o Interaction
o réseau RJ45 : ~21.1 fps
o réseau USB : ~20.7 fps
o pas de réseau : ~22.6 fps
o Animation : ~24.6 fps
- 11 -
Nous avons été surpris de voir que les performances étaient meilleures sur le
deuxième Pocket PC. Il s’agit certes d’un modèle plus récent et plus puissant
mais en ayant parcouru quelques sites sur internet [11], les performances pour
la librairie PocketGL étaient bien meilleures sur les processeurs de type
StrongARM que sur ceux de type XScale. Peut-être que cette librairie n’est
pas optimisée pour ces derniers processeurs. Cela permet de montrer que le
choix de la librairie Diesel Engine était un bon choix.
On peut constater que la différence de performances est plus importante sur le
deuxième PDA. Sur le premier modèle, l’écart maximal est de l’ordre de 11%
alors que sur le deuxième modèle, elle est de 23%.
Au final, on arrive à des performances qui varient entre 18 et 16 fps sur un
modèle et entre 27 et 20.7 fps sur l’autre, ce qui est suffisant pour une
application de ce type sur Pocket PC. Il peut toutefois paraître surprenant
d’avoir de si « faible » taux de rafraîchissement, avec des processeurs
respectivement à 200 et 400 MHz. Mais il ne faut pas oublier que ces
processeurs ne disposent pas d’unité spécifique pour le calcul de nombres à
virgules flottantes. Or, se sont ces calculs qui sont le plus utilisés dans les
applications 3D.
- 12 -
6 CONCLUSION
Ce projet a permis de rassembler plusieurs fonctionnalités, à savoir
l’interaction avec un personnage 3D, cette interaction étant ou non transféré à
un PC via le réseau afin d’y mettre à jour en temps réel un autre personnage
tournant sur une application du même type. Il est aussi possible dans la même
application de faire jouer au personnage différentes animations.
Bien évidement l’application finale n’est pas parfaite. Beaucoup
d’améliorations peuvent être encore faites sur beaucoup d’aspects :
o Il est pensable qu’un gain de performances pourrait être apporté en
optimisant le code. Ces gains permettraient d’avoir un modèle 3D
moins simpliste, il serait alors possible d’avoir un personnage avec
plus d’articulations, plus de détails dans le maillage 3D ou encore un
personnage texturé.
o L’interface graphique pourrait être améliorée afin de la rendre plus
intuitive pour les utilisateurs. Cela pourrait se faire par la création de
menus et de boutons. De tels ajouts permettraient par la même
occasion de réduire la taille de l’affichage 3D ce qui pourrait
augmenter légèrement la rapidité de l’application.
o Concernant la partie réseau, il serait aussi possible par la suite
d’implémenter une interaction dans l’autre sens, du PC au PDA.
o Une autre fonctionnalité pourrait être rajouté à ce projet, celle de faire
jouer une animation en même temps sur le PDA et sur le PC. Une des
difficultés étant de synchroniser l’animation entre les deux machines.
La différence de puissance entre un PC et un PDA étant énorme, il est
clair que le PC jouerait l’animation beaucoup plus rapidement que le
Pocket PC si des dispositions n’étaient pas prises pour empêcher cela.
On peut imaginer dans un futur proche, avec la montée en puissance des
Pocket PC, voir apparaître des jeux en 3D avec lesquels il serait possible de
jouer en réseau. Cela pourrait d’ailleurs faire le sujet d’un autre projet de
semestre : créer un jeu simple en 3D, à la manière de Doom par exemple, qui
permettrait à des personnes muni d’un Pocket PC de s’affronter en réseau.
- 13 -
7 APPENDICE
Dans cet appendice se trouve une brève description des classes et des fichiers
créés durant ce projet.
7.a Network.h
Ce ficher regroupe toutes les functions qui permettent d’utilisé le réseaux.
- void initSock();
Initialise un socket.
- SOCKET createSocket();
Créé un Socket.
- void assignPort(SOCKET s, int port);
Assigne le port port au socket s.
- void listen(SOCKET s);
Ecoute sur le socket s. Côté serveur.
- int connect(SOCKET s, char *adress, int port);
Se connecte sur le port port de la machine ayant l’adresse adress avec
le socket s. Côté client.
- SOCKET acceptConnexion(SOCKET s);
Accepte la connexion sur le socket s. Côté serveur.
- void write(SOCKET s, char *string);
Ecrire la chaîne de caractère string sur le socket s.
- int read(SOCKET s, char *buffer);
- void close(SOCKET s);
Ferme le socket s.
- 14 -
7.b Primities.h
Ce fichier regroupe des fonctions utilisées lors de la création de la géométrie
des différentes parties du personnage durant l’initialisation.
-
CDiesel3DVertexBuffer * CreateBoxTriangle(
-
CDiesel3DVertexBuffer * CreateHead( float fXCentre,
float fYCentre,
float fZCentre );
-
CDiesel3DVertexBuffer * CreateTorso(
float fXCentre,
float fYCentre,
float fZCentre );
-
CDiesel3DVertexBuffer * CreatePelvis(
float fXCentre,
float fYCentre,
float fZCentre );
-
CDiesel3DVertexBuffer * CreateUpLeg( float fXCentre,
float fYCentre,
float fZCentre );
-
CDiesel3DVertexBuffer * CreateLowLeg( float fXCentre,
float fYCentre,
float fZCentre );
-
CDiesel3DVertexBuffer * CreateBoxLine( float fXSize,
float fYSize,
float fZSize );
-
CDiesel3DVertexBuffer * CreateLowArm( float fXCentre,
float fYCentre,
float fZCentre );
-
CDiesel3DVertexBuffer * CreateUpArm(
-
CDiesel3DVertexBuffer * CreateHand(
-
CDiesel3DVertexBuffer * CreateFoot( float fXCentre,
float fYCentre,
float fZCentre );
- 15 -
float fXCentre,
float fYCentre,
float fZCentre );
float fXCentre,
float fYCentre,
float fZCentre );
float fXCentre,
float fYCentre,
float fZCentre );
7.c Class Surface1App
Class principale de l’application. C’est celle-ci qui gère l’animation,
l’interaction, la 3D, etc.
public:
-
SOCKET test;
char buffer[BUFFER_SIZE];
int port;
char adress[50];
int connexionError;
Différentes variables utilisé pour le réseau.
-
Obj charleston;
Obj walk;
Obj blast;
Obj boy;
Objets créés pour les animations.
-
CSurface1App();
virtual ~CSurface1App();
Construction et destruction.
-
void OnFlip();
Méthode de mise à jour.
-
DE_RETVAL OnInitDone();
void OnExit();
Méthodes utilisées lors de l’initialisation et de la clôture de
l’application.
-
void InitCamera();
Initialisation de la caméra.
-
void update_joint(int frame);
void update_joint_blast(int frame);
void update_joint_walk(int frame);
void update_joint_boy(int frame);
Méthodes permettant de mettre à jour l’image courante pour
l’animation. Il a été impossible d’utiliser une seule méthode
pour toutes les animations, le compilateur plantait lors de la
compilation.
-
CDiesel3DMaterial *redSurface;
CDiesel3DMaterial *selectedSurface;
Surfaces utilisées pour le personnage virtuel (rouge et jaune).
- 16 -
private:
-
CDieselWriter
m_Writer;
Utilisé pour écrire à l’écran.
-
CDieselInput
CDieselInputKeyboard
CDieselInputMouse
Utilisé pour les entrées.
-
float angleXZCam;
float angleYCam;
float rayonCam;
Paramètres du placement de la caméra (coordonnées polaire).
-
int
m_iXpos[3];
int
m_iYpos[3];
Position du stylet.
-
int
m_iXspeed[3];
int
m_iYspeed[3];
Vitesse de déplacement du stylet.
-
CDiesel3DObject * bodyParts[16];
Tableau d’objets pour les parties du corps.
CDieselVector3 bodyPartsPosition[16];
Tableau de vecteurs pour les orientations des membres du
corps.
float bodyPartsAngle[16][3];
Tableau d’angle pour les orientations des membres du corps
(utilisé uniquement durant l’interaction).
-
m_Input;
m_Keyboard;
m_Mouse;
-
CDieselSurface
m_srfPic[1];
Pour l’image en fond.
-
void bodyAfterAnim();
Cette méthode permet au personnage de reprendre la posture
qu’il avait avant de jouer une animation.
- 17 -
7.d Class Obj
Cette classe gère la lecture d’animation et son stockage en mémoire.
public:
- float BAP[300][37];
Tableau contenant les données de l’animation.
- char *name;
Nom de l’animation
- int nbFrame;
Nombre d’image dans l’animation.
- Obj();
Constructeur.
- int loadBAP(char *filename);
Cherger l’animation depuis le ficher filename dans le tableau BAP.
- 18 -
8 REFERENCES
[1]
Téléinformatique Sans Fil :
http://network.epfl.ch/tsf/
[2]
M. Gutiérrez, F. Vexo, D. Thalmann, A MPEG-4 Virtual Human Animation
Engine for Interactive Web Based Application. Proceedings of the 11th IEEE
International Workshop on Robot and Human Interactive Communication
(ROMAN 2002), September 2002, Berlin, Germany.
[3]
M. Gutiérrez, F. Vexo, D. Thalmann, Controlling Virtual Humans Using
PDAs. The 9th International Conference on Multi-Media Modeling (MMM'03),
January 7-10, 2003, Taiwan.
[4]
Diesel Engine :
http://www.inmarsoftware.com/
[5]
PocketGL :
http://pierrel5.free.fr/PocketGLb/ReadMeFirst.htm
[6]
Microsoft Visual C++ :
http://msdn.microsoft.com/visualc/
[7]
Microsoft eMbedded Visual C++ :
http://msdn.microsoft.com/vstudio/device/embedded/datasheet.aspx
[8]
Ipaq 3800 Series :
http://h20022.www2.hp.com/busprod/specifications/0,12513,series=96481%5Etype=64929%5E
category=215383,00.html?lsidebarLayId=79&rsidebarLayId=64
[9]
Ipaq 3900 Series :
http://www.compaq.fr/Produits/content/Fiche.asp?id=13477&p=5922&g=2277
[10] Microsoft Windows CE :
http://www.microsoft.com/windows/embedded/ce.net/default.asp
[11] Forum SundialSoft :
http://pub41.ezboard.com/fsundialsoftpocketpcfrm1
- 19 -

Documents pareils