top of page

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 07/2025

* OShColor3d a été modifié : il peut utiliser une texture pour ne pas afficher les valeurs alpha inférieures à 0,9 (clip des feuilles d'un arbre, par exemple). Le programme Edt Donjon montre une utilisation de picking color.

 

* OFboBuffer voit sa fonction readPixel modifiée :

> glReadPixels(x,y, 1,1, GL_RGB, GL_UNSIGNED_BYTE, &pixel);

= glReadPixels(x,y, 1,1, GL_RGBA, GL_UNSIGNED_BYTE, &pixel);

 

* OFboWater et ODFboWater remplacent les shaders spécifiques pour l'eau (voir la nouvelle scène de test)

 

* OSkyAstro a de nouvelles fonctions pour placer une variable de lumière (s_OSkyAstro_light) permettant de récupérer plus facilement ambient, color et direction.

 

* OCamera est enrichie de getSpeed() et getSpeedRot(), sa vitesse et son coefficient de rotation.

 

* OMesh_obj et OMesh_gltf ont été corrigés concernant leurs valeurs et textures émissives.

 

* OShGlow pour lumière émissive (très simple) a été rétablie.

 

mise à jour du 06/2025

* ajout de méthodes à OListBox : « insert » qui permet d'insérer un élément dans la liste, et « setSelect » qui permet de sélectionner manuellement un élément (sans cliquer dessus).

 

* OButton, OButtonCkd, OButtonSld, OButtonLst. Le code interne des boutons change : la variable m_automatique disparaît. Le bouton cliqué est maintenant automatiquement remit à l'état « light ». Utilisez « setState » pour maintenir le bouton à l'état « down ».

 

* OLabel. Correction pour les mode OLABEL_FND_AJUST et OLABEL_FND_BOX > le fond ne disparaît plus s'il n'y a pas de texte (voir refresh).

 

* OKeyboard : les caractères sont mis en tableaux, ce qui autorise d'autres langues. La méthode ECO_tableKey a été améliorée. OEdit a été adapté pour récupérer l’événement capslock.

mise à jour du 05/2025

* OMesh_gltf : on préfèrera passer par getJointOfPart() plutôt que par getJoint_ref(). La fonction est dupliquée pour un nom plus compréhensible.

 

* OUtils : L'état des lumières est « normalisé », avec LIGHT_NULL, LIGHT_OFF, LIGHT_ON, LIGHT_ALWAYS plutôt que LUM_DETRUIT, LUM_ETEINT, LUM_ALLUME

 

* ORteNurd a une nouvelle fonction : getNode(int idx =-1), qui permet de récupérer plus facilement l'emplacement d'un nœud de la ligne (et surtout le dernier). Rappelons qu'il était possible d'accéder à ces données car lst_noeud est publique.

 

* ORteBezier : idem

 

 

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 :) ).

* STB_image (dans le dossier Tiny) remplace LodePng et autres

 

* 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.

bottom of page