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 :

Sortie opengl vers image ou vidéo?


Sujet :

OpenGL

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Par défaut Sortie opengl vers image ou vidéo?
    Bonjour à vous tous,

    petite question à propos de l'OpenGL.

    Ma problématique: J'ai réalisé un petit programme utilisant OpenGL. Je souhaiterais à présent en faire une vidéo (de mon prog qui tourne).

    Le problème que j'obtiens avec des captures d'écran c'est que je manque de puissance machine du coup le débit img/s chute honteusement =/

    Je souhaiterais du coup modifier mon programme pour que chaque rendu OpenGL soit stocké dans un fichier JPG/PNG/... (ou en vidéo directement) afin d'intégrer ces shots ensuite directement dans un logiciel de montage vidéo.

    Es il possible d'envoyer le rendu a l'écran directement dans un fichier?

    Merci pour vos réponses. =)

  2. #2
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Bonjour,

    Es il possible d'envoyer le rendu a l'écran directement dans un fichier?
    Oui c'est possible, le directement est très relatif mais le principe est le suivant:

    1. Effectuer un rendu offscreen: au lieu de dessiner dans votre contexte onscreen (i.e: votre fenêtre OpenGL), vous creez un buffer offscreen et dessinez dedans.
    Le type de buffer offscreen dépend de votre implémentation OpenGL:
    - FBO à partir d'OpenGL 2.0, ou via les extensions sur les cartes qui supportent une version d'openGL inférieure
    - pBuffers sur les cartes OpenGL 1.x qui les supportent (là encore via une extension)
    - DIB-sections si vous faites un rendu 100% software (par exemple, si vous n'avez pas de carte graphique ou les drivers qui vont avec)

    2. Récupérer ce rendu dans un tableau de bytes en utilisant glReadPixels

    3. Utiliser le tableau récupéré en 2. pour créer un objet "image" (par exemple une BitmapImage en C#)

    4. Sauvegarder cette image en tant que fichier: http://stackoverflow.com/questions/4...pimage-to-file

    Ca fait pas mal d'étapes, rien que la gestion des offscreen buffers représente pas mal de boulot mais une fois que c'est en place ca fonctionne très bien.

    En quel langage programmez-vous? J'ai tout ca en C# si vous voulez...

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 608
    Par défaut
    Salut,

    En fait si ton appli fonctionne déjà OnScreen, tu a juste à faire un glReadPixel à la fin de ton rendu et enregistrer le résultat dans une image .

  4. #4
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Re,

    comme le dit Pyros, en théorie ca marche aussi avec un rendu Onscreen...sauf qu'en pratique tu va rencontrer plein de problèmes + ou - aléatoires... Par exemple si une fenêtre recouvre (en partie ou en entier) ta fenêtre OpenGL au moment du rendu, quand tu feras un glReadPixels tu auras des pixels invalides (noirs ou de la couleur de la fenêtre qui recouvre la tienne...j'avoue que je ne sais plus exactement) pour la zone recouverte.

    d'où l'utilisation des buffers offscreen...

    Maintenant, si ton but c juste de générer une vidéo, tu peux aussi t'arranger pour que rien ne recouvre la fenêtre de ton appli pendant la capture...ca te fera gagner du temps c sûr.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce que je ferais : rendu dans une texture, puis glReadPixels dans un PBO avec une rotation des buffers pour ne pas bloquer le rendu.

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 608
    Par défaut
    @ShevchenKik
    Tu es sûr ? Je pensai que glReadPixel lisait le contenu du framebuffer OpenGL, et que pour la gestion des fenêtres c'était windows qui faisait sa popotes derrière avec ses DevicesContext à la mord moi le noeud...

  7. #7
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    @Pyros: non je ne suis malheureusement pas sûr à 100%. Disons que y a 2-3 ans je voulais faire des captures d'écran et j'ai eu tout un tas de problèmes avec glReadPixels après un rendu direct.
    Je n'ai pas cherché à savoir exactement d'où ca venait (OpenGL, windows (j'utilisais MFC à l'époque...)) mais j'ai essayé avec le rendu offscreen et depuis plus de problème...

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Par défaut
    Merci beaucoup pour toutes ces réponses,

    En effet je pense que je vais utiliser glReadPixel pour sa simplicité d'implementation, et surtout c'est vraiement un bout de code jettable dans mon cas car en effet j'ai vraiment besoin juste de faire un vidéo et puis c tout.

    Je vais implementer ca rapidement et puis je vous dirrais le resultat =)

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/04/2011, 13h28
  2. problème d'image de vidéo
    Par suiss dans le forum Vidéo
    Réponses: 5
    Dernier message: 02/09/2005, 15h23
  3. Exporter diagramme de classe vers image
    Par Koko22 dans le forum Rational
    Réponses: 3
    Dernier message: 18/08/2004, 10h42
  4. rediriger la sortie standard vers un textarea
    Par gromite dans le forum Composants
    Réponses: 9
    Dernier message: 10/05/2004, 11h07
  5. Réponses: 5
    Dernier message: 24/12/2003, 09h49

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