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 :

gluPerspective / gluLookAt


Sujet :

OpenGL

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut gluPerspective / gluLookAt
    Bonjour,

    Je suis en train de développer une interface en Qt et j'ai implémenté une scène utilisant OpenGL afin de pouvoir observer un nuage de points 3D, cependant je n'arrive pas à zoomer/dézoomer, ce qui après recherche devrait fonctionner en modifiant le premier paramètre de gluPerspective;

    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
    void OpenGLScene::drawBackground(QPainter *painter, const QRectF &)
    {
        if (painter->paintEngine()->type() != QPaintEngine::OpenGL) {
            qWarning("OpenGLScene: drawBackground needs a QGLWidget to be set as viewport on the graphics view");
            return;
        }
        glClearColor(m_backgroundColor.redF(), m_backgroundColor.greenF(), m_backgroundColor.blueF(), 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(zoom, width() / height(), near, far);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt( x1, moyenne[1], z1,
                   x0, moyenne[1], z0,
                   0, 1, 0 );
        GLfloat x2 = cos(angle) * (x1 - x0) + sin(angle) * (z1 - z0) + x0;
        GLfloat z2 = cos(angle) * (z1 - z0) - sin(angle) * (x1 - x0) + z0;
        x1 = x2;
        z1 = z2;
     
        glBegin(GL_POINTS);
        for(int i=0;i<nbPoints;i++){
            glPushMatrix();
     
            glColor3f(tab[i * 6 + 3] / 255.0f,tab[i * 6 + 4] / 255.0f,tab[i * 6 + 5] / 255.0f);
            glVertex3f(tab[i * 6],tab[i * 6 + 1],tab[i * 6 + 2]);
            glPopMatrix();
     
        }
        glEnd();
        zoom += 0.1;
        qDebug() << zoom;
     
    }
    Je me retrouve donc avec une image figée, j'ai essayé de rajouter l'instruction glViewport avant glMatrixMode(GL_PROJECTION); mais je ne voyais plus rien, si vous avez une idée d'où peut provenir le problème...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Là tu changes le FOV, ce qui fait effectivement des changements. Mais ce n'est pas vraiment la manière classique de zoomer.

    Tu aurais de meilleurs résultats en laissant le FOV à 60° (par exemple), et en faisant varier le paramètre "eye" de glulookAt.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par ponce Voir le message
    Là tu changes le FOV, ce qui fait effectivement des changements. Mais ce n'est pas vraiment la manière classique de zoomer.

    Tu aurais de meilleurs résultats en laissant le FOV à 60° (par exemple), et en faisant varier le paramètre "eye" de glulookAt.
    Le problème est que justement l'image ne change pas, est que si je recule par exemple en mettant un angle de rotation nul et en faisant z1 = z2 - 0.01; l'image ne rétrécit pas mais les points disparaissent petit à petit.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Bon, en fait ça venait du setSizeRect() de la scène qui n'était pas réalisé et donc la hauteur et la largeur valaient 0... je vous laisse déduire ce qui est ensuite arrivé au moment du gluPerspective mais bon maintenant ça marche au moins.

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

Discussions similaires

  1. Controle de la camera : gluLookat et gluperspective
    Par GloW_on_dub dans le forum OpenGL
    Réponses: 5
    Dernier message: 09/07/2010, 19h08
  2. GluLookAt et GLTranslate
    Par Mathieu.J dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/03/2005, 14h03
  3. gluLookAt - j'ai raté qquechose ?
    Par grand's dans le forum OpenGL
    Réponses: 1
    Dernier message: 09/02/2005, 10h58
  4. glulookat problème...
    Par fb57 dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/09/2004, 10h43
  5. besoin de precision sur gluLookAt!
    Par bakonu dans le forum OpenGL
    Réponses: 3
    Dernier message: 25/04/2004, 19h05

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