Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Presentation] Visualiseur de fichiers 3D

Blender -> obj -> monformat -> view (version Alpha)

    17 novembre 2006 à 1:12:58

    Bonsoir à toutes et à tous,

    Cela fait maintenant une dizaine de jours que je programme un petit viewer 3D en OpenGL/SDL.
    J'utilise mon propre format 3D créé à partir d'un fichier Wavefront (.obj) généré avec le script d'export de Blender. (v2.42 script inclu)
    La convertion .obj -> .m3d (je ne décrirai pas la signification de cette subtile extension au nom si finement choisi :-° ) se fait avec un petit convertisseur fait par moi, son développement quant à lui dur depuis un mois exactement.Première question : pourquoi avoir choisi de créer mon "propre" format alors qu'un simple loader .obj aurait suffit ?
    Premièrement parce que obj est en ASCII, donc plutôt gros. (mes fichiers sont en binaire)
    Ensuite parce que je range de façon organisée les données dans mon fichier, ce qui accélère la vitesse de chargement du modèle 3D contenu dans le fichier.

    Allez, une petite image :p
    Image utilisateur

    Ici, un terrain fait par moi-même, dans Blender, étant donné mes grandes connaissances en matière de modélisation, il est strictement interdit de critiquer le modèle :-°

    J'utilise des vertex arrays pour le rendu, les VBOs sont à venir, mais ce n'est pas ma priorité.
    Pour l'instant, mon viewer ainsi que mon exporteur sont en version ultra bêta (Alpha même :p) et je ne gère pas tout le contenu du format obj, surtout au niveau du multi-objets/multi-materiaux.
    C'est en cours de debugging...
    D'autres détails (pas que des détails en fait :-° ) sont également en cours de résolution.

    Je gère presque à 100% les textures en revanche, ci-dessous, la célèbre Suzanne de Blender, gentillement UV-mappée (texturée) par Nab, un ami graphiste, très pratique d'ailleurs :-° Merci à lui :
    Image utilisateur

    Ici, le multi-sampling est activé (4x).

    Pour l'instant, je n'ai intégré aucun calculateur de FPS, mais c'est prévu.
    Une fois j'avais vaguement fait un truc pour calculer mes fps, j'en avait 1000 sur ce modèle je crois bien, c'est ce qui me faisait douter de l'efficacité de mon calculateur...
    J'ai cela dit une 6600GT quand même...^^
    Voici un screen en mode filaire de Suzanne, sans texture cette fois :
    Image utilisateur

    Là, j'ai activé le backface culling, mais je n'ai jamais noté de gros gain avec le backface culling, sauf en mode filaire + multisample :-°

    J'ai quelques autres screens à présenter, mais je préfère demander l'autorisation d'un modérateur... :-°
    Autorisation suprême et supérieur acquise :
    Image utilisateur
    Image utilisateur <- ( zoli point de vue :-° )
    Gros gros modèle (auteur inconnu... source retrouvée : http://www.dedalo-3d.com/index.php, merci à ce site donc ;) ), 25mo en .obj et... un peu plus lourd dans mon format à cause des doublons.
    Il est prévu que j'implémente un détécteur de doublons, mais pas tout de suite.

    Il me reste plusieurs choses à implémenter, notemment le calculateur de FPS, mais voici déjà ce qu'on peut faire à l'heure actuelle :

    - Déplacement autour du modèle, comme dans le tuto de la caméra avancée 1 de Kayl (mais sans glRotate*() et sans avoir lu aucun tuto sur la gestion avancée de la caméra :-° )
    - Affichage/effacement d'un repère 3D (RGB, XYZ)
    - Activation/désactivation du backface culling
    - Activation/désactivation du lighting
    - Zoom (molette)
    - Changement de l'angle de vue (effet jumelles, alt+molette)
    - Changement du mode de dessin: polygones plein/filaire/point

    Il me semble que c'est tout pour le moment. (toute ces options se changent en cours d'execution bien sûr)
    Cependant avant de rajouter d'autre fonctions rigolotes je compte d'abord aboutir à une version correcte de mon exporteur, qui est pour l'instant... une vraie daube. (bien que l'exportation d'un model obj de 25mo ne m'ai pris que 10 secondes :-° )

    Voici donc, c'est tout pour le moment.
    Je vous présenterai d'autres screens au fil de l'évolution de mes programmes, si vous le voulez bien entendu :)
    Pour l'instant, je ne fournirai aucune démo ni aucun code, parce que déjà mon code est limite illisible, est pas très propre, et aucune démo car trop d'incompatibilités, pour l'instant mon programme n'est compilé que pour une version de Linux ayant la glibc2.4 (je crois), et puis j'attends une jolie (qui marche assé bien...) version pour vous donner une petite démo.
    En attendant, j'ai du pain sur la planche, mais pour le moment, c'est l'heure de faire dodo.

    Toutes les critiques sont les bienvenues, ainsi que les encouragements, bien entendu :-°

    Bonne nuit à toutes et à tous.

    EDIT:



    Annonce:


    Je cherche d'aimables Zér0s (un peu plus que des zéros si possible :-° ) pour compiler et bêta-tester mon viewer/exporter sous :
    - MacOS (euh, la version que vous voulez... j'y connais rien)
    MP-moi les volontaires.
    Merci.

    RE-EDIT:



    Téléchargements:

    Wavefront Exporter


    Sources + makefile Unix + un fichier wavefront:
    -zip: http://yno.goldzoneweb.info/wax/downloads/wax_src_v0.2.5_beta.zip
    -tar.bz2: http://yno.goldzoneweb.info/wax/downloads/wax_src_v0.2.5_beta.tar.bz2

    Executable Windows:
    -zip: http://yno.goldzoneweb.info/wax/downloads/wax_win32bin_v0.2.5_beta.zip


    Viewer


    Sources + makefile Unix + un fichier .m3d théoriquement texturé:
    -zip: http://yno.goldzoneweb.info/m3d-viewer/downloads/m3d-viewer_src_v0.2.5_beta.zip
    -tar.gz: http://yno.goldzoneweb.info/m3d-viewer/downloads/m3d-viewer_src_v0.2.5_beta.tar.gz

    Executable Windows + dll:
    -zip: http://yno.goldzoneweb.info/m3d-viewer/downloads/m3d-viewer_win32bin_v0.2.5_beta.zip

    L'exporter ne requiert qu'un compilateur supportant le mode "paranoïaque", sinon éditez le makefile.
    Par défaut le makefile compile avec le flag -D_USE_ARGS, enlevez-le si vous ne souhaitez pas utiliser les arguments.
    L'executable Windows quant à lui ne les utilise pas.

    Le viewer requiert:
    -OpenGL >= 1.1
    -SDL >= 1.2.10
    -GLEW >= 1.3.5
    -libpng >= 1.2.8

    La restriction des versions n'est pas forcément obligatoire, je signal juste les versions que j'utilise pour le développement.

    Ces deux programmes sont sous licence GPL (libre quoi :-° ):
    http://www.gnu.org/copyleft/gpl.html

    Tout rapport de bugs se fait ici ou bien par MP.
    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2006 à 18:14:31

      Hey bravo ! J'avais réalisé un truc dans le même genre mais en beaucoup moins poussé, que export Blender et import OpenGL mais sans les texture ^^

      Tu n'as pas donné de lien, est-ce voulu ?
      • Partager sur Facebook
      • Partager sur Twitter
        17 novembre 2006 à 18:41:24

        Merci :)

        Oui c'est voulu, je l'ai précisé dans mon sujet.

        Citation : Yno

        Pour l'instant, je ne fournirai aucune démo ni aucun code, parce que déjà mon code est limite illisible, est pas très propre, et aucune démo car trop d'incompatibilités, pour l'instant mon programme n'est compilé que pour une version de Linux ayant la glibc2.4 (je crois), et puis j'attends une jolie (qui marche assé bien...) version pour vous donner une petite démo.

        • Partager sur Facebook
        • Partager sur Twitter
          25 novembre 2006 à 18:46:19

          Salut,
          as tu avancer sur ton projet?
          Je suis egalement interresser pour voir les source si possible.

          Sinon ca a l'air d'être un bon travail felicitation.
          A+
          • Partager sur Facebook
          • Partager sur Twitter
            25 novembre 2006 à 19:03:13

            Salut,

            Merci pour tes félicitations :)

            Le projet n'a pas beaucoup avancé, je n'étais pas très disponible cette semaine, mais aujourd'hui je viens justement de m'y remettre et j'ai implémenté un compteur de FPS, et quelques autre bidouilles...
            J'éspère pouvoir vous proposer les sources et une démo très bientôt :)

            Petite annonce:
            Je cherche des gens qui seraient interessés pour compiler mon projet pour Windows et Mac, je ne me débrouille vraiment pas bien avec Windows, et je n'ai pas de Mac.

            A bientôt.
            • Partager sur Facebook
            • Partager sur Twitter
              25 novembre 2006 à 19:08:58

              Pour Mac
              De quoi a besoin ton programme ? Juste d'OpenGL ? Autres .. (sdl)
              • Partager sur Facebook
              • Partager sur Twitter
                25 novembre 2006 à 19:51:43

                OpenGL, GLU et SDL. (simplement SDL, aucune autre bibliothèque tierce de la SDL)
                Ah, et aussi libpng pour les images. (#include <png.h>)

                Voilà :)
                • Partager sur Facebook
                • Partager sur Twitter
                  25 novembre 2006 à 20:06:53

                  Bon, bah envoie-moi un MP si tu veut ! ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 novembre 2006 à 0:46:48

                    Salut,
                    moi je veux bien le compiler sous windows.
                    (pgn.h, faut linker quelque chose avec?)
                    A+
                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 novembre 2006 à 13:12:17

                      ^^ c'est bien tt ca mais ou je peux trouver un tutorial qui peux m'aide a ecrire mon proprs header .h ou .cpp pour lire les donnes de *.obj ; merci
                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 novembre 2006 à 13:15:47

                        CEditeur => le squattage de topic moyen quand même :-° ...
                        (avec du sms en prime >_< ...)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 novembre 2006 à 14:03:51

                          Citation : el_rere

                          CEditeur => le squattage de topic moyen quand même :-° ...
                          (avec du sms en prime >_< ...)



                          C'est moi qui lui ai suggéré de venir ici dans son sujet sur le chargement de modèles 3D
                          Bon evidemment le sms...

                          Si tu as lu mon sujet CEditeur, tu sais que les sources seront bientôt distribuées, donc armes-toi d'un peu de patience, ou alors cherches toi-même sur le Web.

                          EDIT:

                          Par ailleurs, tu es un peu HS el_rere :-°
                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 novembre 2006 à 15:47:49

                            Pour le rendu tu utilise les glVertex3x(); normal ou les vertex array ? vbo ? display list ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 novembre 2006 à 16:30:41

                              Salut,

                              J'utilise pour l'instant de simples vertex arrays.
                              Et, comme je l'ai dis, l'implémentation des VBOs viendra, mais pas tout de suite, pour l'instant je suis concentré sur la prépa de mon bac sur un fonctionnement oppérationnel de mon exporteur ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 novembre 2006 à 16:59:01

                                Je pige pas pourquoi tu dis que tu passeras aux VBOs plus tard alors que leurs utilisations, est très proche des vertex arrays.

                                Allez cadeau, mon code :

                                #include "StaticModel.h"
                                #include <SDL_opengl.h>
                                #include "ExtensionManager.h"
                                #include "ModelLoader.h"
                                #include "ModelManager.h"

                                #include <algorithm>

                                using namespace std;

                                #define BUFFER_OFFSET(i) (void*)((char*)NULL + (i))

                                void StaticModel::LoadFromFile(const char * filename)
                                {
                                    ModelLoader * loader;
                                    loader = ModelManager::getInstance()->getPreferedLoader(filename);
                                    if (loader)
                                    {
                                        loader->loadFaces(_faces,filename);
                                        loader->sortFaceList(_faces);
                                    }

                                    FaceList::iterator vbo_start = _faces.begin();
                                    FaceList::iterator vbo_end = vbo_start;
                                    while (vbo_start != _faces.end())
                                    {
                                        vbo_end = upper_bound(vbo_start,_faces.end(), *vbo_start);

                                        _VBOs.push_back(VBO());
                                        VBO & current_vbo = _VBOs[_VBOs.size()-1];
                                        current_vbo._texture = vbo_start->_texture;
                                        glGenBuffers(1, &current_vbo._id);

                                        current_vbo._vertexCount = 3*distance(vbo_start,vbo_end);
                                        unsigned int datasize = current_vbo._vertexCount*(2*sizeof(double)+3*sizeof(double)+3*sizeof(double));
                                        current_vbo._data = new char[datasize];
                                        char * ptr =  current_vbo._data;
                                        for (FaceList::iterator current_face = vbo_start; current_face != vbo_end; current_face++)
                                        {
                                            for (unsigned int v = 0; v < 3; v++)
                                            {
                                                double * data = (double*)ptr;
                                                data[0] = current_face->_vertices[v]._u;
                                                data[1] = current_face->_vertices[v]._v;
                                                data[2] = current_face->_vertices[v]._normal.X;
                                                data[3] = current_face->_vertices[v]._normal.Y;
                                                data[4] = current_face->_vertices[v]._normal.Z;
                                                data[5] = current_face->_vertices[v]._absoluteposition.X;
                                                data[6] = current_face->_vertices[v]._absoluteposition.Y;
                                                data[7] = current_face->_vertices[v]._absoluteposition.Z;
                                                ptr += 8*sizeof(double);
                                            }

                                        }
                                        glBindBuffer(GL_ARRAY_BUFFER, current_vbo._id);
                                        glBufferData(GL_ARRAY_BUFFER, datasize, current_vbo._data, GL_STATIC_DRAW);
                                        vbo_start = vbo_end;
                                    }
                                }

                                void StaticModel::Render()
                                {
                                    for (std::vector<VBO>::iterator it = _VBOs.begin(); it != _VBOs.end(); it++)
                                    {
                                        glBindBuffer(GL_ARRAY_BUFFER, it->_id);
                                        glBindTexture(GL_TEXTURE_2D,it->_texture);

                                        glTexCoordPointer(2,GL_DOUBLE,8*sizeof(double),0);
                                        glNormalPointer(GL_DOUBLE,8*sizeof(double),BUFFER_OFFSET(2*sizeof(double)));
                                        glVertexPointer(3,GL_DOUBLE,8*sizeof(double),BUFFER_OFFSET(5*sizeof(double)));

                                        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
                                        glEnableClientState(GL_NORMAL_ARRAY);
                                        glEnableClientState(GL_VERTEX_ARRAY);

                                        glDrawArrays(GL_TRIANGLES, 0, it->_vertexCount);

                                        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
                                        glDisableClientState(GL_NORMAL_ARRAY);
                                        glDisableClientState(GL_VERTEX_ARRAY);
                                    }


                                }

                                StaticModel::~StaticModel()
                                {
                                    for (std::vector<VBO>::iterator it = _VBOs.begin(); it != _VBOs.end(); it++)
                                        delete [] it->_data;
                                }



                                Demande si tu veux du détail sur un type (je fous pas les .h) ou une partie de code.
                                Note : ce code est un WIP pour mon tuto, alors je fais pas forcément tout (ie deleteBuffers notamment)...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  29 novembre 2006 à 18:16:47

                                  ooh la patience :colere2: , j'attendre ton tutorial avec impatience :( , pour mon depart je veux seulement charger un cube c'est tout , pas de texture pas des effets de lumiere :D , main bon je vais attendre pas de probleme.
                                  seulement quelque chose :
                                  n'oublie pas d'explique bien les choses ( pour les debutants comme moi ;) )
                                  bonne merci avance et bonne continuation pour vous tous.
                                  Merci www.siteduzero.com
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    29 novembre 2006 à 19:10:41

                                    Citation : Kayl

                                    Je pige pas pourquoi tu dis que tu passeras aux VBOs plus tard alors que leurs utilisations, est très proche des vertex arrays.



                                    A cause des extensions :-°

                                    Je vais installer glew, il parrait qu'il est bien...
                                    Sinon je les chergerai simplement avec la SDL.

                                    Disons que j'ai eu la flemme de faire ça tout de suite.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      29 novembre 2006 à 19:12:11

                                      J'ai pas encore été regarder glew. Pour les extensions que j'utilise ça me dérange pas de les charger moi meme (vbo, multitexturing, shaders).

                                      Bon courage pour la suite de ton outil.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        29 novembre 2006 à 19:12:18

                                        je te propose de le tester , j ai win98se ;) ca m a l air sympa seulement tu mettreas quelque fichiers 3d car je n en ai pas ;):)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          29 novembre 2006 à 19:31:46

                                          J'ai chercher aussi pour tout ce qui est extensions et je suis tombé sur glew (grace a toi) ! Son utilisation est tres facile :


                                          #include <GL/glew.h>
                                          ........
                                          glewInit();


                                          C'est tres tres compliqué :p
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            29 novembre 2006 à 19:52:11

                                            Hélas... :-° :

                                            error: cannot initialize GLEW: Missing GL version

                                            Je vais les charger moi-même, ou alors essayer de trouver la solution à ce petit problème.
                                            Merci pour tes encouragements Kayl. (je préfèrais ton avatar précédent :-° )

                                            @cyclox:
                                            Le but du test est justement d'exporter des fichiers 3D et de les regarder avec mon viewer, donc si tu n'as pas Blender (ou autre) et que tu ne sais pas créer des petits fichiers wavefront, ça ne m'aidera pas beaucoup, mais merci de ta proposition.

                                            EDIT:
                                            @Kayl:
                                            Moi j'comprends pas pourquoi d'utilises le type double, alors qu'il me semble bien que ce type n'est "pas géré" par les cartes graphiques (qui ne fonctionnent qu'en float), même si on peut fournir à OpenGL les données en GLdouble... :euh:
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 décembre 2006 à 20:08:38

                                              Bonsoir,

                                              Voilà, exporter enfin terminé. (enfin, rien n'est jamais parfait :-° )

                                              J'ai très récemment intégré :
                                              - Un algorithme de création d'indices
                                              - Des indices sur 16 bits si possible.

                                              Ces deux optimisations ont énormément réduit la taille des fichiers de sortie :)

                                              Pour vous donner un exemple, avec une scène qui pèse 73mo en .obj, je tombe à 23mo sans la deuxiemme optimisation, et avec, à 19mo.
                                              Bref, pour tous les objets contenant moins de 65536 vertices (unsigned short int) les indices sont stockés sur 16 bits.

                                              Le viewer quant à lui reste très simplissime, il n'est là en réalité que pour tester les fichiers de sortie.

                                              Les liens de téléchargement sont disponibles dans le sujet.

                                              Allez, quelques screens :-° :
                                              http://yno.goldzoneweb.info/m3d-viewer/screens/0.2.0_beta/asters.jpg
                                              http://yno.goldzoneweb.info/m3d-viewer/screens/0.2.0_beta/4_femme5.png

                                              Pour les linuxiens, utilisez -dl pour utiliser un affichage avec des display lists, ou -vbo pour forcer les vbo, mais ce n'est pas trop conseillé :-°
                                              Le flag doit être placé en dernier, --help fourni une brève (très brève) aide.
                                              Ne rien mettre laisse le programme vérifier si l'extension est disponible.
                                              Pour les windowsiens c'est pareil, sauf que le programme vous le demandera au lancement.

                                              Merci à XT95 pour la compilation Windows ;)

                                              Tous les commentaires sont les bienvenus.

                                              A bientôt.

                                              PS:
                                              Je note qu'il n'est pas compatible avec tous les fichiers .obj, pour obtenir un fichier wavefront compatible, il est préférable de l'exporter avec Blender, en cochant impérativement les options suivantes :
                                              http://yno.goldzoneweb.info/wax/img/export_obj.jpg
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                20 décembre 2006 à 21:02:17

                                                Quels sont tes paramètres d'illumination ? (nombre de lumiere, type, couleur, direction etc...)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 décembre 2006 à 21:29:29

                                                  Une seule simple lumière OpenGL qui se déplace avec la caméra.
                                                  En fait je n'ai défini aucun paramètre, je n'ai fais qu'activer le lighting.

                                                  Comme je l'ai dis, cet outil... en est un, et ne présente aucune fonctionnalité de dessin avancé.

                                                  Les paramètres des materiaux sont définis dans le .mtl qui accompagne en principe un fichier .obj, si il n'y en a pas, j'en utilise par défaut.
                                                  0.5 partout je crois, et 50 de shininess.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    20 décembre 2006 à 21:37:11

                                                    Salut,
                                                    tres interresse par ce projet, je viens de dl les source et les executables mais seul le tar.gz s'ouvre. Pour les zip j'ai archive corrompu et pour le tar.bz2, il s'ouvre mais contient un fichier bz2_extracted?

                                                    Voila.
                                                    A+
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      20 décembre 2006 à 21:52:38

                                                      Citation : ZeroZero

                                                      Salut,
                                                      tres interresse par ce projet, je viens de dl les source et les executables mais seul le tar.gz s'ouvre. Pour les zip j'ai archive corrompu et pour le tar.bz2, il s'ouvre mais contient un fichier bz2_extracted?

                                                      Voila.
                                                      A+



                                                      Image utilisateur

                                                      Quel extracteur utilises-tu ?
                                                      Pour le fichier bizarre, je pense que c'est ton extracteur qui te l'a généré.

                                                      Si d'autres personnes rencontrent ce problème, merci de me le signaler.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        20 décembre 2006 à 22:31:18

                                                        Citation : Yno

                                                        Une seule simple lumière OpenGL qui se déplace avec la caméra.
                                                        En fait je n'ai défini aucun paramètre, je n'ai fais qu'activer le lighting.

                                                        Comme je l'ai dis, cet outil... en est un, et ne présente aucune fonctionnalité de dessin avancé.

                                                        Les paramètres des materiaux sont définis dans le .mtl qui accompagne en principe un fichier .obj, si il n'y en a pas, j'en utilise par défaut.
                                                        0.5 partout je crois, et 50 de shininess.



                                                        Ok, c'est ce que je voulais savoir. Merci pour la précision.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          20 décembre 2006 à 22:45:30

                                                          Salut,
                                                          alors pour les zip c'est Win XP qui gère ca et pour les tar.*** j'utilise QuickZip.
                                                          (J'ai essayer d'ouvrir les zip avec QuickZip mais lui aussi me dit que le fichier zip n'est pas correct.

                                                          J'espere que je ne suis pas le seul a avoir le problème (enfin si j'espere pour toi mais pas pour moi enfin bon je me comprend :).

                                                          Si jamais quelqu'un a une piste.
                                                          A+

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            20 décembre 2006 à 22:48:46

                                                            Je vais les essayer sous Windows avec mon QuickZip...
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              20 décembre 2006 à 22:50:37

                                                              ZeroZero essais de retélécharger le zip ... En tout cas le tar.gz est intact!
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [Presentation] Visualiseur de fichiers 3D

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown