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 :

couleur indexé en mode RGBA


Sujet :

OpenGL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut couleur indexé en mode RGBA
    Bonjour tout le monde!!

    J'aimerai afficher un tableau de vertex dont la couleur est indexée. Cette couleur est une constante comprise entre 1 et 10. Le problème est que le reste de l'application est en mode RGBA et que je ne pense pas switcher d'un mode à l'autre juste pour le dessin de mon tableau de vertex.

    J'avais penser utiliser les glPixelMap mais il ne fonctionne que pour les textures. C'est dailleurs la solution que j'utilise actuellement (chaque vertex a une coordonnées de texture qui renvoie dans le tableau de couleurs indexés). Cette solution ne me convient pas car les textures doivent avoir des dimensions particulières (515*512, 256*256)

    Pour le rendu de mon tableau j'utilise les vertex Array (carte intel de m... pas de VBO). L'idéal aurait été pour moi d'utiliser glIndexPointer et de spécifier une table de conversion Index --> RGBA.

    Un conseil ou une idée serait les bienvenues.

    Merci par avance

  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
    Les couleurs indexées c'est vraiment indispensable ? C'est vraiment très rarement utilisé.

  3. #3
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Que souhaites tu faire concrètement ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    le but des couleurs indexés est d'une part qu'elle prennent moins de place en mémoire.

    Mes couleurs sont codés sur 1 octect (char) contre 12 (3 * 4) si je devais converser des float.

    d'autre part je les stocke dans des fichiers (que je produit moi même à partir de relevés topographiques pour être complet).

    La taille sur le disque et en mémoire s'en trouve donc considérablement réduit.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Ti-R
    Que souhaites tu faire concrètement ?
    si je devais résumer : "coder mes couleurs par vertex sur le moins de place possible. Vu que je n'ai qu'une dizaine de couleurs différentes, 1 octet devrait suffire"

  6. #6
    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
    Lorsque tu intègres une composante couleur à un vertex, c'est sous forme d'entier non-signé sur 4 octets. C'est toujours trop gros ?

    Parce que ce que tu veux faire, ça me semble aller chercher des vieux trucs compliqués alors que ça pourrait être si simple. D'ailleurs vu qu'on ne peut pas indexer les composantes séparément, je ne sais même pas si c'est possible.

    A la limite l'idée de la texture me semblait meilleure, ça gêne tant que ça d'avoir des dimensions en puissances de deux ?

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Une solution pourrait être de faire une texture 1D ("couleur indexé")

    Citation Envoyé par troopa
    1 octect (char) contre 12 (3 * 4)
    Texture RGBA c'est 4 octects seulement en UCHAR.. donc tu gagnes pas grand chose.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Laurent Gomila
    Lorsque tu intègres une composante couleur à un vertex, c'est sous forme d'entier non-signé sur 4 octets. C'est toujours trop gros ?
    si j'utilise glColorPointer avec des GL_BYTE et seulement 3 couleurs (pas de transparence), ça me fait 3 octets, non?

    3 octets, ca fait des tailles 3 fois plus grandes !! ça reste jouable mais moins c'est imposant mieux c'est!!!

    Citation Envoyé par Laurent Gomila
    Parce que ce que tu veux faire, ça me semble aller chercher des vieux trucs compliqués alors que ça pourrait être si simple. D'ailleurs vu qu'on ne peut pas indexer les composantes séparément, je ne sais même pas si c'est possible.

    A la limite l'idée de la texture me semblait meilleure, ça gêne tant que ça d'avoir des dimensions en puissances de deux ?
    avec glPixelMap on peut indexer séparément les composantes, mais il fonctionne uniquement pour les textures!

    le problème des textures est que les données que je récupère sous forme de tableau ne sont pas de dimension en puissances de deux. Il faudrait les transformer juste avant de les binder, et ca serait trop couteux.

    Je commence à me résoudre à stocker mes couleurs sur 3 octects car au fil de mes recherche l'indexation me parait impossible!! dommage

  9. #9
    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
    Trop coûteux de transformer un tableau de 10 éléments en un tableau à 16 éléments par exemple ? Ou bien c'est l'ajustement des coordonnées de textures pour tenir compte du padding, qui serait trop coûteux ?

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Laurent Gomila
    Trop coûteux de transformer un tableau de 10 éléments en un tableau à 16 éléments par exemple ? Ou bien c'est l'ajustement des coordonnées de textures pour tenir compte du padding, qui serait trop coûteux ?
    il faudrait transformer une texture de 300*375 en 512*512. L'ajustement des coordonnées de textures ne posent pas de probleme, il suffit qu'elle soit comprises entre 0. et 300/512 par exemple sur X.

    c'est la transformation qui pose probleme, surtout si l'on veut que ce soit efficace!

  11. #11
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Et réduire en texture 1D de 255 élements, cela revient à faire un tableau de couleur indexé sur un octect non ?

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Ti-R
    Et réduire en texture 1D de 255 élements, cela revient à faire un tableau de couleur indexé sur un octect non ?
    ça m'a l'air d' être une vrai bonne idée je m'en vais de ce pas l'essayer!!

  13. #13
    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
    J'ai pas compris pourquoi il te fallait une texture de 300x375 pour stocker 256 couleurs

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Laurent Gomila
    J'ai pas compris pourquoi il te fallait une texture de 300x375 pour stocker 256 couleurs
    oups désolé, je n'avais pas compris la solution que tu avais proposés. Désolé j'ai un peu fait le boulet là, mais j'ai enfin compris ce que vous vouliez me dire.

    Par contre glTexCoordPointer ne propose que GL_SHORT pour indexer mes couleurs alors qu'il aurait fallu GL_BYTE....

  15. #15
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Un exemple sur nehe pour t'aider.


    Par contre glTexCoordPointer ne propose que GL_SHORT pour indexer mes couleurs alors qu'il aurait fallu GL_BYTE....
    Tu peux envoyer un "byte", cela ne va pas géner.

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Ti-R
    Un exemple sur nehe pour t'aider.




    Tu peux envoyer un "byte", cela ne va pas géner.
    Je dois pas bien comprendre car si j'écris :
    glTexCoordPointer(2,GL_BYTE,0,coordArray); j'ai une erreur opengl car GL_BYTE n'est pas autorisé

    et si je le remplace par GL_SHORT, ca ne marche pas car il attend des short et je lui envoi des bytes (rappel: mon coordArray est un tableau de char)

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    J'ai un problème avec les textures, quoique j'écrivent je n'obtiens qu'un carré blanc (couleur de fond de mon quad). Une idée?

    Chargement de la texture :
    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
     
     
     glBindTexture(GL_TEXTURE_1D, _textureId);
     
          float text[64] = 
    	{
    	  0.,0.15,0.3,0.45,0.60,0.75,0.9,1.
     
    	};
     
          glTexImage1D(GL_TEXTURE_1D,
    		   0,
    		   4, //GL_COMPRESSED_RGB_ARB,
    		   64,
    		   0,
    		   GL_RED,
    		   GL_FLOAT,
    		   text);
    Dessin:
    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
     
     glColor4f(1.f, 1.f, 1.f, 1.f);
     
      glEnable(GL_TEXTURE_1D);  
      glBindTexture(GL_TEXTURE_1D, _textureId);
     
      glBegin(GL_QUADS);
     
      glTexCoord1f(0.);
      glVertex2i(-50,-50);
     
      glTexCoord1f(1./64.);
      glVertex2i(-50,50);  
     
      glTexCoord1f(2./64.);
      glVertex2i(50,50);
     
      glTexCoord1f(3./64.);  
      glVertex2i(50,-50);
     
      glEnd();
    le textureId est bien généré et sa valeur est correcte. Dailleurs je viens en me demander comment utilise ton les coordonnées de texture quand celle-ci ne sont pas flottantes et donc non comprises entre 0. et 1. mais entre 0 et N (ce qui est mon cas)

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    J'ai compris de moi même comment je devais transformer mes coordonnées entières entre 0 et 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     glMatrixMode(GL_TEXTURE);
      glPushMatrix();
      glLoadIdentity();
      glScaled(1./(double)TEX_SIZE + 1/(2. * TEX_SIZE),1.,1.);
    par contre je n'ai toujours pas compris ce que tu entends par "envoyer des byte ca ne va pas gener" car si je lui envoie des "char" en lui spécifiant que ce sont des short le résultat est trés mauvais, et je ne peux pas spécifier plus petit que GL_SHORT a glTexCoordPointer

  19. #19
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Oui désolé j'avais lu en travers et je pensais à quelque chose d'autre

    Donc cela fonctionne ?

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 2
    Points
    2
    Par défaut
    Oui cela fonctionne à 2,3 détails prés.

    D'une part je suis obligé d'utiliser une texture 2D (ou je ne saisi que la première ligne). Si j'utilise une texture 1D cela ne fonctionne pas.

    Autre problème étrange les couleurs sont mal rendus, elle ne correspondent pas vraiment à celle que j'ai fixée

    Pourtant je fais rien de plus classique que :

    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
     
    glGenTextures(1, &s_uiTextureId);
     
      glBindTexture(GL_TEXTURE_2D, s_uiTextureId);
     
      glPixelStorei(GL_UNPACK_ALIGNMENT,1);
     
      glTexImage2D(GL_TEXTURE_2D,
    	       0,
    	       GL_RGB,
    	       TEX_SIZE,
    	       TEX_SIZE,
    	       0,
    	       GL_RGB,
    	       GL_UNSIGNED_BYTE,
    	       s_arrColorTable);
    et je remplit ma texture (2D donc) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      for ( int color=0; color<iNbColor && color<TEX_SIZE; color++ )
        {
          s_arrColorTable[0][color][0] = arrColorTable[color][1]; //red
          s_arrColorTable[0][color][1] = arrColorTable[color][2]; // green
          s_arrColorTable[0][color][2] = arrColorTable[color][3]; // blue
        }
    avec des Glubyte dans s_arrcolortable.

    De plus, il y a une effet de dégradé entre deux vertex qui me deplait quelque peu. J'aurais préféré un rendu style GL_FLAT mais est ce que c'est possible vu que j'utilise une texture? je ne pense pas.




    En tout cas, Merci beaucoup, je continue de chercher des réponses à mes problèmes et je n'hésiterai pas à poster si je trouve des réponses.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2010, 20h54
  2. Reduire la palette des images à couleur indexées
    Par blttt dans le forum Graphisme
    Réponses: 0
    Dernier message: 31/08/2009, 18h31
  3. Couleurs DAC en mode VGA 12h
    Par Forthman dans le forum Assembleur
    Réponses: 3
    Dernier message: 08/06/2008, 19h44
  4. [C#]Génération nombre de couleur indexées max
    Par lancer83 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/08/2006, 12h09
  5. Couleur orange en mode console
    Par Johannliebert dans le forum Windows
    Réponses: 2
    Dernier message: 07/02/2006, 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