Rapport de premi`ere soutenance - Projet Cinos

Transcription

Rapport de premi`ere soutenance - Projet Cinos
Rapport de première
soutenance
par le Freeman club:
BRETONNIERE Christophe,
MAINGUEUX Bryan,
BOUYER Nelson.
8 janvier 2008
1
Table des matières
1 Introduction
1.1 Rappel du projet. . . . . . . . . . . . .
1.2 L’avancé du projet. . . . . . . . . . . .
1.3 Répartition du planning. . . . . . . . .
1.3.1 Planning première soutenance .
1.3.2 Planning seconde soutenance . .
1.3.3 Planning Troisiéme soutenance
1.3.4 Planning soutenance finale . . .
.
.
.
.
.
.
.
3
3
4
5
5
5
6
6
.
.
.
.
.
.
.
7
7
8
9
9
11
12
13
3 le Moteur Physique
3.1 Les déplacements . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Les Collisions . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Se que l’on aura pour la prochaine soutenance . . . . . . . . .
14
14
16
16
4 le Site Web
4.1 L’intérêt d’avoir un site web . . . . . . . . . .
4.2 La réalisation . . . . . . . . . . . . . . . . . .
4.3 Les différentes parties . . . . . . . . . . . . . .
4.4 Se que l’on aura pour la prochaine soutenance
17
17
17
17
18
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 le Moteur Graphique
2.1 Qu’est que DirectX . . . . . . . . . . . . . . .
2.2 Nos début avec DirectX . . . . . . . . . . . .
2.3 Notre premier carré. . . . . . . . . . . . . . .
2.4 L’évolution du carré en cube . . . . . . . . . .
2.5 La création d’une map . . . . . . . . . . . . .
2.6 Création d’une mesh . . . . . . . . . . . . . .
2.7 Se que l’on aura pour la prochaine soutenance
5 Conclusion
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
2
1
1.1
Introduction
Rappel du projet.
Pour vous remémorer notre projet, voici en quelques lignes le but de notre
jeu : notre personnage principal, Sonic, devra explorer les différents mondes,
où il devra ramasser un maximum d’anneaux pour survivre, et surmonter
différents obstacles et ennemis.
L’histoire commence dans un monde ou notre héros Sonic détenais 7
émeraudes qui permettais de maintenir la paix et la sérénité. Par mégarde,
son double maléfique réussi un jour à les lui voler, afin d’instaurer un monde
basé entièrement sur le chaos et la terreur.
Ainsi Sonic, ce devait de réunir les émeraudes afin de pouvoir ramener
l’ordre dans son monde devenu une vrai champ de bataille où vive dorénavant
des monstres. Shadow, afin de lui rendre la tache plus difficile, transforma
les émeraudes en centaines d’anneaux éparpillés dans le monde.
C’est pourquoi Sonic pour réussir à récupérer les émeraudes à son adversaire doit ramasser une centaine d’anneaux afin de pouvoir les retransformer.
Pour cela il devra affronter les monstres, et retransformer les anneaux en
émeraude et ainsi pouvoir ramener la paix et la sérénité dans son monde.
3
1.2
L’avancé du projet.
Nous voila déjà à notre première soutenance. Et après une semaine de
rush pour pouvoir réaliser se que nous espérions rendre pour cette première
étape, nous sommes fière de notre avancement. En effet, après plusieurs semaines a chercher, à droite et à gauche des informations pour initialiser notre
fenêtre, nous avons finalement réussi, mais entre temps nous avons malencontreusement perdu un de nos membres ( Adrien COQUELLE, ne faisant
plus parti du projet Cinos). Ce n’est pas pour autant que l’on a désespéré,
mais au contraire nous avons redoublé d’effort pour arriver finalement à un
rendu qui est au delà de ce que l’on espérai au départ. Une réévaluation du
partage des tâches a donc été effectué pour la suite de notre projet ( Confère
1.3 Répartition des tâches).
4
1.3
Répartition du planning.
Pour cette première soutenance afin de compenser l’absence de l’un de
nos membres, nous avons tous travaillé sur la partie graphique du projet. En
revanche le reste de la répartition des tâches a été respecté.
Ainsi nous avons donc établie une nouvelle répartition des tâches pour
les trois prochaines soutenances a venir.
1.3.1
Planning première soutenance
Légende :
: Tâche accomplie
• : Tâche avancée
◦ : Tâche commencée
· : Début de recherche
Moteur Graphique
Moteur Physique
Son
Multijoueur
Intelligence Arti.
Site WEB
1.3.2
Bryan
◦
◦
•
Nelson
◦
·
Chris
◦
◦
·
•
•
Nelson
•
Chris
Planning seconde soutenance
Moteur Graphique
Moteur Physique
Son
Multijoueur
Intelligence Arti.
Site WEB
Bryan
•
◦
5
◦
◦
◦
1.3.3
Planning Troisiéme soutenance
Moteur Graphique
Moteur Physique
Son
Multijoueur
Intelligence Arti.
Site WEB
1.3.4
Bryan
•
•
Nelson
•
•
◦
◦
Chris
•
•
◦
◦
Planning soutenance finale
Moteur Graphique
Moteur Physique
Son
Multijoueur
Intelligence Arti.
Site WEB
Bryan
Nelson
6
Chris
2
le Moteur Graphique
Le moteur graphique représente la plus grosse partie du projet. Suite à
l’événement perturbateur, nous avons pris la décisions de tous coder la partie
graphique. Suite au nombreuse explications d’autres élèves (spé) nous expliquant que DirectX permettait un meilleur rendu 3D que OpenGl, et n’étant
pas obligé d’avoir un projet multi-plateforme, nous nous sommes orienté vers
une programmation sous DirectX (ne prenant pas en compte les nombreux
trolls sur DirectX et OpenGl).
2.1
Qu’est que DirectX
DirectX est bien connu dans le monde du jeu. Mais qu’est-ce ? DirectX est
apparu avec Windows 95. Souvenez vous avant, il fallait à l’installation du jeu
dire de quelle carte graphique, son, de quels périphériques d’entrée le PC était
équipé et des fois télécharger des patchs pour pouvoir jouer. DirectX permet
de supprimer ce problème. C’est une couche supplémentaire entre le matériel
et le logiciel (pas forcément un jeu) spécifique à Windows. DirectX permet
ainsi de programmer un logiciel utilisant des ressources multimédias sans
connaı̂tre exactement la configuration sur laquelle sera exécuté le programme.
Microsoft Windows SDK (Software Development Kit) est un kit de developpement de logiciel Microsoft qui contient des fichiers d’en-tête, des bibliothèques, des échantillons, de la documentation et des outils utilisant les
API (Application Programming Interface) nécessaires pour réussir à developper des applications pour Microsoft Windows et .NET Framework 3,0.
Le Windows SDK peut être utilisé pour écrire des applications qui ciblent
Windows XP et Windows Server 2003 ainsi que Windows Vista alors que la
plate-forme SDK la plus agées peut être utilisée pour développer des applications Windows 2000, Windows XP et Windows Server 2003. Le SDK Windows remplace la plate-forme SDK, le SDK de WinFX et le .NET Framework
SDK 2,0. Le package contient plus de 100 millions de mots de documentation
et de près de 1000 échantillons. Bien que le kit de développement lui-même
est disponible sans coût, obtenir le kit de développement exige une copie de
Windows valide.
7
2.2
Nos début avec DirectX
Nos débuts avec DirectX ont été plus que laborieuse. En effet, après la
découverte de l’existence du SDK, il nous a fallut trouver la bonne version
(Problème de compatibilité avec Vista ). Au début avec DirectX il nous a
fallut de nombreuses heures de recherche sur internet pour comprendre le
concept. Après ces heures nous avons découvert le site MSDN de Microsoft
et les tutoriels du SDK qui, très vite, sont devenus la bible du groupe. Grâce
a cela et DotNet nous avons pu commencé notre projet dans de bonne condition.
Tout d’abords nous avons commencé notre projet par l’ouverture d’une
fenêtre , ce qui nous a posé pas mal de soucis, par notre manque de connaissance au niveau programmation sous DirectX. Lors de la découverte du SDK,
nous avons réussis après le décryptage du C# a initialiser une fenêtre avec
un jolie fond violet. Après cela nous avons commencé a créer un petit moteur
graphique permettant d’afficher des objets. Ainsi de nombreux tutoriels et
section de code nous on été nécessaires pour comprendre le fonctionnement
et la manière d’afficher un objet, tout d’abords en 2D, qui s’est très vite vu
amélioré en 3D.
8
2.3
Notre premier carré.
Après avoir eu notre super belle page (ou pas), les difficultés s’amoindrissaient mais ne s’arrêtaient pas, il fallait maintenant mettre quelque chose
dans cet espace. Après une longue réflexion (environ 10 secondes), on fut
obligé d’y mettre un petit triangle. Ce triangle nous paraissant un peu nul,
on apprit par les lois poussées des mathématiques de CM1 que deux triangles
collés de même longueur formais un carré, sur ce point nous remercions la
petite cousine de Maode qui a éclairé nos lanternes dans les môments les plus
sombres. Notre carré obtenue, nous pouvions alors nous rendre compte que
les couleurs n’étaient pas encore de la partie, pour cela nous avons cherché
(sur notre source préféré le MSDN) quel type de Vertex existait et nous
sommes tombé sur le Vertex.PositionColored qui permettais de donné des
couleurs au vertex créés par des coordonnées choisies. Ainsi, nous obtenions
un carré avec un dégradé de couleurs sur tout un coté.
2.4
L’évolution du carré en cube
Une fois notre carré avec un dégradé de couleurs obtenue, il nous suffisait
de créer un algorithme assez simple, il faut ce l’avouer, qui permettais d’obtenir 8 points dans l’espace et de les relier entre eux afin de faire un cube.
Ceci nous compliqua les chose, car on n’avait pas du tout pensé que les vertex
ce relieraient de manière chronologique et qu’ils formeraient d’eux même un
cube (par enchantement sait on jamais). Nous avons ensuite dut, pour former
correctement notre cube, créé un IndexBuffer (Buffer d’indices). Ce n’est à la
base qu’une suite d’indices dans un vertex buffer. Un IndexBuffer permet de
référencer un somme plusieurs fois, c’est moins lourd que de stocker plusieurs
fois le même sommet de notre cube (Vertex). Donc pour créer notre cube trois
boucles, imbriqué les unes dans les autres, ont été nécessaire. La première
permettant de faire varié les x, la seconde les y, et la dernière les z. Reste
plus qu’a associer un vertex à un indice. Et grâce à la fonction DrawIndexedPrimitives prenant comme argument le type de primitive ici TriangleList, le
nombres de vertex et aussi le nombre de triangles à tracer. Cependant pour
la suite des événements nous sommes passés à l’utilisation d’un autre type
de vertex. Nous avons opté pour les Vertex.PositionNormal permettant d’indiquer en plus des coordonnées, la normale des Vextex pour leur appliquer
une lumière, nous permettant par la même occasion d’apprendre à gérer la
lumière dans notre environnement graphique.
9
Voici notre cube avec un lumiere d’ambiance bleu et les ombre violet
Ci-dessous, le code des boucles permettant de créer les vertex pou un
cube de longeur égale a 1.
c:=0;
for z := 0 to 1 do
begin
for y := 0 to 1 do
begin
for x:= 0 to 1 do
begin
verts[c] := Vertex.Create(Vector3.Create( x, y, z ),
Vector3.Normalize( Vector3.create( x, y, z )),0.1 , 0.01);
inc (c);
end;
end;
end;
L’attribution des indices se fait par exemple de la manière suivante :
indices[0] := 0;
indices[1] := 1;
indices[2] := 2;
indices[3] := 1;
indices[4] := 2;
indices[5] := 3;
Cette suite d’indices permet d’obtenir un carré, l’une des faces du cube.
10
2.5
La création d’une map
Pour créer la map le plus simplement possible nous avons commencé par
coder un algorithme, qui parcourait un fichier, contenant toutes les informations sur la formation de la map (sol, mur, vide). Cependant aprés de longues
heures de codage, de débogages et de tests, ce code ne fonctionnait pas. Nous
supposons une erreure entre la lecture des données du fichier et la création du
tableau représentant en 2d le sol de la map. Pour ne pas rester sur un échec
et pour ne pas stopper notre évolution nous avons décidé de créer nous même
la map. C’est a dire que l’on a tracé tous les vertex et triangles permettant
de gérer notre map. La map est simple mais fonctionne. Elle est composée
de 4 pavés représentant les bords du terrain et un grand carré formant le sol.
Voici notre map d’un point de vue externe, pour mieux apprécier les couleurs.
Comme avec notre cube, nous avons appliqués de la lumière. Cependant
une lumière ambiante et une ombre nous semblais insuffisant. La map c’est
alors vu appliquer 4 lumières différentes. Pour cela on a créé des spots et on
leurs a attribué une même position (le centre de la map) mais 4 directions
(les quatre points de la map) , et couleurs différentes (jaune, Violet, rouge et
bleu). Cet effet rends notre map beaucoup plus coloré comme vous pouvez
le voir sur l’image ci-dessus.
11
2.6
Création d’une mesh
Afin de ne pas avoir juste à présenter une map, nous avons décidé d’y
insérer un objet qui pourra alors si déplacer. Nous nous sommes dit qu’il fallait créer un mesh qui ressemblerait à notre personnage. Le problème étant
que les seuls mesh de notre personnage que nous avons réussi à obtenir était
de loin beaucoup trop grand pour être contenu sur la map ou ils étaient invisible. Comme nous ne parvenons pas encore à afficher une texture ou un
matériel correctement sur un mesh, nous avons choisi d’appliquer des lumières
sur le mesh. Ainsi pour cette soutenance avant de résoudre le problème nous
nous sommes contenté d’un mesh sphérique que nous avons créé.
Afin de ne pas laisser un fond noir derrière notre map (après tout c’est un
jeu il faut donc un minimum de décors) noir avons choisit d’y faire apparaı̂tre
une skybox qui engloberais notre map. Cette skybox a donc été crée de la
façon suivante : nous avons fabriqué un mesh de la taille de notre map afin
qu’il fasse juste la bonne taille, puis nous avons appelés ce mesh comme pour
notre sphère et lui avons assigné des coordonnées de longueurs, de largeurs
et de hauteurs grâce à la commande SkyBox := mesh.Box(dev,50,50,50) ; qui
prend en premier paramètre notre Device, en seconde la longueur de notre
skybox, puis la largeur, et enfin la hauteur par rapport au point d’origine.
12
2.7
Se que l’on aura pour la prochaine soutenance
Pour cette première soutenance un bon départ a été pris pour le moteur
graphique. Cependant quelques améliorations seront a effectuer pour la seconde soutenance. A savoir la création de la map grâce a un algorithme, et
une optimisation de celui-ci sera la bienvenue. Il est aussi prévu d’ajouter des
objets texturés et avec des matériaux, qui feront partie du décor. Meilleure
gestion de la caméra en fonction des mouvements. Et pour finir une modification des lumières sera effectué pour créer une ambiance plus caratéristique
de notre jeu.
13
3
le Moteur Physique
Pour ce début de projet le moteur physique n’est pas beaucoup présent, outre
les déplacements et les collisions à gérer le reste du moteur physique, viendra
se greffer à la partie graphique au fur et a mesure de l’avancé de la partie graphique. Nous n’avons pas rencontré de gros soucis lors de sa mise en places,
mis a par quelques détails.
3.1
Les déplacements
La première chose effectuer dans ce moteur physique a été un mouvement
de rotation. Une simple ligne de code permettait d’avoir un cube en rotation.
A ce moment là on s’est dit : ”A quoi cela va bien pouvoir nous servir ! ! !”.
Après quelques minutes de réflexions on en est venu à la conclusion que pour
l’instant cet effet ne nous servait à rien.
Une autre tâche à accomplir s’est vu plus intéressante a réaliser : ”sa
serai bien d’avoir la possibilité de ce promener”. Les déplacements de notre
cube sont géré par l’appuis des touches. Au départ une longue pression sur
une touche incrémenté qu’une fois la position en x, y ou z de la mesh, le
petit soucis rencontré, et qui a vite été résolu, fut que le déplacement n’était
pas continue. Pour résoudre ce problème deux fonctions ont été créées, l’une
détectant l’appuis des touches et l’autre si elles étaient relâchées, un simple
test nous permet donc maintenant de savoir si la touche est appuyé, tant que
celle-ci est actif alors on change la position de l’objet.
Maintenant que l’on a notre ”jolie” objet qui se déplace, il nous faut
déplacer la caméra (hé oui faudrait pas non plus perdre notre Sonic au milieu
de la map). Même si pour le moment nous n’avions pas encore de map. Pour
facilité la tâche de conception, la camera s’est vu attribué des mouvements
sans que le reste bouge, nous avions donc la possibilité de se déplacer autour de notre cube. Maintenant il ne restait plus qu’à associer les deux. L’un
des problèmes rencontrés fut de bien positionner la caméra et de synchroniser les déplacements de l’objet avec la camera. Les premiers tests n’étaient
pas très concluent. La caméra partait généralement dans le mauvais sens
ou avait une vitesse de déplacement plus lente. De nombreux réglages fuent
nécessaires pour obtenir un beau rendu. Défaut principalement dut a une
gestion des coordonnées et a Matrix.LookAtLH() ou Matrix.LookAtRH().
De nombreux réglages ont dus de nouveaux être effectué lors de la mise en
place de la map. A l’heure actuelle, de nouveaux problèmes sont arrivés en
même temps que la mesh. Une partie a été résolut mais un petit bug reste
14
encore a régler. La camera recule, et avance bien comme souhaité, mais sa
position en hauteur varie, ce qui n’est pas vraiment normale. Ceci devrait
être rapidement résolue et nous pourrions donc passer a autre chose.
La fonction KeyDown permet, comme dit ci-dessus, de détecter l’appuis
sur les touches up, down left et right. Lorsque celle-ci sont appuyé leurs
variables passent alors à un état vraie (true). C’est au tour de la fonction
KeyEvents de tester si la touche est toujours active. Si c’est le cas alors le
déplacement s’effectue en continue, grâce a une troisième fonction (KeyUp)
qui détecte le relâchement de la touche (L’inverse de KeyDown) la variable
repasse à Faux (false) et le déplacement s’arrette.
procedure Kkey.KeyDown(e : TKeyEventArgs );
begin
Case e.KeyCode of
TKeys.Up : Kup := True;
TKeys.Down : Kdown := True;
TKeys.Left : KLeft := True;
TKeys.Right : KRight := True;
end;
end;
procedure KKey.KeyEvents;
begin
if KLeft then
begin
directionx := directionx
end;
if KRight then
begin
directionx := directionx
end;
if Kdown then
begin
directiony := directiony
end;
if Kup then
begin
directiony := directiony
end;
end;
- 0.1;
+ 0.1;
- 0.1;
+ 0.1;
15
3.2
Les Collisions
Les collisions sont gérées par un tableau représentant la map, pour faire
simple, la possibilité de représenter des obstacles par des 1, une surface avec
la présence d’un sol par un 2 dans un tableau de deux dimension, permet
de détecter avant le déplacement si il y a un obstacle sur la prochaine position de notre objet. Cette technique nous permettra par la suite de gérer
plusieurs types de surface, et donc la possibilité d’avoir d’autres effets que la
collision. Cependant ayant un problème avec cette conception de map, une
seconde méthode a alors était mis en place pour obtenir une des collisions
simplement. Ayant une map en forme de carré et connaissant les coordonnées
exactes de collision, deux tests des coordonnées en x et en z met alors de limiter les déplacements sur toute la map. Une fois le problème de la map les
véritables collisions seront mis en place.
3.3
Se que l’on aura pour la prochaine soutenance
Des bonnes bases pour les mouvements ont été mis en place. Cependant
une revue complète des collisions sera à effectuer pour la prochaine soutenance. Ce qui nécessitera un gros travail. Mais ce n’est pas pour cela que l’on
s’arrétera là. Une amélioration des mouvements verra le jour.
16
4
4.1
le Site Web
L’intérêt d’avoir un site web
Le début de notre site Web est avant tout de pouvoir se faire connaı̂tre du
grand publique (qu’elle est l’intéret de passer un 6 mois a réaliser un projet
si on peut même pas le montrer a tout le monde). Outre l’aspect publique
et de présentation de notre projet, ce site permettra de mieux connaı̂tre
les personnes l’ayant réalisé( Entre autres, le Freeman club). Et pour les
connaisseurs, programmeur débutant sa sera aussi un bon moyen de trouver une évolution détaillée d’un ”grand” projet. Il expliquera donc à travers
différentes pages ”qui fait quoi”, comment, et pourquoi.
4.2
La réalisation
N’arrivant à rien a coder en Delphi, la réalisation du site web a rapidement avancé. Pour s’arrêter instantanément lors de la création de notre
fenêtre. Le site a été réalisé en Xhtml, et en utilisant des feuilles de style CSS
pour un meilleur rendu graphique. Un cadre au milieu de la page a été créé
pour y appeler une iframe. Cet appel nous a semblé plus simple a utiliser.
Cela permet d’appeler une seconde page a l’intérieur d’une de la première.
Sur notre serveur free, une partie administrateur a été mis en place (simplement grâce a des .htassess et .htpasswrd), nous permettant de partager
des fichiers, ou de les protéger. Cet emplacement nous servira par la suite
pour sauvegarder nos source avant de les dévoiler au grand publique. Pour
l’instant il n’y a pas vraiment de contenu, juste le code a été réalisé, celui-ci
viendra par la suite ainsi que la mise en place de news géré en PHP.
4.3
Les différentes parties
Le site est pour l’instant composé de 6 grandes partie (Des sous partie
pourrons peut être voir le jour par la suite).
Tout d’abord la page d’accueil, on y trouvera un petit message de bienvenu (On est pas impoli) suivie des news. Elle est suivit par la partie projet
décrivant, pourquoi ce jeu la et pas un notre, le but, le scénario... Viens alors
la présentation du Freeman club, comme je viens de le dire elle présente le
groupe, ces membre, mais aussi ces ancien membre. Des goodies serons aussi
disponible, une partie screen a était mise en place ou l’on poura trouver dans
image inédite du jeu (avant même sa sortie), et pleins d’autre choses. Une
17
section special a été réalisé pour les download, le telechargement des rapports
de soutenance, les mise a jours du jeu et l’installateur y serons mis pour le
grand publique.
4.4
Se que l’on aura pour la prochaine soutenance
Le site Web est déjà quasiment fini. Pour le terminer complètement un
petit complément d’information sur les pages seront effectués. La mise en
place des news via un scripte PHP. Et bien entendu des mises a jour seront
effectuées, comprenant la mise en ligne de notre cahier des charges, rapport
de soutenance n˚1 et le premier executable.
18
5
Conclusion
Pour conclure nous pouvons donc dire que nous avons respectés les objectifs (voir même fait mieux), que nous nous étions fixés au départ de ce
projet. Malgré le manque de l’un de nos membres, nous ne pouvons donc
que prévoir mieux pour les prochaines soutenances ayant une nouvelle façon
de travailler, et une motivation grandissante en vue des nouvelles choses que
nous allons pouvoir apprendre sur le moyen de faire un jeu vidéo, c’est ainsi
que nous réaliserons le pseudo rêve fantastique que nous avions tous quand
nous étions plus jeune : ”Créer un jeu vidéo de nos propre main”.
En espérant que ce rapport de soutenance correspond à vos attentes, nous
vous souhaitons une joyeuse année et à bientôt pour la prochaine soutenance.
19