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

  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.

  7. #7
    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
    WOUAHAa Merci!

    Alors en effet blender créeais de quads . Je l'ai triangulisé, retiré un vertex de la boucle pour en laisser que 3 et ca fonctionne!!



    Apresent il me reste a faire les normales textures etc.

    Je ne met pas encore résolu j'en aurais besoin d'aide encore

    edit: Ah oui j'oubliais, en fait pour que ca marche j'ai du ajouter -1 a chaque index, j'ai vu ca sur un autre loader:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    glVertex3d(vertex[ face[i].a-1 ].x,vertex[ face[i].a-1 ].y,vertex[ face[i].a-1 ].z);
                glVertex3d(vertex[ face[i].b-1 ].x,vertex[ face[i].b-1 ].y,vertex[ face[i].b-1 ].z);
                glVertex3d(vertex[ face[i].c-1 ].x,vertex[ face[i].c-1 ].y,vertex[ face[i].c-1 ].z);
    Si quelqun serait m'éxpliquer pourquoi il fallait faire ca?
    Merci

  8. #8
    Invité
    Invité(e)
    Par défaut
    le '-1' surement une sombre histoire d'indices des tableaux qui commence à 0 et que dans la partie indexation, le format indique la place (à savoir 1ere, 2eme, 3eme...)


    1ere place => index 0
    2eme place => index 1

    enfin bon

  9. #9
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    oui oui, c'est très exactement ca, le .obj commence à indexer à 1 alors qu'en C on commence à 0, il faut donc retirer 1 à tout les index (ou introduire un vertex bidon en debut de tableau si on aime les solutions crado )
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  10. #10
    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
    Ei ban
    Je comprends mieu.
    Comme en chaque moment on en apprends des choses
    Merci de votre aide

  11. #11
    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
    A noter que si tu veux utiliser des vertex arrays ou vbo avec un modèle contenant des indices de texture, de normales et de vertices, tu devrais crééer des tableaux pour les textures et les vertices, du au fait que des vertices seront partagées entre plusieurs faces, et qu'au contraire tu auras une normale par vertex, tu vas devoir donc dupliquer des vertices...

    Moi, ce que je fais et ce qui me paraît le plus simple, c'est que puisque les normales sont dans l'ordre, par exemple :

    face1 :
    normale1 : x y z;
    normale2 : x y z;
    normale3 : x y z;

    Je n'ai donc pas besoin de crééer de nouveaux tableaux pour les normales, par contre je créé un nouveau tableau pour les vertices dans l'ordre des faces.

    Par exemple si j'ai ça :

    face1 : v1 v3 v2
    face2 : v3 v2 v4

    Mon tableau de vertices contiendra :

    v1 v3 v2 v3 v2 v4... Comme ça les normales seront pris dans l'ordre, tout comme les vertices. Il faudra faire de même avec les textures.

    Je suis pas clair mais bon, tu verras le problème quand tu vas essayer de passer aux vertex arrays.

  12. #12
    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
    Merci!!

    Toujours bon à savoir, je pense que je vais m'intérésser de près aux vertex arrays (car VBO je pense que c'est trop tot(?), si on suit le marché) des ce week end et je comprendrai mieu

  13. #13
    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
    Citation Envoyé par Happy
    Merci!!

    Toujours bon à savoir, je pense que je vais m'intérésser de près aux vertex arrays (car VBO je pense que c'est trop tot(?), si on suit le marché) des ce week end et je comprendrai mieu
    Bof, une fois que tu as ton code en vertex arrays, c'est super facile de faire du vbo, et puis tu gagnes énormément en perfs. Je pourrai t'expliquer si tu veux .

  14. #14
    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
    Merci
    Je vois que tout le monde parle de VBO que ca serait un bon choix, vais m'intérésser à ca de pres ce week end, faire des tests etc.
    Pour le moment je doit arranger le loader pour les index normales et téxtures, les slash des faces du fichier .obj sont bien derrangeants, je doit passer par des trucs plus cool avec string substr() , c'est cool de créer un loader, on en apprends des choses!

  15. #15
    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
    Voilà pourquoi j'ai laché le format obj : les slashs qui sont trop galères à gérer... Le format ase n'a pas ce problème.

  16. #16
    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
    Pour ma part je trouve le format ASE bien plus compliqué , m'enfin je devrait passer par sa création certainement apres la fin de ce loader obj

    Pour les slash ca m'a fait peur au début mais heureusement que string et google sont la, voici un petit éxample de comment je fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string temp= "21/15/30";
    int pos1 = temp.find('/',0);
    int pos2 = temp.find('/',pos1+1);
    string index_vertex = temp.substr(0,pos1);
    string index_texture = temp.substr(pos1+1,pos2-(pos1+1));
    string index_normal = temp.substr(pos2+1,temp.size()-(pos+1));
    Et voila probleme résolu
    Merci

    edit: YESS voila j'ai eu 2 minutes pour essayer l'intégration des normales et textures, etj'ai réussi



    Normallement les coord de téxtures sont déjà implémentes, me reste à lire le fichier .mtl pour le chemin de la téxture je crois, m'en vais lire la doc obj

    Puis je pense que 300 fps c'est pas top , je pense que je peut tirer bien plus d'OpenGL avec VA ou VBO

    edit2: waii voilà avec téxture

    Model dans maya:


    Model chargé:


    Mais le problème avant de passer a autre chose, se situe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vec3f vertex[1000]; // struct 3 floats
    vec3i index_vertex[1000]; // structure 3 ints
    Je ne veu pas créer le tableau ainsi, c'est pas comme ca qu'il faut faire ,j'ai entendu dire avec vector?
    Je ne comprends pas comment ca fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<vec3f>vertex; // ca compile mais plante
    Si quelqun serait m'aider
    Merci

  17. #17
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    pour ajouter quelque chose dans un vector, il ne faut pas faire un
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vect.push_back(...);
    et ca l'ajoute à la fin du vecteur
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  18. #18
    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
    "vect.push_back(...);"
    Merci!! Encore un pas en avant!

  19. #19
    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
    Alors avant passer aux VBO, je doit tester les VertexArrays, mais problème, voici comment je fais pour l'instant:
    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
    23
    24
    25
    26
    27
    28
    29
    vector<vec3f>vertex;        // struct 3 floats .. // contains the vertices
        vector<vec3i>index_vertex;  // struct 2 ints ..   // contains the face indices
     
        vector<vec3f>normal;
        vector<vec3i>index_normal;
     
        vector<vec2d>texture;
        vector<vec3i>index_texture;
     
     
     /// load fonction
    {
      // bla bla
      // remplissage des tableaux
     
      // pour les vertex array
     // je ne sait pas si c'est une fois à l'init qu'il faut mettre ces fonctions,
     // mais logiquement, c'est bien ca 
     glNormalPointer(  GL_FLOAT,0,&normal[0]);
     glVertexPointer(3,GL_FLOAT,0,&vertex[0]);
    }
     ///
     
    /// draw fonction
    {
     // affichage 
    glDrawElements(GL_TRIANGLES,sizeof(&index_vertex[0])/sizeof(float),GL_UNSIGNED_INT,&index_vertex[0]);
    }
    ///
    Alors tout compile et s'éxécute correctement, sauf que j'ai rien à l'écran .
    Ou serait le probleme?
    Je pense que je devrait essayer de faire ca avec un quad écrit à la main, en le passant en VA, je vais essayer ca demain, mais en attendant si quelqun trouve l'erreur ca m'éviterai de perdre le temps
    Merci

  20. #20
    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
    Citation Envoyé par Happy
    Alors avant passer aux VBO, je doit tester les VertexArrays, mais problème, voici comment je fais pour l'instant:
    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
    23
    24
    25
    26
    27
    28
    29
    vector<vec3f>vertex;        // struct 3 floats .. // contains the vertices
        vector<vec3i>index_vertex;  // struct 2 ints ..   // contains the face indices
     
        vector<vec3f>normal;
        vector<vec3i>index_normal;
     
        vector<vec2d>texture;
        vector<vec3i>index_texture;
     
     
     /// load fonction
    {
      // bla bla
      // remplissage des tableaux
     
      // pour les vertex array
     // je ne sait pas si c'est une fois à l'init qu'il faut mettre ces fonctions,
     // mais logiquement, c'est bien ca 
     glNormalPointer(  GL_FLOAT,0,&normal[0]);
     glVertexPointer(3,GL_FLOAT,0,&vertex[0]);
    }
     ///
     
    /// draw fonction
    {
     // affichage 
    glDrawElements(GL_TRIANGLES,sizeof(&index_vertex[0])/sizeof(float),GL_UNSIGNED_INT,&index_vertex[0]);
    }
    ///
    Alors tout compile et s'éxécute correctement, sauf que j'ai rien à l'écran .
    Ou serait le probleme?
    Je pense que je devrait essayer de faire ca avec un quad écrit à la main, en le passant en VA, je vais essayer ca demain, mais en attendant si quelqun trouve l'erreur ca m'éviterai de perdre le temps
    Merci
    Voilà je vais te montrer comment je fais moi pour les VBOs :

    Je récupère d'abord toutes les vertices, les normales, les textures, les faces,...

    Puis je recréé un tableau avec les vertices :

    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
    // On duplique toutes les vertices pour pouvoir utiliser les VBO
       tabVertices = new float [m_iNumFaces * 9];
     
       for (int i = 0 ; i < m_iNumFaces ; ++i)
       {
          tabVertices [9 * i] = m_vVertices [m_vFaces [i].indexVertices [0]].x;
          tabVertices [9 * i + 1] = m_vVertices [m_vFaces [i].indexVertices [0]].y;
          tabVertices [9 * i + 2] = m_vVertices [m_vFaces [i].indexVertices [0]].z;
     
          tabVertices [9 * i + 3] = m_vVertices [m_vFaces [i].indexVertices [1]].x;
          tabVertices [9 * i + 4] = m_vVertices [m_vFaces [i].indexVertices [1]].y;
          tabVertices [9 * i + 5] = m_vVertices [m_vFaces [i].indexVertices [1]].z;
     
          tabVertices [9 * i + 6] = m_vVertices [m_vFaces [i].indexVertices [2]].x;
          tabVertices [9 * i + 7] = m_vVertices [m_vFaces [i].indexVertices [2]].y;
          tabVertices [9 * i + 8] = m_vVertices [m_vFaces [i].indexVertices [2]].z;
       }
    Tout ce que je fais là, c'est mettre dans un tableau toutes les vertices dans l'ordre, certaines sont dupliquées.

    Puis je créé le tableau de textures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    tabTextures = new float [m_iNumFaces * 6];
     
       for (int i = 0 ; i < m_iNumFaces ; ++i)
       {
          tabTextures [6 * i] = m_vTexCoords [m_vFaces [i].indexTextures [0]].u;
          tabTextures [6 * i + 1] = m_vTexCoords [m_vFaces [i].indexTextures [0]].v;
     
          tabTextures [6 * i + 2] = m_vTexCoords [m_vFaces [i].indexTextures [1]].u;
          tabTextures [6 * i + 3] = m_vTexCoords [m_vFaces [i].indexTextures [1]].v;
     
          tabTextures [6 * i + 4] = m_vTexCoords [m_vFaces [i].indexTextures [2]].u;
          tabTextures [6 * i + 5] = m_vTexCoords [m_vFaces [i].indexTextures [2]].v;
       }
    Quant aux tableau des normales, pas besoin de recréer un nouveau tableau puisqu'elles sont déjà dans le bon ordre. Et pour dessiner (je te mets la verison vertex arrays pour que tu comprennes mieux) :

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

    glVertexPointer (3, GL_FLOAT, 0, tabVertices);
    glTexCoordPointer (2, GL_FLOAT, 0, tabTextures);
    glNormalPointer (GL_FLOAT, 0, &m_vNormales [0].x);

    glDrawArrays (GL_TRIANGLES, 0, m_iNumFaces * 3);

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


    Si tu comprends pas, tu peux me le dire

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