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 :

off screen buffer


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut off screen buffer
    bon voila j'ai un peu de mal avec les changement de matrice et rotation et translation....
    et c'est surement cet lacune qui fait que je ne comprend pas le fonctionnement de mon programme

    je fait tourner un triangle avec ceci:
    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
    void DrawGLScene()
    {
    	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);	// Clear The Screen And The Depth Buffer
     
    	glLoadIdentity();				// Reset The View
     
    	glTranslatef(0.0f,0.0f,-6.0f);		// Draw the pyramid in the middle of the screen
     
      glRotatef(rtri,0.0f,1.0f,0.0f);		// Rotate The Pyramid On The Y axis 
    	glRotatef(rtri,1.0f,0.0f,0.0f);		// Rotate The Pyramid On The x axis 
      // draw a pyramid (in smooth coloring mode)
      glBegin(GL_POLYGON);		
    ....
     
     rtri+=0.01f;	
     glutSwapBuffers();


    j'ai voulu faire faire un petit calcul pour commencer a mon GPU en utilisant un FBO a chaque fois que je presse la touche 'g' :
    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
    void keyPressed(unsigned char key, int /*x*/, int /*y*/) 
    {
        /* If escape is pressed, kill everything. */
        if (key == ESCAPE) 
        { 
          /* shut down our window */
          glutDestroyWindow(window); 
          /* exit the program...normal termination. */
          exit(0);                   
        }
     
    	if (key == 'g') 
    	{ 
    		initFBO();
    		performComputation();
    	}
    }

    et la paf!!! mon triangle s'arrete de tourner!!!je sait que sa vien de mon initFBO qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void initFBO(void) {
    	// create FBO (off-screen framebuffer)
    	glGenFramebuffersEXT(1, &fb); 
    	// bind offscreen framebuffer (that is, skip the window-specific render target)
    	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);
    	// viewport for 1:1 pixel=texture mapping
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluOrtho2D(0.0, texSize, 0.0, texSize);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    	glViewport(0, 0, texSize, texSize);
    }

    C'est des morceau de code que j'ai repris de mes recherche sur le net mais malheureusement, j'ai du mal a faire mes propre truc avec.....

    Ce que je compren pas c que dans mon DrawGlscene(), g un loadidentity() avec un commentaire ("reset the view") donc ca devrai pas remettre a zero et pas tenir compte des truc que j'ai fait dans mon initFBO??

    J'imagine que je doit faire un truc pour desactiver mon FBO?

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    je ne m'y connait pas trop en FBO, mais a priori, je dirait que tu fait un rendu dans ton FBO et que tu n'affiche jamais le contenu du FBO à l'ecran...
    * 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

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    Citation Envoyé par bafman
    je ne m'y connait pas trop en FBO, mais a priori, je dirait que tu fait un rendu dans ton FBO et que tu n'affiche jamais le contenu du FBO à l'ecran...
    Tout a fait! lol
    Je n'affiche pas le contenu du FBO, c'est qu'une premiere partie.

    mais je pensait que opengl apres etre passer par mon fbo, il retourner dans mon Draw() et donc je continuer a faire tourner mon triangle ?

    Mais aparemment le passage par le FBO et surtout les transformation que j'y fait dedans(pour moi c la cause) arrete de faire tourner le triangle.

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    en fait, il n'arrete pas de faire tourner le triangle, c'est juste que toutes tes commandes de rendu son effectué dans le FBO, donc si tu n'affiche jamais le FBO, tu ne verra jamais le resultat...
    * 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

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Par défaut
    ok! je v voir comment afficher le fbo alors!!

    merci

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    de memoire , a la fin de ton calcul rajoute :

    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

    afin de cesser de dessiner sur le FBO et de dessiner de nouveau sur l ecran.

    note:

    attention, quand tu utilises le FBO, il partage le contexte opengl avec le context "normal" de rendu sur l ecran. Cela signifie que tout changement d etat dans une des deux fonctions de rendus (on et off screen) va se repercuter sur la deuxieme (ex: glRotate , glTranslate , glClearColor ...)

Discussions similaires

  1. [OpenGL 2.x] Rendu off-screen sans FBO
    Par AuraHxC dans le forum OpenGL
    Réponses: 3
    Dernier message: 26/02/2014, 17h43
  2. accéder au screen buffer directement
    Par biyoudidou dans le forum C++
    Réponses: 5
    Dernier message: 29/02/2012, 19h16
  3. Utiliser NFC en mode screen off
    Par tony_49 dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 18/05/2011, 15h02
  4. Réponses: 4
    Dernier message: 04/06/2008, 14h20
  5. Réponses: 6
    Dernier message: 16/01/2007, 00h29

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