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 :

[OpenGL/C++] Problème IndexBuffer


Sujet :

OpenGL

  1. #1
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut [OpenGL/C++] Problème IndexBuffer
    oyo voilà g un piti pb qui ne va pas être dur pour vous à mon avis

    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
    // on spécifie les  pointeurs sur les tableaux à OpenGL
    	//glIndexPointer(GL_UNSIGNED_INT, 0,faces);
    	glVertexPointer(3, GL_FLOAT, 0, Vertices);
    	glColorPointer(4, GL_FLOAT, 0, Color);
    	glNormalPointer(GL_FLOAT, 0, Normals);
     
    	//glEnableClientState(GL_INDEX_ARRAY);
    	glEnableClientState(GL_VERTEX_ARRAY);
    	glEnableClientState(GL_COLOR_ARRAY);
    	glEnableClientState(GL_NORMAL_ARRAY);
     
    	//glDrawArrays(GL_TRIANGLES,0,nb_faces*3);
    	glDrawElements( GL_TRIANGLES, nb_faces*3, GL_UNSIGNED_INT, faces);
     
    	//glDisableClientState(GL_INDEX_ARRAY);
    	glDisableClientState(GL_COLOR_ARRAY);
    	glDisableClientState(GL_VERTEX_ARRAY);
    	glDisableClientState(GL_NORMAL_ARRAY);
    comme ça ça marche, mais si vous enlever les commentaire et mettez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glDrawElements( GL_TRIANGLES, nb_faces*3, GL_UNSIGNED_INT, faces);
    en commentaire ça marche pu... pk j en sais rien ! l'index reste le même pourtant :'(
    svp à l aide !!!!

  2. #2
    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
    et ton tableau d'index, c'est bien un unsigned int qui contient les bonnes informations ?
    * 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

  3. #3
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    malheureusement oui :'(

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Tableau des faces
    GLuint *faces = NULL;	
     
    // Vertex Arrays
    GLfloat *Normals = NULL;
    GLfloat *Color = NULL;
    GLfloat *Vertices = NULL;
    c pour ça que c trés bizard !! ça marche avec l'autre et pas avec le tableaux de pointeur à part...

  4. #4
    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
    et il contient quoi tu tableau d'index ?

    essay en le remplissant de 1 a N, normalement ca devrait donner le même resultat que drawArray()
    il suffit de faire une simple petite boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (unsigned int i = 0; i< faceSize; i++){
        faces[i] = i;
    }
    * 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

  5. #5
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    en fait il en a rien à foutre de mon tableau d'index...

    car si je le met ou je le met pas j'ai pareil à l'affichage...

    est-ce que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glDrawArrays(GL_TRIANGLES,0,nb_faces*3);
    tiens compte du pointeur sur un index ?

    ou y'a t il un ordre pour :

    y avait un tuto sur gametutorial.com mais maintenant c payant :'(

  6. #6
    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
    c'est normal que drawArray ne teinne pas compte de ton tableau d'index... il n'est pas fait pour ca...
    DrawArray affiche l'ensemble du tableau en parcourant tout les vertex 1 par 1 alors que drawElements parcourt le tableau d'index et affiche le vertex adressé par l'index...
    * 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

  7. #7
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    tu pouvais pas le dire avant lol en gros g trouvé tt seul la soluce lol !

    bon je pensais qu il tenait compte de tous les Arrays déclaré, alors comment on utilise "glIndexPointer", ça sert à qq chose ??? sinon y a une autre fonction qui peut s'en servir sans utiliser : "glDrawElements"

  8. #8
    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
    les tableau d'index servent quand tu a des vertex partagé entre plusieurs face. ce sert a ne pas dupliquer les vertex en memoire (et en plus en cas de modification d'un vertex de la geometrie, tu n'a pas a repercuter le changement sur tout les autres vertex des faces liée.

    par exemple pour un cube affichée en GL_QUADS, au lieu de crée 6*4 vertex (4 vertex pour chaque faces) tu en crée 8 et un tableau de 24 index... gain de memoire...

    sinon c'est aussi utilisable avec les vertex buffer object ce truc (les VBO n'etant qu'une amelioration des vertex array...)
    * 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

  9. #9
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    euh... c t pas ma question mais tu as un bon savoir lol je sais ce que c puisque j'y utilise lol

    la question est comment l'utiliser !!! (du code est attendu)

  10. #10
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    c bon g cherché

    http://msdn.microsoft.com/library/de...unc03_36lu.asp

    glIndexPointer c pour les couleurs indexé, rien à voir avec l'index pour les vertexes !

  11. #11
    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
    ben a priori pour l'utiliser c'est ce que tu a fait mais avec une tableau de faces bien rempli... (et sans index pointer )
    * 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

  12. #12
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    cette méthode ne doit marcher qu avec les indexbuffer/vertexbuffer ARB alors... pourtant je pensais que ça pouvait marcher :'(

  13. #13
    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
    la methode des tableau d'index marche avec les vertex array (qui ont été rajouté par l'ARB a openGL1.1 je croit...) donc normalement pas de probleme...
    * 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

  14. #14
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    bon alors méthode que g inventé pour utiliser :

    glIndexPointer() en tant qu'index pour les vertex

    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
    // on spécifie les  pointeurs sur les tableaux à OpenGL
    	glIndexPointer(GL_INT, sizeof(GLint),(int*)faces);
     
    	glVertexPointer(3, GL_FLOAT, sizeof(GLfloat)*3, Vertices);
    	glColorPointer(4, GL_FLOAT, sizeof(GLfloat)*4, Color);
    	glNormalPointer(GL_FLOAT, sizeof(GLfloat)*3, Normals);
     
    	glEnableClientState(GL_VERTEX_ARRAY);
    	glEnableClientState(GL_COLOR_ARRAY);
    	glEnableClientState(GL_NORMAL_ARRAY);
     
    	void* ptr = NULL;
    	glGetPointerv(GL_INDEX_ARRAY_POINTER,&ptr);
     
    	glDrawElements( GL_TRIANGLES, nb_faces*3, GL_UNSIGNED_INT, (GLuint*)ptr);
     
    	glDisableClientState(GL_COLOR_ARRAY);
    	glDisableClientState(GL_VERTEX_ARRAY);
    	glDisableClientState(GL_NORMAL_ARRAY);
    pk j'avais besoin de ça ? eh bas pour séparer l'appel de l'indexbuffer et du vertexbuffer dans 2 fonctions différentes, pour avoir une classe qui gère les index et une autre qui gère les vertexes voilà si ça peu aider qq un

  15. #15
    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 Bob.Killer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // on spécifie les  pointeurs sur les tableaux à OpenGL
    	glIndexPointer(GL_INT, sizeof(GLint),(int*)faces);
     
    	[...]
    	void* ptr = NULL;
    	glGetPointerv(GL_INDEX_ARRAY_POINTER,&ptr);
     
    	glDrawElements( GL_TRIANGLES, nb_faces*3, GL_UNSIGNED_INT, (GLuint*)ptr);
    hum... tu lui passe en parametre une information que tu recupere juste apres mais sous un autre nom... c'est pas vraiment tres utile, tu peut tres bien gerer les index sans pour autant passer par les index buffers...
    * 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

  16. #16
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    non tu n as pas compris le but que g expliqué au dessus avec des classes différentes index et vertex comment passé l'index au dessin du vertex sans se faire chier bas je le stock dans l'index couleur d'opengl comment ça de pbs
    si tu veux que je t'explique le procédé avec du code dis moi je t'éclairerais

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

Discussions similaires

  1. [Opengl] Labyrinthe problème
    Par pspflashsystem dans le forum OpenGL
    Réponses: 0
    Dernier message: 12/04/2009, 19h58
  2. OpenGl VBO : problème de coordonnées de texturage
    Par Heero Yui dans le forum OpenGL
    Réponses: 1
    Dernier message: 22/03/2009, 10h33
  3. [Delphi : OpenGL / SDL] Problème de textures
    Par Carrick dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2009, 13h44
  4. Réponses: 2
    Dernier message: 01/11/2007, 10h26
  5. [OpenGL/C++] Problème Device Opengl
    Par Bob.Killer dans le forum OpenGL
    Réponses: 3
    Dernier message: 27/09/2005, 11h04

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