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 :

Utilisation de glTexCoordPointer


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut Utilisation de glTexCoordPointer
    Bonjour,

    Je cherche un moyen d'appliquer les coordonnées UV d'un objet dont les vertices sont stockés dans un tableau (vertexList).
    J'ai 2 tableaux d'idices :
    - 1 pour mes faces triangulaires
    - 1 pour mes faces rectangulaires

    J'affiche le tout avec un glDrawElements et tout vas bien dans le meilleur des mondes

    Tout se complique quand je veux appliquer des coordonnées UV à mon objet.

    En effet, j'ai une liste de coordonnées de textures (texCoordList) et une liste d'indice correspondant (triangleListTex et quadListTex).

    Et la je bloque... pas moyen de comprendre comment je peut donner ce a manger à OpenGL en utilisant glTexCoordPointer.
    J'ai beau chercher, je ne trouve pas comment glDrawElements peut associer mes tableaux d'indices de texture au vertices lors de la création des facettes.

    Mon code ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     
    glVertexPointer(3, GL_FLOAT, 0, vertexList);
    glTexCoordPointer(3, GL_FLOAT, 0, texCoordList);
     
    // Affichage des faces triagulaires
    glDrawElements(GL_TRIANGLES, nbTriangles*3, GL_UNSIGNED_INT, triangleList);
    // Affichage des faces rectangulaires
    glDrawElements(GL_QUADS, nbQuads*4, GL_UNSIGNED_INT, quadList);
     
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    Quelqu'un peut me dire comment je peux organiser mes données ? Ou me donner un lien relativement clair à ce sujet ?

    Merci d'avance

  2. #2
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Salut,

    Je ne sais pas trop pourquoi tu aurais des triangles et quads mélangés dans un maillage mais tu dois avoir une excellente raison :p
    En géneral on peut très bien se demerder qu'avec des triangles, et donc une seule liste pour les indexs, une seule pour les points et une seule pour les coordonées de textures ( un quad rectangulaire, ça donne 2 triangles hein :p ), c'est plus pratique.

    Après, question organiser les données, ce qui est sympa est d'avoir un seul tableau de sommet à traiter où les sommets contiennent toutes les infos nécessaires ( coordonées, tex coord , normale ... ) et a coté un seul tableau d'index.
    Puis jouer avec les parametres des fonction glnianiaPointer pour préciser à opengl comment bien lire le tableau ( en précisant le nombre d octets à sauter pour atteindre les prochaines valeurs à lire ).

    Sinon je ne vois vraiment pas comment tu peux t en sortir avec ton organisation actuelle là

  3. #3
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Ok je vais voir avec le conseil que tu me donne.

    En effet je peut exporter mes modèles uniquement avec des triangles mais je m'était dit que ca pouvais peut être optimiser l'affichage si je réduisait le nombre de facettes.

    Apparemment c'était une erreure et je vais voir pour avoir un unique tableau pour mes "normales / coordonnées de textures / vertex" avec un unique tableau d'ID comme tu me le conseille.

    Au passage, quelqu'un connais un bon bouquin d'OpenGL ? Je me rend compte que je n'arrive pas a avoir les réponse aux questions que je me pose uniquement en cherchant sur le NET.

    Merci

  4. #4
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Pour le bouquin tu as l'officiel , appellé aussi le red book,
    http://www.opengl.org/documentation/red_book/

    J'avais acheté l'officiel pour opengl 1.2, il était très bien donc j'imagine que celui là aussi.
    Ceci dit, il n'y aura pas non plus toutes les réponses aux questions que tu te poses... Ou alors rapidement expliquées, sinon le bouquin serait énorme ^^

    L'idéal reste quand même de poser tes questions sur les forums et avec un peu de chance quelqu un de plus experimenté prendra le temps de bien expliquer en détaillant !

    Sinon la doc officielle online sur chaque fonction est très chouette aussi, ça énonce l'utilité, les differents paramètres et après tu n'as plus qu'a tester ça par toi même, je pense que c'est la meilleure façon d'apprendre !

    Breef !
    Si tu tiens vraiment à optimiser ton "affichage", oublie les vertex array et regarde du coté des VBO ( Vertex Buffer Object ).
    Avec les vertex array à chaque tour les infos sur ta geometrie est envoyée du CPU au GPU, ça prend du temps !
    Alors qu'avec un VBO tu transfert les infos sur le GPU qu'une fois, puis si ta geometrie change, tu mets à jour les infos qui ont changés directement sur la carte graphique.

    Mais bon, il vaut mieux maitriser et bien comprendre les bases avant de regarder plus loin comment optimiser le tout ( et il y en a pas mal d'optimisations avec les extensions opengl :p )

    Enfin bref, c'est la méthodologie que j'applique, j'avance pas par pas en faisant des test sur de petite programmes pour bien tout comprendre et maitriser avant de passer à plus compliqué.

    Tout ça pour dire que optimiser, c'est pour plus tard, quand on en a vraiment besoin

  5. #5
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Salut !

    Je voudrais revenir la dessus :

    Citation Envoyé par Harooold Voir le message
    Après, question organiser les données, ce qui est sympa est d'avoir un seul tableau de sommet à traiter où les sommets contiennent toutes les infos nécessaires ( coordonées, tex coord , normale ... ) et a coté un seul tableau d'index.
    Arrète moi si je me trompe, mais cela n'est possible que si un vertex possède une seule coordonnée de texture. Si 2 facettes qui partagent un même vertex mais pas la même texture, cela n'est plus possible avec cette structure non ?

    Merci pour tes réponses

  6. #6
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Je ne vois pas trop un cas où deux facettes du même objet partageraient un même sommet mais pas la même texture.. Si tu arrives dans ce cas là, c'est que ta scène est mal décomposée.

    Imagine une scene composée de 4 murs, un sol et une table.
    Les murs, le sol et la table sont tout les 5 des maillages. Chacun va donc être une instance distincte d'une classe maillage. Ils auront tous un tableau de sommets et de faces. Sur chacun de ses maillages tu appliques une ou plusieures textures, mais tout les points de chaque maillages partagent les même coordonées de texture.

    Enfin, ce que je veux dire, c'est qu'il faut bien séparer chaque objet de la scene, afin de pouvoir faire des traitements spécifiques sur chacun d'eux sans que ça en modifie un autre.

    Bref, pour répondre à la question initiale, nan, en regroupant toutes les infos sur chaque sommets on ne peut pas s'amuser à appliquer plusieures coordonées de textures sur les même sommets, ou alors il faudrait faire un second tableau de sommets, mais ça dupliquerait l'info, on va éviter

    Essaie d'expliquer exactement ce que tu cherches à réaliser, voir comment on peut organiser tout ça ! J'ai un peu de mal à voir à quoi tu veux arriver.

  7. #7
    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
    Citation Envoyé par Higestromm Voir le message
    Arrète moi si je me trompe, mais cela n'est possible que si un vertex possède une seule coordonnée de texture. Si 2 facettes qui partagent un même vertex mais pas la même texture, cela n'est plus possible avec cette structure non ?
    On ne le répètera jamais assez : avec des vertex array, un vertex, c'est un multiplet {position,normale,texCoord, etc...}
    donc dans ton cas, si tu as une position avec plusieurs coordonnées de texture différentes, il va falloir dupliquer la position.
    * 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

  8. #8
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Je donne un exemple.

    Blender peut me générer un mapping comme celui-ci pour un objet :



    On se rend bien compte que dans notre cas, les points A et B des 2 faces que j'ai coloré sont les mêmes et pourtant, possèdent des coordonnées de textures différentes.

    Merci Bafman pour ton aide.
    Si j'ai bien compris, je doit déclarer 2 fois mes points A et B dans mon vertex Array. Une fois pas facette ?

    Merci encore

  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
    Citation Envoyé par Higestromm Voir le message
    Si j'ai bien compris, je doit déclarer 2 fois mes points A et B dans mon vertex Array. Une fois pas facette ?
    non, tu n'est pas obligé de les déclarer une fois par facette, si jamais ils ont la même position et la même coordonnée de texture, tu peut les partager sans problème. Mais dans ton exemple, il faut effectivement créer 2 vertex different pour chaque couple {position,texCoord} different.
    * 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 éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Bon bah ca y est Tout fonctionne comme il faut

    Merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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