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 :

Depth buffer dans texutre ( opengl )


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut ombre avec fbo ( opengl )
    Bonjour,

    pour développer un shader pour gérer les ombres, j'ai besoin de récupérer dans une texture les valeurs du depth buffer avec la caméra remplaçante la lumière..
    Mes premières recherches m'ont permis de découvrir que je devait utiliser :

    glGenTextures(1, &shadowMapTexture);
    glBindTexture(GL_TEXTURE_2D, shadowMapTexture);
    glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, shadowMapSize, shadowMapSize, 0,
    GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
    mais pour la suite je galère un peu^^
    si qqun peux m'aider, au moins une piste... merci bieng

  2. #2
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    le code que j'ai utilisé pour la création du fbo utilisé pour le rendu est ici:
    http://www.developpez.net/forums/sho...d.php?t=506290

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut
    bonjour,
    ton code est en effet interessant mais j'ai des problèmes à l'exécution pour : glGenFramebuffersEXT(1, &fbo);, il me sort un access violation.
    Fbo est bien défini... une idée?

  4. #4
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Si c'est vraiment au niveau de glGenFrameBuffers c'est que tu as surement un problème avec ta gestion d'extensions.

    Personellement j'utlise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define GL_GLEXT_PROTOTYPES    1
    #include <GL/glext.h>
    qui pour l'instant gère très bien tout ça.

    Si tu définis à la main les adresses des extensions, c'est plus risqué

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut
    j'ai récupéré glext.h et l'ai inclu à mon projet mais le problème persiste

    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
    	glutInit(&argc,argv);
     
    	glutInitWindowPosition(POS_X_ECRAN,POS_Y_ECRAN);
    	glutInitWindowSize(LARGEUR_FENETRE,HAUTEUR_FENETRE);
    	glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH);
     
    	glutCreateWindow("Shadow");
     
    	glEnable(GL_LINE_SMOOTH);
    	glEnable(GL_DEPTH_TEST);
     
    	glutDisplayFunc(affichage);
    	glutReshapeFunc(redimensionnement);
    	glutKeyboardFunc(clavier);
    	glutSpecialFunc(special);
    	glutMouseFunc(souris);
     
    	glGenFramebuffersEXT(1, &fbo); // <- ICI
        glGenTextures(1, &depth_texture);
        glBindTexture(GL_TEXTURE_2D, depth_texture);

  6. #6
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Décidemment, je galère pas mal avec les FBOs. J'ai l'impression de bien faire, masi ça ne fonctionne pas. Dans mon topic je souhaite afficher la scène dans un buffer auxiliaire de couleur. Ca fonctionne à part le problème du glClear. Mais pour dessiner le contenu d'une texture de profondeur, impossible, j'ai soit un écran blanc soit un écran noir, suivant les réglages :/.

    Initialisation :

    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
    void InitOGL ()
    {
    	glewInit ();
     
    	// Set color and depth clear value
       glClearDepth(1.f);
       glClearColor(0.f, 0.f, 0.3f, 1.f);
     
       // Enable Z-buffer read and write
       glEnable(GL_DEPTH_TEST);
       glDepthMask(GL_TRUE);
     
       // Setup a perspective projection
       glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
     
    	glViewport (0, 0, 512, 512); // On règle le Viewport
     
       glMatrixMode (GL_PROJECTION);
       glLoadIdentity ();
       gluPerspective (60.0, 512.0 / 512.0, 1.0, 20.0);
     
       glMatrixMode (GL_MODELVIEW);
       glLoadIdentity (); // On rétablit la matrice identité
     
    	// Création du quadric
    	sphere = gluNewQuadric ();
     
    	glGenFramebuffersEXT(1, &framebuffer);
       glGenTextures(1, &texture1);
       glBindTexture(GL_TEXTURE_2D, texture1);
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
       glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
     
       glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 512, 512, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
       glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebuffer);
       glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, texture1, 0);
       glDrawBuffer(GL_NONE);
       glReadBuffer(GL_NONE);
       glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
    }
    Rendu de la scène :

    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
    void Render ()
    {
    	gluLookAt (0.0f, 0.0f, 20.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
    	glRotatef (20.0f, 1.0f, 0.0f, 0.0f);
     
    	// On rend la scène dans le framebuffer
    	glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, framebuffer);
         RenderScene(); 
       glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
     
     
    	// Puis on dessine la texture
    	glEnable (GL_TEXTURE_2D);
    	glBindTexture (GL_TEXTURE_2D, texture1);
    		DrawQuad ();
    	glBindTexture (GL_TEXTURE_2D, 0);
    	glDisable (GL_TEXTURE_2D);
    }
    Les FBOs sont vraiment très bien faits, bien conçus. Par contre ils sont vraiment galère à bien prendre en main :/.

Discussions similaires

  1. [HLSL][C++] Lecture du Depth Buffer dans un PS3.0
    Par xterminhate dans le forum DirectX
    Réponses: 6
    Dernier message: 26/09/2006, 00h34
  2. Gestion des buffers dans une fonction
    Par JiJiJaco dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2006, 11h20
  3. Copie d'un buffer dans une structure
    Par KnightsOfTheRound dans le forum C++
    Réponses: 6
    Dernier message: 29/12/2005, 15h00
  4. Comment tester un point du depth buffer.
    Par Pyou dans le forum DirectX
    Réponses: 2
    Dernier message: 02/10/2005, 21h17
  5. A propos depth buffer
    Par j.yves dans le forum DirectX
    Réponses: 1
    Dernier message: 03/12/2002, 00h41

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