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 avec glReadPixels


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut Problème avec glReadPixels
    bonjour
    je debute e c++ et j'ai un petit pb pour faire une capture d'ecran j'utilise glReadPixels qui est sencer me retourner le tableau de pixel "data" de mon ecran mais voila quand j'affiche "data" rien le tableau est vide, de plus j'ai essayer de s'auvgarder cette image avec devil mais quand je louvre c'est un ecran noir merci de votre aide car la je ne voie pas du tout.

    voila le code que j'utilise

    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
    #include <cstdlib>
    #include <iostream>
    #include <GL/gl.h>
    #include <GL/glu.h>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    int i=0;
        while ( i != 2 ){
            printf("2 pour exit\n");
            scanf(" %d",&i);
            if ( i == 1 ){
                unsigned char * data = new unsigned char[3*1024*768];
                glReadPixels(0, 0, 1024, 768, GL_RED, GL_UNSIGNED_BYTE, data);
                printf(" %s \n",data);            
            }
        }
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  2. #2
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Tu as regardé ça ?

    http://jeux.developpez.com/faq/openg...UES_screenshot

    Sinon pourquoi afficher data comme une chaine (%s) avec printf ? C'est tout sauf une chaine de caractère ! ça n'a aucun sens de faire un affichage avec printf.
    Tu as alloué une zone suffisement grande pour contenir l'image ?

  3. #3
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pourquoi GL_RED comme format ? GL_RGB ne serait pas mieux ?

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    merci de vos reponce

    j'ai été voir le lien je l'ai suivi mais ca ne marche pas.

    j'ai afficher data avec printf pour voir ci data contenai quelque chose il n'y a pas d'autre intéret
    c'est uniquement une verif

    j'avai essayer de charger une image avec devil ilLoadImage() et recuperrer les data avec
    ilGetData() puis printf pas de pb data contenai bien quelque chose donc printf devrait marcher aussi avec glReadPixels()

    quand a la tail de ma zone memoir alloué je pence quelle est sufisament grande car mon ecran
    est en 1024 par 768 et que mon espace alloué est [3*1024*768]

    j'ai aussi essayer avec GL_RGB mais aucun resultat. mais effectivement c'est GL_RGB que j'utiliserai dans mon pg.

  5. #5
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 573
    Par défaut
    Euh, tu initialises OpenGL ?
    pas dans ton exemple en tout cas
    il faut que tu l'initialises en mode glOrtho
    tu peux nous en dire plus à ce sujet ?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    non je n'initialise pas openGL que faut il initialiser

  7. #7
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 573
    Par défaut
    Il faut initialiser la projection principalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 1024, 0, 768, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    tu met cela au début du programme, avant ta boucle
    penses à enlever ton printf
    et sinon, ton tableau data est vide non ?
    donc tu vas rien voir, ou ce sera du n'importe quoi
    et ta fenêtre, tu la crée comment ?
    hum, j'ai l'impression que tu t'es lancé là dedans mais sans rien préparer ?__?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  8. #8
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 573
    Par défaut
    n'hésites pas à fouiller dans la FAQ :
    http://jeux.developpez.com/faq/openg...ITES_tutoriels
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  9. #9
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    effectivement je me suis lencer la dedant car je voulai aprendre un nouveau langage car dabitude j'utilise java.

    je n'ai person pour mexpliquer commant ca marche donc j'essai pas mal de chose.

    pour l'instant j'ai uniquement fait un petit pg qui recupaire l'appui sur une touche du clavier.
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, 0);

    le but est qu'a chaque appui sur une touche mon pg fasse un screenshot de mon ecran et qu'il l'enregistre au format jpg.

    c'est pour servir a des prof quand ils fond un cours

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    merci pour ton code shenron666 j'ai essayer ton ini mais ca ne marche toujour pas l'image que j'enregistre en noir.

    voila le code entier de la capture d'ecran et de l'enregistrement

    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
    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include "IL/il.h"
     
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    int i=0;
    	while ( i != 2 ){
    		printf("2 pour exit\n");
    		scanf(" %d",&i);
    		if ( i == 1 ){
    			glMatrixMode(GL_PROJECTION);
    			glLoadIdentity();
    			glOrtho(0, 1024, 0, 768, -1, 1);
    			glMatrixMode(GL_MODELVIEW);
    			glLoadIdentity();
     
    			int hauteur= 768;
    			int largeur= 1024;
    			unsigned char * data = new unsigned char[3*largeur*hauteur];
    			glReadPixels(0, 0, largeur, hauteur, GL_RGB, GL_UNSIGNED_BYTE, data);
     
    			ilInit();
    			ilEnable(IL_ORIGIN_SET);
    			ilOriginFunc(IL_ORIGIN_UPPER_LEFT);
     
    			ILuint id;
    			ilGenImages(1, &id);
    			ilBindImage(id);
     
    			ilTexImage(1024, 768, 1, 3, IL_RGB, IL_UNSIGNED_BYTE, data);
    			ilSaveImage("C:\\Documents and Settings\\home\\Bureau\\testimagecopy.jpg");
     
     
    		}
    	}
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    pb data est toujour vide.

    merci pour ton aide je vais aller fair un tour sur le lien pour trouver mon pb.

  11. #11
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    glReadPixels sert à récupérer ce que tu as affiché auparavant avec OpenGL. Donc si tu n'affiches rien normal que tu ne récupères rien.

    J'ai l'impression que toi tu veux t'en servir pour faire une capture écran de ton bureau... Ce qui n'est bien sûr pas possible.

    Et merci de penser aux balises CODE.

  12. #12
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 573
    Par défaut
    Ton problème c'est que tu ne crées pas de fenêtre où opengl pourra effectuer son affichage
    OpenGL est une bibliothèque qui sert à afficher à l'écran une représentation graphique d'objets vectoriels
    donc si ce que dit Loulou est vrai, si tu cherches à t'en servir pour une cature d'écran, bah désolé mais OpenGL n'est pas la bonne solution
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  13. #13
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    ok merci pour les info j'ai effectivement reussi a faire une capture d'une fenetre openGL et el convertir en jpg en suivant le tuto

    http://glinfrench.apinc.org/rubrique.php3?id_rubrique=2

    mais pas possible pour une capture d'ecran.

    svp comment faut t'il que je m'y prenne pour recuperer les pixel de l'ecran car c'est bien une capture d'ecran que je veux faire

    merci pour vos reponce.

  14. #14
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    ça n'a plus rien à voir avec OpenGL, mais cela dépend de ton OS.
    Donc dirige toi vers la section développement Windows ou linux.

  15. #15
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    merci pour tout

    pour l'OS je suis sous windows car l'aplication est destinner a cette OS

    le temps de lir et d'essayer tout ca et je reposterai lundi avec je l'espaire la reponce a mais pb

    en tout cas openGL me parai tres interessant et pratique pour gerrer de la 3D .

    sur ce bon weekend et merci.

Discussions similaires

  1. [subversion/trac] Probl. de permission avec authz dans svnserve.conf
    Par mcdeffice dans le forum Administration système
    Réponses: 0
    Dernier message: 23/07/2009, 16h21
  2. Récupération de pixels avec glReadPixels
    Par Pepson dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/05/2009, 09h59
  3. [jogl]Problème avec glReadPixels
    Par GLDavid dans le forum OpenGL
    Réponses: 8
    Dernier message: 13/01/2009, 15h20
  4. screenshot avec glReadPixels
    Par j_p_g dans le forum OpenGL
    Réponses: 4
    Dernier message: 20/11/2006, 19h28
  5. Problème avec glReadPixels
    Par BruceBoc dans le forum OpenGL
    Réponses: 2
    Dernier message: 22/08/2006, 11h15

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