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

Discussion :

Qt problème de camera (opengl)

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 38
    Points
    38
    Par défaut Qt problème de camera (opengl)
    Bonjour à tous.

    Ces dernier temps je me lance dans opengl

    Donc comme tout le monde, je commence avec de jolis cubes...

    Tout ce passe bien excepté un petit problème de camera :p
    J'utilise gluPerspective comme type de projection. J'aimerai que l'utilisateur puisse se déplacer dans la scène. Pour cela j'ai créer pour l'instant deux fonction:
    -Une fonction de rotation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void GLWidget::rotateBy(int xAngle, int yAngle, int zAngle)
    {
        xRot += xAngle;
        yRot += yAngle;
        zRot += zAngle;
        updateGL();
    }
    -Une fonction zoom
    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 GLWidget::wheelEvent(QWheelEvent *event)
     { int numDegrees = event->delta() / 8;
         if( numDegrees<0)
         {      zoom = zoom-5;
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(zoom,1,1,1000);
    }
         else if(numDegrees>0)
         {    zoom = zoom+5;
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(zoom,1,1,1000);
    }
          updateGL();
     }
    Je vous fourni aussi Paintgl
    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 GLWidget::paintGL()
    {
        qglClearColor(clearColor);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glTranslated(xT, yT, zT);
        glRotated(xRot / 16.0, 1.0, 0.0, 0.0);
        glRotated(yRot / 16.0, 0.0, 1.0, 0.0);
        glRotated(zRot / 16.0, 0.0, 0.0, 1.0);
      glCallList(sharedObject);
     
       makeObject2(-2,0,-10,QString("../images/crate.bmp"));
       makeObject2(0,0.0,-10,QString(":/images/side2.png"));
       makeObject2(2,0,-10,QString(":/images/side3.png"));
     
    }
    Donc le problème

    Indépendamment ces fonctions marche très bien. Mais lorsque j'utilise la rotation puis que je zoom, la c'est la cata... Déformation de la perspective, déplacement non voulu de la camera...

    Y aurait-il quelque chose que je n'aurai pas saisi, un oubli?

    Merci de l'éclairer sur le sujet

    Amicalement Abza

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 901
    Points : 219 891
    Points
    219 891
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    Pour le zoom, je ne suis pas sur que la meilleure solution soit de modifier le gluPerspective.
    Souvent, moi je ne déplace que ma caméra ( sorte de caméra satellitaire ) que je rapproche ou éloigne de mon objet ...

    Sinon, la fonction rotateBy est appelée à qu'elle moment, je n'ai pas vu d'appel dans le code :s ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 38
    Points
    38
    Par défaut
    rotateBy est utilisé avec mouse event.

    Donc toi pour le zoom tu utilise un glulookat c'est ça?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 901
    Points : 219 891
    Points
    219 891
    Billets dans le blog
    125
    Par défaut
    Oui effectivement je ne l'avais pas précisé ...

    Pour tout ce qui changement de position de la scène entière, je préfère bougé ma caméra.
    Et du coup le zoom ( et la rotation que tu fais ) je le fais par le gluLookAt.
    Par contre je dis pas que c'est mieux ...

    Par contre, pouvez vous montrer comment vous initialisé le gluPerspective au début de l'application ( dans la fonction d'initialisation ).
    Car normalement, le deuxième argument ( ou vous mettez 1 ) , doit être l'aspect, et très très souvent l'aspect est la division de la hauteur de la fenetre sur la largeur.

    Sinon, il se peut aussi que zoom n'est pas les bonnes valeurs ... normalement au début il doit être égale à 90 ( enfin ... c'est une base je crois )

Discussions similaires

  1. Problème avec Quake3 OpenGL
    Par Meister EngeL dans le forum Composants
    Réponses: 3
    Dernier message: 17/12/2007, 19h26
  2. Problème de camera
    Par zabibof dans le forum Moteurs 3D
    Réponses: 11
    Dernier message: 26/09/2007, 12h32
  3. Problème de compilation (OPENGL/GLUT)
    Par Haage dans le forum OpenGL
    Réponses: 10
    Dernier message: 23/07/2007, 12h06
  4. Problème de caméra/OpenGL
    Par nicl75 dans le forum 3D
    Réponses: 2
    Dernier message: 10/03/2007, 17h40

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