Wickedwolf
Messages postés2Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention 2 juin 2006
-
2 juin 2006 à 14:18
Wickedwolf
Messages postés2Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention 2 juin 2006
-
2 juin 2006 à 14:38
Bonjour,
je débute en C++ en suivant un cours d'infographie proposée dans mon cursus universitaire. Le projet de cette année consite en la création d'un visualiseur 3D en OpenGL. Pour l'instant je ne m'en sors pas trop mal, mais par contre je galère à mort pour la gestion de la souris. J'aimerais réaliser des action suivantes avec la dite souris:
-bouton gauche enfoncé& mouvement souris ==> translation
de l'objet
dans le plan de la fenêtre de vue
-bouton droit enfoncé& mouvement souris ==> rotation de l'objet
Je vous envoie ci-dessous mon programme (c'est une usine à gaz, certes...). Si quelq'un peut me dire ce qui cloche pour la souris, ça serait bien sympa.
Note: certaines fonctions sont précédées d'un // qui les annule, mais c'est parceque j'ai compilé plusieures fois annulant certaines commandes pour trouver ce qui clochait. D'aute part, il y a pleins de commentaires persos...faites pas attention)
Cordialement,
Antoine.
/* cube */
#include <math.h>
#include <stdio.h>
#include <GL/glut.h>
#include <math.h>
void Init(void);
void DefineCube(void);
void Display(void);
void Reshape(int w, int h);
void Keyboard(unsigned char key, int x, int y);
void Motion(int button, int state, int x, int y);
float vertices[8][3], angleu, anglev; //taille du tableau - rééls [8sommets][3coordonnées]
int elements[12][3]; //nombre d'éléments - entiers [12segments][3coordonnées]
double view_plan;
void DefineCube(void)
{
//définition des sommets (centre cube=centre repère)
Wickedwolf
Messages postés2Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention 2 juin 2006 2 juin 2006 à 14:38
OUps...il manquait une partie du programme entre Keyboard et Main :
void Keyboard(unsigned char key, int x, int y)
(...)
void mouse(int button, int state,int x,int y)
{
/* si on appuie sur le bouton gauche */ if (button GLUT_LEFT_BUTTON && state GLUT_DOWN)
{
presse = 1; // 'presse' passe a 1 (vrai)
xold = x; // sauvegarde de la position de la souris
yold=y;
}
/* si on relache le bouton gauche */ if (button GLUT_LEFT_BUTTON && state GLUT_UP)
presse=0; // 'presse' passe a 0 (faux)
}
void mousemotion(int x,int y)
{
if (presse) /* si le bouton gauche est presse */
{
/* modification des angles de rotation de l'objet
en fonction de la position actuelle de la souris et de la derniere
position sauvegardee */
anglex=anglex+(x-xold);
angley=angley+(y-yold);
glutPostRedisplay(); // rafraichissement de l'affichage
}
xold=x; // sauvegarde des valeurs courante de le position de la souris
yold=y;
}