Bonjour à tous,
alors j'ai vu pas mal de topic qui parlent de ce probleme, et j'ai beau avoir essayé les solutions proposées, ça ne marche toujours pas.
En gros pour faire simple, je dessine un cube en (0,0,0)
Lors d'un clic, jutilise un picking pour déterminer si mon cube est en dessous du curseur. Jusque là, pas de probleme.
Seulement je veux faire un déplacement (par des translate) du cube tant que le bouton est enfoncé: le cube doit donc théoriquement "suivre" le curseur de ma souris.
J'ai donc créé ceci:
avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // Définition de la fonction de gestion de la souris (sur clic) glutMouseFunc(mouseEvent); // Définition de la fonction de gestion de la souris (sur déplacement lorsqu'un bouton est enfoncé) glutMotionFunc(mouseMoveEvent);
x représente la position du curseur lors du clic, et px la position en éplacement (respectivement avec py)
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 void mouseEvent( int button, int state, int x, int y ){ if ( button == GLUT_LEFT_BUTTON ){ if(state==GLUT_DOWN){ px=x; py=y; picking(...); } } //s'il est relaché (state==GLUT_UP) else{ px = 0; py = 0; } } void mouseMoveEvent(int x, int y){ px = x; py = y; deplacer_obj(); }
Le probleme se pose donc dans ma fonction deplacer_obj():
si je fait un translate de (x-px), les données ne sont pas bonne car en coordonnées souris: le cube se déplace, mais trop "vite" par rapport au curseur.
J'ai testé la solution avec gluUnProject (http://nehe.gamedev.net/data/article...sp?article=13), et ça ne fonctionne pas du tout :/
qulqu'un pourrait-il me venir en aide?
Partager