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 :

FrameBuffer - image vide


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Par défaut FrameBuffer - image vide
    Salut à tous,
    J'ai un problème lors de l'utilisation d'un framebuffer, la texture générée par le framebuffer est vide, ou noire. J'ai pourtant suivit à la lettre plusieurs tutoriel, et observé les codes de la plus parte des samples qu'on trouve sur le net, qui eux fonctionnent. Quand je ne bind pas le framebuffer pour voir ce que c'est censé faire, mon rendu fonctionne, mais dès que je le met dans le framebuffer, ma texture apparait noire. Je précise que j'ai bien les shader et les framebuffer disponible.

    Voici mon 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
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    // Initialisation
    int width = 800;
    int height = 600;
     
    GLuint fbo;
    GLuint tex;
    GLuint dbo;
     
     
    // DepthBuffer
    glGenRenderbuffersEXT(1, &dbo);
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, dbo);
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, width, height);
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
     
    // Texture
    glGenTextures(1, &tex);
    glBindTexture(GL_TEXTURE_2D, tex);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,  width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    glBindTexture(GL_TEXTURE_2D, 0);
     
    // FrameBuffer
    glGenFramebuffersEXT(1, &fbo);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
     
    // Binds
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0);
    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, dbo);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
     
    GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);  
     
    if (status == GL_FRAMEBUFFER_COMPLETE_EXT)
           printf("FrameBuffer cree avec succes");
     
     
    // Dans la boucle d'affichage :
     
    // Réinitialisation des matrices pour le frambuffer
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
     
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(Position.x, Position.y, Position.z, Target.x, Target.y, Target.z, 0, 1, 0 );
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(90, 800.0/600.0, 0.1, 1000);
     
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
     
     
    glPushAttrib(GL_VIEWPORT_BIT);
    glViewport(0,0,width, height);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
    RadialPrg.Use(); // Juste un simple program GLSL
           // Ci-dessous, un simple rendu
           glColor3f(255, 255 ,255);
           Sky.DrawSun(Camera);
           glColor3f(0,0,0);
           Terrain.Draw();
           Scene.Draw();
    srl::Program::DUse();
     
    glPopAttrib();
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
     
     
    // Un autre rendu qui utilise la texture du framebuffer
    // Réinitialisation des matrices pour le rendu
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(Position.x, Position.y, Position.z, Target.x, Target.y, Target.z, 0, 1, 0 );
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(90, 800.0/600.0, 0.1, 1000);
     
           glBindTexture(GL_TEXTURE_2D, tex);
           for (int i = 0; i < 4; i++) {
              glBegin(GL_QUADS);
              glTexCoord2d(0,1);
              glVertex3d(1,1,1);
              glTexCoord2d(0,0);
              glVertex3d(1,1,-1);
              glTexCoord2d(1,0);
              glVertex3d(-1,1,-1);
              glTexCoord2d(1,1);
              glVertex3d(-1,1,1);
              glEnd();
              glRotated(90,0,0,1);
           }
    Merci d'avance,
    A toute

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Utilises-tu des shaders pour rendre ta texture ou pas? Sinon, assures-toi bien de glEnable(GL_TEXTURE_2D) avant de faire le rendu de la texture...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Par défaut
    Oui j'utilise des shader pour rendre la texture, mais le coté rendu marche parfaitement, j'ai mis 4 face pour simplifier mon code, mais sa reviens au même, glEnable(GL_TEXTURE_2D); et toutes les textures se rendent correctement sauf celle du framebuffer.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Par défaut
    Tu dois mettre ton bind de frame buffer avant gluLookAt et glViewport

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Par défaut
    Merci mais sa ne marche pas, toujours une texture noire

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TanEk Voir le message
    Utilises-tu des shaders pour rendre ta texture ou pas? Sinon, assures-toi bien de glEnable(GL_TEXTURE_2D) avant de faire le rendu de la texture...
    Même avec des shaders, les ATI nécessitent des fois cet appel à glEnable(GL_TEXTURE_xx)...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Image par défaut si champs image vide
    Par AurelienNF dans le forum Langage
    Réponses: 4
    Dernier message: 24/08/2010, 00h37
  2. DBD::Chart::Plot me crée un fichier image vide
    Par ALLMAG54 dans le forum Modules
    Réponses: 7
    Dernier message: 15/05/2008, 19h44
  3. [newbie]Image vide dans movieClip
    Par Dsphinx dans le forum ActionScript 1 & ActionScript 2
    Réponses: 8
    Dernier message: 20/06/2007, 14h22
  4. savepicture >image vide
    Par stcly dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 10/05/2007, 14h10
  5. [VB.NET]Charger une "image vide" dans une picturebox
    Par mustang-f27 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/11/2006, 14h20

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