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
-Une fonction zoom
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(); }
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
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(); }
Donc le problème
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")); }
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
Partager