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 :

Capture d'écran avec OpenGL


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut Capture d'écran avec OpenGL
    Bonjour,

    J'ai crée une scène 3D avec OpenGL, et j'ai untilisé un simple menu Glut pour la manipulation de la scène.

    Je veux savoir, comment capturer l'image avec OpenGL et la sauvegarder au format bmp?

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 209
    Par défaut
    A voir, mais la fonction glreadpixel peut peut être t'aider?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 150
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    avec gl_readpixels tu peux récupérer les pixels de l'écran dans une structure ou assimilée (RGB, RGBA, ... y'a plusieurs paramètres possibles).
    Ensuite, à toi de connaître le format de fichier et l'encodage nécessaire pour l'enregistrer correctement.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 127
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    En effet, la fonction glReadPixels() est la première et la solution la plus simple. Mais, j'ose croire qu'elle est légèrement lente.
    Toutefois, vous pouvez aussi utiliser les Pixel Buffer Object (PBO) pour effectuer votre rendu dans un buffer et le récupérer coté CPU (pour en faire ce que vous voulez).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    Bonjour,

    Merci pour votre aide,

    J'ai met le code suivant pour capturer l'écran à l'aide de la fonction glReadPixels

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glReadBuffer(GL_BACK);
    		data = malloc(GL_RGBA * 500 * 500);
    if( data ) {
        glReadPixels(0, 0, 500, 500, GL_RGBA, GL_UNSIGNED_BYTE, data);
    }
    Cette fonction a pour objectif de récupérer tous les pixels de l'image, mais comment les sauvegarder dans une format bmp ou autre format?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 127
    Billets dans le blog
    149
    Par défaut
    Pour la sauvegarde, il suffit d'écrire un fichier sur le disque. Le BMP reste le format un des plus facile à prendre en main
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    J'ai travaillé avec les fichiers texte seulement, donc j'ai aucune aidé sur la création d'un fichier image, est ce que vous pouvez me donner plus de détail, s'il vous plaît?

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 127
    Billets dans le blog
    149
    Par défaut
    Il faut ouvrir le fichier en mode binaire, ensuite écrire l'entête du fichier (description du fichier image) et ensuite écrire les données de couleur (RGB(A))

    Il y a plein d'exemple. La wiki est pas mal complète -> http://en.wikipedia.org/wiki/BMP_file_format
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    J'ai met ce 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
     
    glReadBuffer(GL_BACK);
    data = malloc(GL_RGBA * w * h);
    if( data ) {
        glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, dat);
    }
    sprintf(file,"image.bmp",cpt);
          if ((img = fopen(file,"w")) != NULL) {
             for (j=h-1;j>=0;j--) {
          for (i=0;i<w;i++) {
             fputc(data[3*j*h+3*i+0],fptr);
             fputc(data[3*j*h+3*i+1],fptr);
             fputc(data[3*j*h+3*i+2],fptr);
          }
       }
          }
    fclose(fptr);
     
    	counter++;
    data est un pointeur de type GLvoid, et fputc prend un entier comme paramètre

    Comment corriger l'erreur?

Discussions similaires

  1. Problème de capture d'écran avec les media players
    Par mouhab dans le forum Windows XP
    Réponses: 7
    Dernier message: 01/01/2011, 20h50
  2. Réponses: 1
    Dernier message: 18/03/2009, 00h34
  3. [Stratégie] Capture d'écran avec sélection
    Par Dimitri_87 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 07/07/2008, 10h12
  4. Capture d'écran avec SDL à une résolution choisie
    Par shenron666 dans le forum OpenGL
    Réponses: 3
    Dernier message: 02/05/2006, 09h27

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