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 :

Changement de point de vue + Rendu Offscreen


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Par défaut Changement de point de vue + Rendu Offscreen
    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

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    dans le code que tu donne, tu commence par une glMatrixMode (GL_PROJECTION) donc je suppose que tu est en mode MODELVIEW, mais a la fin de ce bloc de code tu refais un glMatrixMode (GL_PROJECTION) donc tu est en mode PROJECTION.

    La fonction qui affiche a partir de la camera repasse t'elle bien en mode MODELVIEW lorsqu'elle en a besoin ? ou fait elle l'assertion dy etre déja (ce qui marcherait sans le bloc mais pas avec)

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Par défaut
    Merci beaucoup pour ta remarque, effectivement je n'etais pas repasse en mode GL_MODELVIEW dans ma fonction de rendu de camera.... Evidemment ca marche bcp moins bien comme ca.

    Maintenant, que devrais-je utiliser comme fonction pour un rendu plus performant qu'avec glReadPixels? Est ce qu'un rendu dans une texture serait plus rapide?

    Merci d'avance

    Jim

  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
    tu peut regarder soit du coté des pixel buffer (si tu aimes les extensions abominablement mal conçu) qui marche sur des cartes ralativement anciennes, soit du coté des frame buffer object (FBO) nettement mieux conçu, et qui theoriquement marche aussi sur a peut pres toutes les cartes.
    le probleme avec les FBO, c'est que c'est une extension relativement récente, qui peut normalement fonctionner sur toutes les cartes (etant donné que c'est une gestion de la memoire au niveau des drivers), mais les constructeur de cartes ne prennent pas forcement le temps de l'ajouter sur les anciennes cartes...
    * 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
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Par défaut
    Merci beaucoup pour les infos, je vais jeter un oeil sur les FBO alors en esperant que ca fonctionne sur un paquet de cartes

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/07/2009, 12h36
  2. C vs PHP vs JAVA d'un point de vue réseau
    Par deaven dans le forum Langages de programmation
    Réponses: 48
    Dernier message: 17/06/2008, 02h27
  3. Réponses: 7
    Dernier message: 21/02/2005, 13h28
  4. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 15h51

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