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 :

Problème de plaquage de texture avec les tableaux d'indices


Sujet :

OpenGL

  1. #1
    Yno
    Yno est déconnecté
    Membre habitué Avatar de Yno
    Inscrit en
    Novembre 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 138
    Points : 141
    Points
    141
    Par défaut Problème de plaquage de texture avec les tableaux d'indices
    Bonsoir,

    Je cherche à plaquer une texture sur un cube, donc j'ai le tableau des sommets, le tableaux des coordonnées de texture, les indices de sommets et.. les indices de texture

    Bon, un petit code :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    static GLfloat coord[] = {
    	1.000000, 1.000000, -1.000000,
    	1.000000, -1.000000, -1.000000,
    	-1.000000, -1.000000, -1.000000,
    	-1.000000, 1.000000, -1.000000,
    	1.000000, 0.999999, 1.000000,
    	0.999999, -1.000001, 1.000000,
    	-1.000000, -1.000000, 1.000000,
    	-1.000000, 1.000000, 1.000000
    };
     
    static GLfloat texcoord[] = {
    	0.000000, 0.666667,
    	0.000000, 0.333333,
    	0.250000, 0.333333,
    	0.250000, 0.666667,
    	0.500000, 0.666667,
    	0.500000, 0.333333,
    	0.750000, 0.333333,
    	0.750000, 0.666667,
    	0.750000, 0.666667,
    	0.750000, 0.333333,
    	1.000000, 0.333333,
    	1.000000, 0.666667,
    	0.500000, 0.333333,
    	0.500000, 0.000000,
    	0.750000, 0.000000,
    	0.750000, 0.333333,
    	0.250000, 0.666667,
    	0.250000, 0.333333,
    	0.500000, 0.333333,
    	0.500000, 0.666667,
    	0.500000, 1.000000,
    	0.500000, 0.666667,
    	0.750000, 0.666667,
    	0.750000, 1.000000
    };
     
    static GLubyte index[] = {
    	0, 1, 2, 3,
    	4, 7, 6, 5,
    	0, 4, 5, 1,
    	1, 5, 6, 2,
    	2, 6, 7, 3,
    	4, 0, 3, 7
    };
     
    static GLubyte texindex[] = {
    	0, 1, 2, 3,
    	4, 5, 6, 7,
    	8, 9, 10, 11,
    	12, 13, 14, 15,
    	16, 17, 18, 19,
    	20, 21, 22, 23
    };
    Mais avec tout ça, je fais comment pour rendre mon cube avec sa texture, en utilisant les fonctions du style glDrawElements() glArrayElements() etc... ?
    J'ai un livre sur OpenGL qui aborde le sujet, mais sans parler des textures...

    En fait si j'ai bien compris le principe, en appelant les indices index[] dans glDrawElements(), après des glEnableClientState(...), OpenGL va faire (approximativement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    glBegin(GL_QUADS);
    for(i=0; i<count; i++)
    {
      glTexCoord2f(texcoord[indice[i*2]], texcoord[indice[i*2+1]]);
      glVertex3f(coord[indice[i*3]], coord[indice[i*3+1]], coord[indice[i*3+2]]);
    }
    glEnd();
    Le problème, c'est que comme il utilise les indices de mes faces, il ne parcourera jamais tout mon tableau texcoord, et donc j'aurai une texture mal placée.

    Bref, je ne sais pas comment faire, à part passer en mode "manuel" et dessiner chaque sommet etc...

    Merci de bien vouloir m'aider

    EDIT:

    Un ptit lien vers l'image en question, des fois que ça puisse servir :
    http://img226.imageshack.us/img226/8420/caisseyo6.jpg

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je ne pense pas que tu puisses avoir des indices de coordonnées de texture, si tu veux un cube à 6 faces distinctes il faudra 24 sommets.

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    oui, la fomule magique est :
    1 vertex => 1 normale et 1 texcoord uniques lié au vertex.

    si tu veut les mêmes valeurs pour plusieurs vertex, il faut les copier
    * 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

  4. #4
    Yno
    Yno est déconnecté
    Membre habitué Avatar de Yno
    Inscrit en
    Novembre 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 138
    Points : 141
    Points
    141
    Par défaut
    Merci d'avoir répondu

    Arf, il faudrait donc que je crée un petit algorithme qui multiplie le nombre de sommets dans le vertex buffer et qui les places aux bons endroits, en fonction de ma texture ? (pour obtenir le résultat souhaité)
    Vaut-il mieux que je multiplie les sommets ou que j'appel des fonctions plus basiques (glVertex3fv ...) dans une boucle perso ? Quelle méthode est la plus rapide ?
    Ou bien existe-t-il une autre solution magique ?

    Merci d'avance.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il ne faut pas voir ça comme un problème, simplement considérer que tes sommets sont différents même s'ils ont la même position. Un sommet est un tout (normale, couleur, coordonnées de texture, ...), pas seulement un point dans l'espace.

  6. #6
    Yno
    Yno est déconnecté
    Membre habitué Avatar de Yno
    Inscrit en
    Novembre 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 138
    Points : 141
    Points
    141
    Par défaut
    Oui je vois. (je ne l'avais pas assimilé comme ça auparavant ^^)
    Merci beaucoup.

    Donc si j'ai bien compris, je fais plusieurs points, même si ils ont la même position.

    A bientôt.

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

Discussions similaires

  1. Problème avec les tableaux de pointeurs
    Par TheDoci dans le forum C
    Réponses: 2
    Dernier message: 07/01/2007, 13h04
  2. probl. avec les tableaux d'indices de sommets
    Par kagemusha dans le forum OpenGL
    Réponses: 2
    Dernier message: 04/07/2006, 19h41
  3. [Débutant] Problèmes avec les tableaux.
    Par Lwq dans le forum C++
    Réponses: 6
    Dernier message: 01/11/2005, 12h54

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