Bonjour tout le monde, j'ai un petit probleme dans mon code OpenGL. Mon probleme est le suivant :
  • j'ai une scene vue d'un point de vue (appelons la camera)
  • je veux pour chaque objet de la scene effectuer un rendu (low resolution) depuis le centre de cete objet et regardant vers la camera
  • sauvegarder ca ds un buffer
  • idealement realiser cette operation a chaque frame (et donc trouver une methode plus rapide qu'un glReadPixels?)
J'appelle la fonction de "rendu offline" avant mon display (mais ca pourrait etre apres ca change rien enfin je pense) et voici son 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
 
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
        int oldView[4];
        glGetIntegerv(GL_VIEWPORT, oldView);
        glLoadIdentity();
        glViewport(0,0,resolx,resoly);
        gluPerspective(cam->getFov(), ratio, 0.1, 1000);
 
        glMatrixMode(GL_MODELVIEW);
        glPushMatrix();
            glLoadIdentity();
            gluLookAt(cam->getPosX(), cam->getPosY(), cam->getPosZ(), \
                      cam->getTarget().getX(), cam->getTarget().getY(), cam->getTarget().getZ(), \
                      cam->getUpVector().getVx(), cam->getUpVector().getVy(), cam->getUpVector().getVz());
 
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
            scene->displayObjects();
 
            glReadBuffer(GL_BACK);
 
            glReadPixels(0,0,resolx,resoly,GL_RGB,GL_UNSIGNED_BYTE,pix);
 
        glMatrixMode(GL_MODELVIEW);
        glPopMatrix();
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glViewport(oldView[0],oldView[1],oldView[2],oldView[3]);
Donc en gros je veux sauvegarder les matrices pour pouvoir restaurer le contexte en fin de fonction, mais en fait cela ne marche pas.
Mon affichage standard par la camera (qui fonctionne lorsque je m'appelles pas cette fonction) est impacte par cette fonction et ne fonctionne plus normalement quand je l'appelles.
Est ce que vous pourriez m'eclairer sur les grossieres erreurs que je commets?
Merci d'avance

Jim