Mighty Library

Projet 10

Caractéristiques

Description

Des updates seront écrites de temps en temps pour décrire l'avancement du projet :

--Mise à jour 2019--

À la suite de la création de la démo du jeu Coop Dungeon Adventure, j'ai voulu améliorer les tests 3D que j'avais fait en Java en utilisant la librarie LWJGL et OpenGl. J'y ai implémenté les nouveautés que j'ai codées pour faire CDA. J'ai donc fusionné les fonctionnalités des deux projets en un projet bien plus avancé en Java qui pouvait afficher de la 2D et une 3D très sommaire. J'ai continué le travail sur la librairie pour avoir plus de fonctionnalitées avec la 3D. Toutes mes références viennent du site learnopengl .

J'ai écrit du code permettant de charger des modèles 3D en récupérant dans un fichier des informations sur ses vertices. Chaque "vertex" contient des informations sur sa position dans l'espace, la position de la texture ou la couleur associée et le vecteur normal. J'ai aussi ajouté à ma librairie un système de gestion "shaders", une classe représentant une forme et un système de render target servant à afficher l'image produite sur l'écran pour toutes les résolutions. J'ai aussi testé un shader utilisant une "displacement map" pour créer un effet "eau" sur les boites. Pour mieux naviguer dans l'espace 3D, j'ai ajouté un déplacement de la caméra 3D ainsi qu'un tracking de la souris. Je me suis arrêté en cours de route sur l'implémentation de l'affichage de textes en recopiant le système déjà codé dans mon projet CDA. En 2019, je manquais de temps en raison de la charge de travail et du temps de transport pour me rendre à l'IUT.

Une autre raison qui m'a poussé à arrêter à ce moment là est ma rencontre avec Antoine Guilbaud à l'IUT et les futurs projets que j'ai realisé avec lui. Pour une raison plus technique aussi, bien que certains jeux furent créés avec ce langage, Java souffre de son manque de fonctionnalités comme les pointeurs, de pointeurs de fonction, et bien d'autres choses. Ce qui rend Java moins pratique, moins optimisé et plus lent d'autres. ( Note de 2023 : avec le temps, j'ai remarqué que comprendre sa librairie dans ses moindres détails permet de rapidement réaliser de nouveaux projets.)

C'est pour ces raisons que pour mes prochains projets, je travaillerais avec IronPowerTGA. Avec qui je ferais équipe, pour des projets de jeux. Il n'est pas impossible que je travaille de nouveau sur cette librairie un jour.

--Mise à jour 2021--

À la fin de mes études en DUT informatique, pendant la période estivale, j'ai voulu déterrer un peu mon projet vieux de deux ans pour mettre à jour certains de ses aspects. J'avais notamment quelques idées pour un système de chargement et de gestion de ressources. J'ai tout d'abord voulu séparé la partie projet de la partie librairie. Tout le code d'un développeur voulant utiliser le code se situe dans un dossier "project" tandis que tout le code source de la librairie se situe dans un dossier "mightylib". ( Note 2022 : j'ai mis quelque temps à bien séparer les deux dossiers).

Dans ce dossier de libraire, se trouve tout le code permettant d'utiliser des formes, des textures, des scènes, des ressources. Tandis que le code spécifique à un projet, comme la programmation des scènes se trouve dans le dossier projet. Dans ce sens, les systèmes généralistes doivent accepter des ajouts d'un développeur. Pour donner un exemple plus concret, parlons du système de ressources. Chaque type de fichier est chargé par un chargeur spécifique. Les plus généralistes, comme celui des textures ou des shaders, sont présent par défaut dans le système de ressources. Avant la phase de lancement de la fenêtre et du chargement des ressources, le développeur peut ajouter ses propres chargeurs.

J'ai créé mon propre type de fichier d'animation. Un fichier d'animation comporte une liste de ligne, chaque ligne décrivant la partie de la texture utilisé et le point chaud. Chaque image d'une animation est centrée sur le point chaud, ce qui a son utilité quand la taille des images d'une animation change. En lien à ce format de donnée, j'ai developpeur un chargeur et une classe permettant d'afficher la dite animation. De plus, j'ai aussi fait un système englobant, un animateur, permettant de choisir une animation parmi un ensemble donné.

Ensuite, j'ai repris le système de collision codé dans le petit projet BecomeAnAdvanturer en cpp pour le ré-implémenter. C'est un système de détection, comprenant des éléments simples comme les rectangles, les formes englobantes. ( Note 2022 , pas très pertinent avec la mise en place de Box2D). Un avantage du système que j'ai fait est une grille de collision. Celle-ci permet de répartir les collisions du monde dans une grille et d'optimiser les tests.

Enfin, j'ai unifié les gestionnaires d'entrées physiques que sont le clavier et la souris dans un gestionnaire commun. Pour ce faire, le développeur doit créer une liste d'identifiants correspondant à des actions. Comme "menu bas", "se déplacer à gauche" dans le monde 3D, ou encore "echap". Ensuite, le développeur doit associer à chaque identifiant, une classe logique construite comme un arbre, qui permet de renseigner les touches physiques, et les relations logiques entre ces entrées. Par exemple, la touche 1 ou la touche 2 doivent être pressées pour que l'action soit considéré comme active. C'est donc dans la même phase d'ajout des modifications au moteur que le développeur envoie ces informations au gestionnaire d'actions.

--Mise à jour 2022--

Durant la fin de ma première année et le début de ma seconde année à l'ENSEIRB-MATMECA, j'ai grandement ajouté des fonctionnalités à ma librairie. Ces mises à jour sont en lien avec une pseudo tentative de refaire CDA en java et le projet Dualz de cette année. Pour la partie 2D de la librairie, j'ai fait des tests d'utilisation de la librairie Box2D. On peut voir un exemple sur une des images ci-dessous.

Pour continuer, j'ai créé un objet Tileset et un objet TileMap. Un Tileset est un atlas de textures. C'est un objet qui regroupe toutes les tuiles utilisées dans une Tilemap et qui peut renseigner des informations sur ces tuiles. Ces informations peuvent être des zones de collision, des animations. Une Tilemap est un objet, composé de plusieurs couches, elles sont généralement affichées les unes par-dessus les autres. Chaque couche est un quadrillage contenant les tuiles utilisées. Ce sont des concepts très communs dans le monde du jeu vidéo. Ces objets sont créé depuis un chargeur custom qui utilise des fichiers du logiciel tiled .

Ensuite, j'ai créé un chargeur de fichier Json, un type de fichier très utile et très utilisé. Pour créer le jeu Dualz, j'ai utilisé une des librairies présentent dans le package LWJGL, OpenAl. C'est une librairie audio supportant les sources sonores spacialisées. J'ai créé toutes les classes, nécessaire à son utilisation. J'ai utilisé un concept intéressant, nécessitant la lecture d'un fichier Json, un arbre de gain. C'est un concept qui permet de modifier des catégories entières de sources sonores afin d'en changer le volume. Une source sonore devant être associé à une des catégories de l'arbre.

Pour la partie 3D de ma librairie, j'ai fait fonctionner le calcul de la lumière en utilisant l'information, des normals des vertices de mes formes 3D. Un cube pour commencer et une sphère dont j'ai trouvé la façon de créer ses vertices via un algorithme trouvé sur Internet.

--Mise à jour Octobre 2023--

En cours d'avancement

Déjà réalisé:

3D:

2D:

Utilitaire:

Visuels - (cliquer pour ouvrir en grand)

2023 - Scene 3D de test. 2023 - Menu d'accès aux scènes de test. 2023 - Utilisation framebuffer comme texture. 2023 - Test librairie box2d. 2022 - Tileset, Tilemap, texte et sprite animé. 2021 - Test boites de collision. 2019 - Affichage des boites avec l'effet 'eau'. 2019 - Affichage d'un model 3D katana.

Hey test test