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