- JJEngine

mon bac à sable pour apprendre OpenGL

a marqué ce sujet comme résolu.

Bonjour à tous,

Cela fait un bout de temps que je me balade par ici, j’apprécie la qualité et la variété des articles ainsi que le site/forum très claire et bien fait. Félicitation à l'équipe, l'association et tous les contributeurs. Vu que j'ai entamé un side project intéressant, j'en profite pour créer mon premier sujet et en parler un peu :)

Présentation

Développeur Android/Java, j'ai 28 ans et habite Strasbourg. J'ai toujours été attiré par l'informatique, les jeux vidéos, la bidouille et l'envie continuelle d'apprendre et de créer. J'ai fais mes premières armes sur half-life avec le modding(map avec worldcraft(hammer) et de bidouilles SDK mais le C++ c'était trop costaud pour moi à l'époque. J'ai également fait un peu de mapping Quake 3, unreal tournament, du modeling ave 3ds max, blender etc… Je suis venu créer ce sujet afin de faire un devlog sur mon actuel projet qui consiste à développer un genre de moteur 3D en Java avec OpenGL. Ici pour partager mon avancement, recevoir des avis et de l'aide, et pourquoi pas aider certains qui sont au même niveau que moi.

L'histoire

Depuis 1 an, j'ai repris le game dev mais sous une approche développeur, d'abord en 2D avec libGDX et un peu de Godot, puis en 3D avec jMonkey Engine(vous l'aurez compris, Java est mon langage de prédilection et j'ai un petit faible pour l'open source). Après cette petite année de pratique, c'est la 3D qui m’attire le plus. Avec jMonkey Engine (et la découverte de la 3D) j'étais face à beaucoup de questions du genre "pourquoi j'appelle cette méthode" ou "pourquoi je dois faire ça avant d'avoir un matériel qui affiche une texture" etc etc. Et puis le déclic, je suis tombé sur les vidéos d'un mec, ThinMatrix, qui fait des jeux en java (avec LWJGL)directement en partant d'OpenGL, avec beaucoup de vidéos devlog et de tuto OpenGL. Après avoir visionné pas mal de ces vidéos et fait quelques recherches, je me suis mis dans l'idée d'apprendre OpenGL afin de pouvoir comprendre le pourquoi du comment, et ainsi être à l'aise sur les concepts 3D et le fonctionnement interne d'un moteur 3D/moteur de jeu 3D.

Le projet

Créer un moteur de jeu 3D en java à l'aide de LWJGL, ce dernier étant principalement un binding C <-> Java de l'API OpenGL. Je m'orienterai vers un doom-like ou un minecraft-like sans prétention pour tester l'avancement du projet en ayant un contexte de jeu défini, mais je n'en suis pas encore là. J'utilise principalement deux supports pour m'aider, les vidéos de ThinMatrix et le GitBook : 3D Game Development with LWJGL 3. Le projet se veut open source et cross plateforme.

Buts

  • Apprendre OpenGL, faire mes armes sur l'API
  • Apprendre les différents mécanismes et concepts derrière la création d'un moteur 3D
  • Gagner en compétences Java et en architecture logiciel
  • S'amuser :D

Avancement

  • [x] Classes de base, boucle principale, implémentation de LWJGL
  • [x] Utilisation des VAOs et VBOs pour afficher des triangles
  • [x] Implémentation des shaders
  • [x] Afficher des objects en perspective (projection matrix, etc etc)
  • [x] Afficher des textures
  • [x] Camera et déplacements basiques
  • [ ] OBJLoader
  • [ ] Éclairage simple
  • [ ] Interface utilisateur
  • [ ] Fog
  • [ ] Générateur de terrain
  • [ ] Map loader ?
  • [ ] Le reste :D

Quelques modestes images

très modeste ^^

liens et ressources utilisées

Salut Bl@de,

Etant moi même développeur Java/Android et développant un modeste petit jeu mobile grâce à LibGdx, je ne peux que suivre avec intérêt ce genre de sujets.

Cela dit, même si les connaissances que tu as/vas acquérir avec ce projet seront énormes, pourquoi proposer un nième moteur alors qu'il en existe déjà beaucoup avec plus ou moins une grosse communauté (chose qui est le cas pour LibGdx par exemple) ?

Est-ce que tu n'as pas envisagé la possibilité de contribuer à un projet existant plutôt que de faire ton propre moteur ?

Ceci étant dit, je suis quand même le sujet parce que je suis curieux de savoir jusqu'où ira ton projet ! ^^

Salut Andr0,

Je vais également suivre avec intérêt votre projet. Je trouve que libGdx est vraiment un beau projet et votre idée est originale avec une équipe organisés :).

Je m'attendais à cette question, je me l'à suis moi même posée pendant ma phase de réflexion pré-projet. Et tu as tout as fait raison, depuis un an je trouve qu'il pleut des moteur de jeu 2D/3D comme vache qui pisse :D . Gratuit, payant, opensource, crossplatforme, avec parfois des ovnis qui sortent de nul part comme par exemple Banshee Engine développé par un seul mec. Je ne joue pas dans cette court là car pour mon cas la subtilité est là : je ne veux pas proposer mon projet au "public", je devrai mettre dans le futur readme "N'utiliser pas ce moteur, il n'est pas fait pour réaliser un projet sérieux". J'ai mis mon code sur github pour le côté pratique et pour les curieux. Mais c'est vraiment un bac à sable pour moi, le file rouge de ma progression.

Est-ce que tu n'as pas envisagé la possibilité de contribuer à un projet existant plutôt que de faire ton propre moteur ?

Andr0

J'y ai pensé, et c'est ce que je ferai peut-être dans un avenir plus ou moins proche. Une fois que je serai calé sur le fonctionnement d'OpenGl, je compte retourner sur quelques chose de plus haut niveau, genre libGDX, et pourquoi pas y contribuer. Mais actuellement, je ne me sens pas d'avoir le niveau suffisant pour contribuer sur un tel projet.

Merci pour ton message, je vais essayer d'alimenter la discussion assez souvent même si comme vous, je travail et je fais ça sur mon temps libre, et parfois c'est difficile de dégager du temps pour coder. Actuellement j’entame l'OBJLoader, c'est assez fun à coder, je sens que je vais bien m'amuser :D

OBJLoader

Ce weekend j’ai pu travailler sur la classe OBJLoader afin de charger des fichiers simple au format OBJ. Ca a été un peu plus compliqué que ce que je pensais, mais assez intéressant à faire. A voir si par la suite je vais pas plutôt utiliser un autre format genre Collada.

Pendant cette partie, j'ai pu découvrir 2 nouvelles choses que je ne connaissais pas en Java :

J'utilise Blender pour tout ce qui est 3D, et j'aime beaucoup ce logiciel, mais il me reste beaucoup de chose à apprendre, comme à faire des UVmap propres :). J'ai toujours trouvé l’assignation de matériaux/textures/uvmap un peu déroutant avec Blender.

Avec une texture unie (et vu que je ne gère pas encore les ombres) et bien ça ne donne pas grand chose. En wireframe ça rend un peu mieux, ou alors avec une texture :)

wireframe

couleur unie

texture à l'arrache

La suite

Je ne sait pas encore quelle étape je vais attaquer maintenant. Soit creuser un peu plus sur le support de l'OBJ afin de gérer les groupes d'objets, les .mtl…

Soit implémenter la gestion simple des lumières/ombre à l'aide de la méthode Phong shading

Oui effectivement les shaders c'est vraiment intéressant, ont peux presque faire le café avec :D. J'ai déjà fait quelques tests en modifiant la valeur des couleurs ou des coordonnées des textures, rien qu'avec ces quelques trucs tout simple, il y a moyen de bien s'amuser. Mais après pour faire des effets poussés etc je pense qu'il faut être assez bien calé en math et/ou en traitement de l'image.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte