Le moteur 3d ECO


image réalisée avec OskyAstro
ECO est un moteur 3d en c++ pour OpenGL, ouvert. Vous y trouverez tout un tas de techniques que vous pouvez librement télécharger et utiliser (le site est remis à jour chaque premier dimanche du mois).
J'ai cherché à comprendre comment se faisaient les choses, les dll's sont donc limitées à FreeType pour décoder les polices ttf et otf, Fmodex pour les sons, et Glew32 car je suis sous Windows.
Si votre souhait est seulement de programmer un jeu, sans vous soucier de ce qui se passe en interne, il vaut mieux vous tourner vers Unity, Unreal Engine, ou autre.
Je développe depuis très longtemps, en basic, puis en C, puis en C++, passant à openGL 2 puis openGL 3.
J'ai fait mes bases sur les incontournables Casse-brique, Tetris, Packman, etc. Très utile pour apprendre à programmer, et ordonner son code !
Mode d'emploi
Mes repères sont 1 pour 1 mètre, z pour la verticale. Notez que mes matrices sont "horizontales".
Pour bouger la caméra, utilisez le pavé numérique.
Vous trouverez un exécutable dans les exemples, base.exe, qui est le fichier compilé sous Windows.
shader et matrice
si votre matrice est horizontale, remplacez (dans vos shaders, setMVP, setVP, setModel ... ) :
glUniformMatrix4fv(m_vp, 1, GL_TRUE, vp.getFv());
par :
glUniformMatrix4fv(m_vp, 1, GL_FALSE, (accès aux valeurs));
Les mises à jour
mise à jour du 04/2025
* Une fonction ECO_strRemove a été ajoutée pour supprimer les caractères d'une chaîne (espace le plus souvent), (prend en compte les caractères accentués)
* Une fonction ECO_strReplace(std::string chaine, std::string car_in, std::string car_out) a été ajoutée (elle prend en compte les caractères accentués)
* OScrollH et OScrollV ont été modifiés : en cliquant sur la barre on récupère la position du curseur (pourquoi cela n'était-il pas le cas avant ? mystère :) ).
* SURTOUT OMesh_gltf a été amélioré : les parties animées par un axe, tels que les équipements des personnages, sont prises en compte. De même pour les meshs n'ayant pas de squelette, animés par une déformation des axes (typiquement, les coffres). Reste donc encore les « morph targets » à traiter.
les transformations ne sont pas encore prises en compte :
> définissez le point d'origine (Blender > point orangé)
> appliquez toutes les transformations (Blender > menu Objet>Appliquer>Toutes...)
> nettoyez les données (Blender > menu Fichier>Nettoyer>Bloc...)
mise à jour du 01/2025
* un bug a été corrigé sur OButtonLst : la fonction clear ne remettait pas à zéro la liste.
* un bug a été corrigé sur OMesh_gltf (surement pas le dernier!) : il faut mettre partout la suite de lignes :
glBindBuffer(GL_ARRAY_BUFFER, 0); (parfois manquantes)
glBindVertexArray(0);
* OListBox, OListGrid et OListImage reçoivent une nouvelle fonction, getItem_src, pour récupérer la position d'un label ou image (et positionner un OEdit facilement). OLstBox reçoit une nouvelle fonction, setItemText(idx, str), pour remplacer un texte (choix de langage).
* Le OExplorer (ECO/systeme) a été révisé.
* OShLight_pbr a été corrigé (le tuto source était bogué). J'en ai profité pour mettre les paramètres usuels (ambient, lightDir et lightColor) pour faciliter son utilisation.
mise à jour du 12/2024
* bug dans OFbobuffer corrigé (il manquait la ligne m_dst = dst dans la fonction create(dst, param))
* OListBox, OListImage et OListGrid ont été améliorés.
* ODshGeoHole et ODshGeoColor sont renommés ODshHole, et ODshColor.
mise à jour du 11/2024
* ODshGeoMask devient ODshMask et ODsMaskClipZ( pour la 'reflection' de l'eau), avec une amélioration des normales et donc du rendu. Les principaux defered shader de 'reflection' ont été ajoutés.
* ODshFreeze a été ajouté, il permet de créer un état 'gelé' sur un personnage.
* Le OMesh_gltf n'est pas complet : il ne charge toujours pas les fichiers d'animations sans os, ce qui provoque un bug d'affichage (utilisez Tmeca_obj en attendant). Le code sera intégré bientôt.
* OCollision a été amélioré (la détection du sol est consolidée et ne bogue plus), l'autre partie sera simplifiée.
* OppRain et OppFog on été revus et corrigés (post-process pluie et brouillard), OppSnow ajouté.
* OCamera a été modifiée (pour l'amélioration de la scène 'dialogue') et le sera encore.
mise à jour du 10/2024
La mise à jour concerne l'introduction des « compute shader » dans OShader et ODshader ; la suppression des OFboBuffer3d et OFboWindow3d, obsolètes (qui servaient à faire des miroirs, ce que la nouvelle scène de test vous montre) ; l'amélioration de OFboBuffer (qui garde la qualité GL_R32F pour le miroir) ; l'amélioration de OTextureList dont on peut modifier les filtres à sa guise.
Un defered shader ODshGeoClipZ (pour les effets de 'reflection' d'eau) fait son apparition (ne contrôle que la verticale) ; ainsi qu'un ODshGeoTree (pour animer les arbres).
OMesh_gltf : (le fichier est aussi dans la scène gltf)
> correction du chargement interne des images glb (dans _load_material) : il faut procéder à un double contrôle du nom interne pour obtenir le bon nom de l'image ( ? dans quel but ? )
> la verticale de base du fichier est mieux interprétée
> correction de la fonction _vao qui était désactivée à l'intérieur de la boucle !
> echec > placement correct des objets non liés au squelette (les haches du barbare par exemple) ; c'est secondaire dans la mesure où la démo vous montrera comment ajouter et enlever des équipements à un personnage.