IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Loader (Wavefront) .obj


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut Loader (Wavefront) .obj
    Hey

    Alors voila je voulait charger u modèle .obj, mais je ne comprends pas comment je doit assigner les vertices en fonction des faces.

    Le format OBJ ressemble ~ a ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // les vertex
    v 0.437500 0.164063 0.765625
    v -0.437500 0.164063 0.765625
    v 0.500000 0.093750 0.687500
    v -0.500000 0.093750 0.687500
    v 0.546875 0.054688 0.578125
     
    // les faces
    f 47 1 3 45
    f 4 2 48 46
    f 45 3 5 43
    f 6 4 46 44
    f 3 9 7 5
    Les vertex sont juste des points dans l'éspace, pas encore une géometrie, je doit envoyer à OpenGL par rapport aux faces mais dans quel ordre?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Ca veut dire que la face 1 est un quad composé des vertex 47, 1, 3, 45,....

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu as un vertex buffer (un bête tableau) qui est rempli avec les vertices...

    ensuite, un index buffer, qui donne qu'elle vertices utiliser pour chaque polygone

    mais je crois que je repete ce que Bakura viens de dire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    vb = remplir_vertexbuffer();
    ib = remplir_indexbuffer();
     
    for(i = 0 ; i < num_face ; i += 4) {
       glBegin(GL_QUADS);
          glVertexfv(vb[ ib[i] ]);
          glVertexfv(vb[ ib[i+1] ]);
          glVertexfv(vb[ ib[i+2] ]);
          glVertexfv(vb[ ib[i+3] ]);
       glEnd();
    }
    dervait faire a peu pres ce que tu veux

  4. #4
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    EXCELLENT!!!

    Vraiment super ce que je vien d'apprendre lol!

    Merci beaucoup, je vais tout de suite essayer ^^

  5. #5
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Effectivement,

    A chaque fois il y a un truc qui ne vas pas.

    Cette fois meme avec éxample je n'arrive pas a afficher correctement les faces d'apres les indices .

    Voici ce que j'ai pour le moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    // struct
    int numFaces;
    int numVerts;
    vec3f vertex[1000]; // struct 3 floats
    vec4i face[1000]; // structure 4 ints
     
    // bla bla
       // bla bla
         // ..
            // read VERTICES
                    if ( info == "v" )
                    {
                        iss>>vertex[numVerts].x>>vertex[numVerts].y>>vertex[numVerts].z;
                        numVerts++;
                    }
                    // READ FACE INDICES
                    if ( info == "f" )
                    {
                        iss>>face[numFaces].a>>face[numFaces].b>>face[numFaces].c>>face[numFaces].d;
                        numFaces++;
                    }




    Puis pour l'affichage jeteste avec le mode immédiat d'OpenGL pour ensuite passer aux Vertex arrays ou Vertex Buffer array, je verrais, mais je n'en suis pas encore là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void draw()
        {
            glPointSize(5);
            glBegin(GL_TRIANGLES);
            for ( int i = 0; i < numFaces; i++ )
            {
                glNormal3d(vertex[ face[i].a ].x,vertex[ face[i].a ].y,vertex[ face[i].a ].z);
     
                glVertex3d(vertex[ face[i].a ].x,vertex[ face[i].a ].y,vertex[ face[i].a ].z);
                glVertex3d(vertex[ face[i].b ].x,vertex[ face[i].b ].y,vertex[ face[i].b ].z);
                glVertex3d(vertex[ face[i].c ].x,vertex[ face[i].c ].y,vertex[ face[i].c ].z);
                glVertex3d(vertex[ face[i].d ].x,vertex[ face[i].d ].y,vertex[ face[i].d ].z);
            }
            glEnd();
        }
    Ca donne ceci:

    Normallement l'objet original doit ressembler a ceci:
    http://photobucket.com/albums/v635/o...dermonkey4.jpg
    (Blender 3D)

    Biensûr je vais contineur de chercher l'ordre mais si quelqun connait l'erreur, ca pourrait m'éviter des beaucoup du travail
    Merci!

  6. #6
    Yno
    Yno est déconnecté
    Membre éprouvé Avatar de Yno
    Inscrit en
    Novembre 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 138
    Par défaut
    Salut,

    C'est une impression, ou tu fais des triangles à 4 sommets ?

    J'ai personnellement fais un exporteur .obj (un peu cacateu, voir mon dernier sujet ) et suzanne (ton singe ^^) ne contient que des quads une fois subdivisée dans Blender. (d'ailleurs, la subdivision de Blender transforme tout model en faces à 4 sommets)
    A moins que tu ai choisi l'option "Triangulate" ce qui fait que ton model .obj ne contient que des triangles.

Discussions similaires

  1. [Blender] Exporter un Wavefront (.obj)
    Par Ezarion dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 07/01/2011, 09h42
  2. Mesh depuis wavefront .obj
    Par yohannc dans le forum DirectX
    Réponses: 4
    Dernier message: 23/05/2010, 12h01
  3. Problème affichage cube (loader .obj)
    Par barbieaqua dans le forum OpenGL
    Réponses: 11
    Dernier message: 03/04/2008, 19h31
  4. Loader des .obj avec glm sdl
    Par lapointemar dans le forum SDL
    Réponses: 0
    Dernier message: 23/08/2007, 02h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo