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 :

Texture + LookUp Table + Shader + extensions


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 84
    Par défaut Texture + LookUp Table + Shader + extensions
    Bonjour,

    Je voudrais appliquer une lookup table a mes textures avant le blending et companies.

    Comment puis-je faire, sachant que j'ai une carte Nvidia de derniere generation et donc qui ne gere pas glColorTableEXT.

    Je suppose qu'il faut que je fasse du texture shader, mais si vous pouvez m'en dire plus... cela serait appreciable.

    Merci,

    Exxos

  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
    :
    je comprend pas trop la... tu a une carte de derniere generation qui ne gere pas une extension ? ca me parrait bizzar (ou alors tu t'est trompé dans ta formulation ?)

    sinon je comprend pas trop non plus ce que tu veut faire... qu'est ce que tu appel appliquer une texture de lookUp ?
    sinon pour tout ce qui est probleme de texture et autre fragment program de toute facon, dans le pipeline de rendu, ces operations sont toujours effectuée avant les operation de bending (d'ou le nom fragment program car les donnée que l'on manipule ne sont pas encore des pixels car elles n'ont pas encore subit les operation de blending et autre... mort au terme pixel shader qui ne denote pas la réalitée )
    * 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 éclairé
    Inscrit en
    Mars 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 84
    Par défaut
    e comprend pas trop la... tu a une carte de derniere generation qui ne gere pas une extension ? ca me parrait bizzar (ou alors tu t'est trompé dans ta formulation ?)
    En effet, glColorTableEXT est obsolete pour NVIDIA. Je pense que c'est parcequ'ils l'ont remplacés par les shaders.

    Je ne veux pas me lancer dans l'OpenGL shading language, qui est tres puissant mais me parait surdimensioné pour ce que je veux faire.

    Je pensais utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexEnvi(SHADER_OPERATION_NV,
    mais je ne sais pas trop comment faire. (Utiliser une texture 1D qui serait ma lookup table et la maper dans ma texture 2d, mais comment ?)

  4. #4
    Membre actif Avatar de maleaume
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Par défaut
    salut
    alors moi j 'ai le meme souci que toi sauf que j 'ai deja programmer sur des NVidia 5200; 6600 et 6800 et que glColorTable était supporter
    par contre chez ATI, des qu'on franchis les Radeon 9800 a savoir toutes les gammes X.00 ben la y a plus.

    POur bien expliquer a tout le monde voici le truc
    il y a une extension de la version 1.2 d'openGL, qui est appeler Imaging Subset (GL_ARB_imaging) et qui est la version 1.2.1
    Cette extension permet entre autre, de faire des convolution 1D, 2D, 2D separer, certaines fonctions de ble,ding interessante comme GL_MAX,GL_MIN,GL_ADD..., recuperation de l'histogramme des images, et la colorTable, matriceColor.

    a quoi ca sert
    Generalement en imageie medicale, on a un volume 3D que l'on utilise comme texture. ce volume contient une nformation de luminance, mais il est souvent souhaitable d'appliquer une table de couleur (LUT) pour avoir autre chose que des nivo de gris a visualiser, permettant ainsi d 'augmenter le contraste et de mieux visualiser les données

    le code était relativement simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ColorTable(GL_COLOR_TABLE, ....)//pour charger la LUT
    glEnable(GL_COLOR_TABLE) //activation
    glBindTexture(...); //lors de la creation de la texture, elle était automatiquement en mémoire coloré par la LUT specidier
    .
    .
    .
    glDisable(GL_COLOR_TABLE);
    mais voila .. cette extension, pourtant valider par l'ARB, se trouve delaisser par les constructeurs sur leur derniere carte graphique, ce qiu est relativement chiant.. car j 'ai et je vois que je suis pas le seul beaucoup de mal a trouver des codes d'exemple pour ce cas bien particulier en utilisant les shaders

    tout aide serait bien venu
    [/quote]

  5. #5
    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
    regardez si l'extention n'est pas passée en ARB, ca arrive parfois quand une extention est utilisée par plusieurs constructeurs qu'elle entre dans le standard et que du coup sa version EXT soit supprimée...
    * 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

  6. #6
    Membre actif Avatar de maleaume
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Par défaut
    justement c 'est la le probleme , elle est déja passé en ARB (GL_ARB_Imaging), mais n 'est plus presente sur les carte derniere generations... a n 'y rien comprendre

    voici le code que j 'utilisait pour loader les fonction y aps d'EXT dedans

    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
     
    	glColorTable =	(PFNGLCOLORTABLEPROC)wglGetProcAddress("glColorTable");
    	if(glColorTable == NULL){
    		MessageBox(NULL, "Imaging Subset not supported by your graphic card","SegamiCorporation" ,MB_ICONSTOP | MB_OK);
    		Exit();
    	}
     
    	glColorSubTable =	(PFNGLCOLORSUBTABLEPROC)wglGetProcAddress("glColorSubTable");
    	if(glColorSubTable == NULL){
    		MessageBox(NULL, "Imaging Subset not supported by your graphic card","SegamiCorporation" ,MB_ICONSTOP | MB_OK);
    		Exit();
    	}
     
    	glColorTableParameterfv = (PFNGLCOLORTABLEPARAMETERFVPROC)wglGetProcAddress("glColorTableParameterfv");
    	if(glColorTableParameterfv == NULL){
    		MessageBox(NULL, "glColorTableParameterfv not supported by your graphic card","SegamiCorporation" ,MB_ICONSTOP | MB_OK);
    		Exit();
    	}
     
    	glGetHistogram = (PFNGLGETHISTOGRAMPROC)wglGetProcAddress("glGetHistogram");
    	if(glGetHistogram == NULL){
    		MessageBox(NULL, "glGetHistogram not supported by your graphic card","SegamiCorporation" ,MB_ICONSTOP | MB_OK);
    		Exit();
    	}
    	glHistogram = (PFNGLHISTOGRAMPROC)wglGetProcAddress("glHistogram");
    	if(glGetHistogram == NULL){
    		MessageBox(NULL, "glHistogram not supported by your graphic card","SegamiCorporation" ,MB_ICONSTOP | MB_OK);
    		Exit();
    	}
    [/code]

  7. #7
    Membre actif Avatar de maleaume
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Par défaut
    bon alors voici quelques snap pour avoir tout en main pour comprendre
    d'abord voici les textures utilisées: BRIQUE et LUT



    ensuite, voici différent code et le résultat correspondant
    dans un premier temps, je veux mapper mon objet avec la texture BRIQUE:
    une premiere version ou je recupere directement les composante RGB
    code N°1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    uniform sampler2D basetex;
     
     
    void main()
    {
        vec3 rgb = texture2D(basetex, gl_TexCoord[0].xy).rgb;
       gl_FragColor = vec4(rgb, 1.0);
    }
    et une autre version qui donne le meme resultat fort heureusement ou je ne recupere que la composante R puisque ma texture est en nivo de gris
    code N°2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    uniform sampler2D basetex;
     
    void main()
    {
     
        float r  =  clamp(texture2D(basetex, gl_TexCoord[0].xy).r,0,1);
       gl_FragColor = vec4(r,r,r, 1.0);
    }
    voici le resultat de ces deux codes

    ensuite je map mon plan avec la LUT (qui est une texture 1D),jusque l'a tout va bien -voir image du dessus)
    code N°3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    uniform sampler1D LUT;
     
    void main()
    {
       vec3 lut = texture1D(LUT,gl_TexCoord[0].x).rgb;    
       gl_FragColor = vec4(lut, 1.0); 
    }
    apres je recupere juste une couleur correspondant à ma LUT (ici 0.9 = violet)
    et j'obtiens bien ce que je veux


    donc on pourrai se dire, j'ia plus qu'a mettre la variable r au lieu [B]0.9[B] ainsi je pourrait avoir ma texture brique coloré par ma LUT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    uniform sampler2D basetex;
    uniform sampler1D LUT;
     
     
    void main()
    {
       	vec2 LUTpos = gl_TexCoord[1].x; 
            float r  =  clamp(texture2D(basetex, gl_TexCoord[0].xy).r,0,1);
            vec3 lut = texture1D(LUT,r).rgb;    
            // output final color
           gl_FragColor = vec4(lut, 1.0);
    }
    ;
    le résultat est que j'ai plus rien qui ne s'affiche ....
    une aide ou soluce?

  8. #8
    Invité de passage
    Inscrit en
    Août 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1
    Par défaut toujours pas de nouvelle ?
    Je suis confronte au meme probleme mais n'ai pas de reponse a apporter.

    Si jamais qqun avait une idee de comment faire cela correctement qu'il se manifeste.

    Cordialement

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/02/2008, 18h54
  2. Opérations sur les textures dans pixels shader
    Par ultimanu dans le forum DirectX
    Réponses: 10
    Dernier message: 27/04/2007, 09h32
  3. volume texture et vertex shader
    Par J&B dans le forum DirectX
    Réponses: 1
    Dernier message: 30/05/2006, 19h11
  4. Réponses: 10
    Dernier message: 13/04/2006, 15h54
  5. Réponses: 1
    Dernier message: 06/04/2006, 17h04

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