Bonjour,
Je suis en train de me faire une petit appli pour visualiser des modèles 3D. Lorsque l'utilisateur bouge la souris en maintenant le bouton droit enfoncé, il déplace les coordonnées X et Y de la vue courante c'est le rôle de la ligne :
dans :
Code : Sélectionner tout - Visualiser dans une fenêtre à part glTranslated(-xMouseTrans, -yMouseTrans, -zMouseTrans);
Dès qu'il relâche le bouton de la souris, je souhaiterais pouvoir conserver la vue courante en effectuant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslated(-xMouseTrans, -yMouseTrans, -zMouseTrans); glRotated(xRot, 1.0, 0.0, 0.0); glRotated(yRot, 0.0, 1.0, 0.0); glRotated(zRot, 0.0, 0.0, 1.0); glCallList(object);
De manière à ce que les lignes ci-dessous produisent exactement le même résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 xTrans = TransformX(xMouseTrans, yMouseTrans, zMouseTrans, xRot, yRot, zRot); yTrans = TransformY(xMouseTrans, yMouseTrans, zMouseTrans, xRot, yRot, zRot); zTrans = TransformZ(xMouseTrans, yMouseTrans, zMouseTrans, xRot, yRot, zRot);
Existe-t-il une méthode pour réaliser cette transformation sans passer par des calculs de trigonométrie ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glRotated(xRot, 1.0, 0.0, 0.0); glRotated(yRot, 0.0, 1.0, 0.0); glRotated(zRot, 0.0, 0.0, 1.0); glTranslated(-xTrans, -yTrans, -zTrans); glCallList(object);
Partager