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