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 :

Couleur de la depth map inversée


Sujet :

OpenGL

  1. #1
    Membre habitué
    Avatar de Aladore
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 144
    Points
    144
    Par défaut Couleur de la depth map inversée
    Bonsoir

    Je poste sur le forum pour vous exposer mon soucis. Je suis en pleine apprentissage sur l'utilisation des FBO, et j'aimerai obtenir ma depth map.

    Voilà donc le 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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
     
    // -- Initialiser OpenGL.
    bool init_opengl() {
        // Couleur d'arrière plan.
        glClearColor(0.1f, 0.7f, 0.7f, 0.f);
     
        // Definir la matrice de projection.
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(40.0, (double)WIN_W/WIN_H, 1, 50);
     
        // Activer le test de profondeur.
        glEnable(GL_DEPTH_TEST);
        glClearDepth(1.f);
     
        // Activer les textures.
        glEnable(GL_TEXTURE_2D);
     
        // Regarder si la carte graphique supporte les FBO.
        glewInit();
        if (!glewIsSupported("GL_EXT_framebuffer_object")) {
            std::cerr << "||Erreur|| - FBO non supportes." << std::endl;
            return false;
        }
     
        return true;
    }
     
     
    // -- Initialiser les ressources.
    bool init_resource() {
        // Generer une texture, un framebuffer, et un renderbuffer.
        glGenTextures(1, &id_tex);
        glGenFramebuffersEXT(1, &id_fbo);
     
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id_fbo);
        glBindTexture(GL_TEXTURE_2D, id_tex);
     
        // Parametrer la texture.
        glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, TEX_W, TEX_H, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
        glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, id_tex, 0);
     
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
     
        return true;
    }
     
     
    // -- Dessiner la scène.
    void draw_scene() {
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
        // Placer la caméra.
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(3.0, 3.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
     
        // Rendu offscren du cube.
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id_fbo);
            glPushAttrib(GL_VIEWPORT_BIT);
                // Empecher l'ecriture dans les tampons de couleur.
                glDrawBuffer(GL_NONE);
                glReadBuffer(GL_NONE);
     
                // Vider les tampons.
                glClear(GL_DEPTH_BUFFER_BIT);
     
                // Reglage du viewport.
                glViewport(0, 0, BUFF_W, BUFF_H);
     
    			// Dessiner ma scène, sale aussi, mais juste là pour tester.
                glTranslated(-1, -1, 0);
                draw_cube();
                glTranslated(1, 1, 0);
                glScaled(0.5, 0.5, 0.5);
                draw_cube();
                glScaled(2, 2, 2);
     
            glPopAttrib();
     
            GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
            if (status != GL_FRAMEBUFFER_COMPLETE)
                std::cerr << "Probleme avec le FBO" << std::endl;
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
     
        // Vider les tampons.
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
        // Dessiner le cube sur le plan.
        glBindTexture(GL_TEXTURE_2D, id_tex);
        glBegin(GL_QUADS);
            glColor3f(1.f, 1.f, 1.f);
            glTexCoord2d(0,0);  glVertex3f(1.f, -1.f, -1.f);
            glTexCoord2d(1,0);  glVertex3f(1.f, 1.f, -1.f);
            glTexCoord2d(1,1);  glVertex3f(-1.f, 1.f, -1.f);
            glTexCoord2d(0,1);  glVertex3f(-1.f, -1.f, -1.f);
        glEnd();
     
        // Mise à jour des tampons.
        glFlush();
        SDL_GL_SwapBuffers();
    }
    Et voilà le rendu:


    Comme on peut le voir, on dirait que les couleurs sont:
    couleur_obtenue = (1 - couleur_que_je_devrai_avoir)

    Plutôt gênant :/
    Quelqu'un a une idée d'où ça peut venir ?

  2. #2
    Membre habitué
    Avatar de Aladore
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 144
    Points
    144
    Par défaut
    Bon, personne n'a répondu, en fait c'est peut-être parce que la question n'avait pas lieu d'être.
    D'après diverses sources, ma depthmap est correcte, puisque pour OpenGL:
    1.0 => far
    0.0 => near

    Je met donc le tag résolu

  3. #3
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    en fait, c'est même complètement logique... on parle bien de profondeur par rapport à la camera, donc plus l'objet est proche, plus la profondeur est faible...
    * 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

  4. #4
    Membre habitué
    Avatar de Aladore
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 144
    Points
    144
    Par défaut
    Ce qui m'a induit en erreur c'est le fait que j'ai tapé "depth map" dans google, et je me suis retrouvé avec des depthmap "inverse".
    0.0 => far
    1.0 => near

    D'où ma question

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

Discussions similaires

  1. Nuage de points à partir d'une depth map
    Par on2101 dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 21/12/2011, 18h27
  2. depth map
    Par mhd85 dans le forum OpenCV
    Réponses: 11
    Dernier message: 12/05/2009, 20h19
  3. Ligne dans une BufferedImage avec couleur inverse
    Par bourbon dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 25/05/2006, 01h31
  4. Inverser une couleur
    Par kurul1 dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/05/2006, 16h39
  5. [MFC] inverser la couleur d'un texte
    Par ginounet dans le forum MFC
    Réponses: 6
    Dernier message: 11/06/2004, 20h13

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