IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

selection de plusieurs facettes


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 7
    Points
    7
    Par défaut selection de plusieurs facettes
    salut,
    bon je dois pouvoir faire une selection de plusieurs facettes a l'aide d'un carré de sélection et ensuite de pouvoir deselectionner celles que je veux pas en recliquant dessus.
    J'ai déjà posé la question on m'a dis d'agrandir le carré au bout de ma souris (picking) et de faire une mise a jour de ma selection chaque fois que je bouge la souris. Je suis d'accord mais ça ne marche pas, je ne dois pas faire ce qu'il faut...
    Quelqu'un connait un tutoriel ou un article qui traite de ce sujet?
    Ca me ferait gagner du temps
    merci

  2. #2
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    quelqu'un pourrait il me dire au moins comment mettre a jour ma souris a chaque deplacement???

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Bin.. tu n'as pas un évenement glut qui te retourne les coordonnées x et y de ta souris? Il ne devrait alors pas être hyper dur de savoir dans quelle facette te te trouve et de changer alors ses attributs de couleur non?
    ou alors, je n'ai pas tout compris ou sous-estime la difficulté.
    merce pour la suite...

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Effectivement le problème est simple... c'est bien ca qui m'embete!!!!
    C'est de bloquer sur une petite connerie, qui soit dit en passant, retarde tout mon projet...
    Donc en fait j'arrive bien à recuperer les coordonnées mais des que je deplace la souris il me garde plus la facette que je viens de cliquer...
    Donc je suppose qu'il faut que je les stocke au fur et a mesure mais ca ne marche pas...
    C'est pour cette raison que je voulais savoir si quelqu'un avait un tutoriel a ce sujet ou un exemple de code parce que je pense que mon probleme c'est une erreur d'étourderie...
    Bon ben si jamais quelqu'un a ça, pensez a moi!!!
    sinon merci bien

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    voila le code de ma fnoction qui gère la souris:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    /********* fonction de gestion de la souris***********/
     
    GLvoid window_mouseFunc(int button, int state, int x, int y)
    {
     
    	bouton=button;
     
    	if (button == GLUT_MIDDLE_BUTTON)
    	{
     
    		if (state == GLUT_DOWN)
    		{
     
    			GLuint * selectBuf;
    			GLint hits=0;
    			GLint viewport[4];
     
    			selectBuf = (GLuint*)malloc(taille_pick*sizeof(GLuint));
     
    			glGetIntegerv(GL_VIEWPORT, viewport);
     
    			glSelectBuffer(taille_pick, selectBuf);
    			glRenderMode(GL_SELECT);
     
    			glInitNames();
     
    			glPushName(0);
     
    			glMatrixMode(GL_PROJECTION);
    			glPushMatrix();
    				glLoadIdentity();
    				gluPickMatrix( (GLdouble)x, (GLdouble)(viewport[3]-y), 3., 3., viewport);
    				gluPerspective(45.0f,(GLfloat)WIDTH/(GLfloat)HEIGHT,0.1f,1000.0f);
    				cellule(GL_RENDER);
    			glPopMatrix();
     
    			glFlush();
    			hits=glRenderMode(GL_RENDER);
    			processHits(hits, selectBuf);
    			glutPostRedisplay();
    		}
    	}
     
    	mouse_pos_x = x;
    	mouse_pos_y = y;
    }
    Merci d'avance[/code]

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 7
    Points
    7
    Par défaut oups désolée
    bon apparement je me suis trompée de code....
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
     
    void processHits(GLint hits, GLuint buffer[])
    {
    	int i,ii;
    	unsigned int z;
    	GLuint  *ptr;
     
    	if (hits>=taille_pick || hits<0)
    		printf("trop de points cliques : %d\n", hits);
    	else
    	{
    		/*!on initialise le pointeur*/
    		ptr = (GLuint *) buffer;
     
    		z=ptr[1];
    		printf("  z is %i;",  ptr[1]);
    		ii=0;
    		if(z>ptr[2])
    			z=ptr[2];
     
    		for (i = 0; i < hits; i++) 
    		{  
    			/*!on teste quel point picke est le plus proche*/
    			ptr++;
    			if(z>*ptr)
    			{
    				z=*ptr;
    				ii=i;
    				 printf("  z is %i;",  *ptr);
    			}
    			ptr++;
    			if(z>*ptr)
    			{
    				z=*ptr;
    				ii=i;
    				printf("  z is %i;", *ptr);
    			}
    			ptr++;
     
     
    			ptr=saut(ptr);/*!on saute les donnees*/
     
    		}
     
     
    		ptr = (GLuint *) buffer;/*!on reinitialise le pointeur*/
     
    		for (i = 0; i < hits; i++) 	/*! on affiche les caracteristique*/
    		{   
    			/*!on saute les 3 premieres donnees*/
    			ptr++;
    			ptr++;
    			ptr++;
     
    			if(i==ii)
    			{
    				if (style==GL_POINTS)
    				{
    					printf("Point appartenant l'objet n°");
    					printf("%d ", *ptr); 
    					num_objett = *ptr;
    					num_objetV = num_objett;
     
    					ptr++;
    					printf("et a la facette n°");
    					printf("%d ", *ptr); ptr++;
    					printf("et ayant pour id ");
    					printf("%d ", *ptr); 
     
    					num_facettet = *ptr;
    					num_facetteV = num_facettet;
    					ptr++;
    				}
     
    				if (style==GL_LINE_LOOP)
    				{
    					printf("Fil appartenant l'objet n°");
    					printf("%d ", *ptr); 
    					num_objett = *ptr;
    					num_objetV = num_objett;
     
    					ptr++;
    					printf("Fil appartenant a la facette n°");
    					printf("%d ", *ptr); 
    					num_facettet = *ptr;
    					num_facetteV = num_facettet;
    					ptr++;
    				}
     
    				if (style==GL_POLYGON)
    				{
    					printf("Facette appartenant l'objet n°");
    					printf("%d ", *ptr);
    					num_objett = *ptr;
    					num_objetV = num_objett;
     
    					ptr++;
    					printf("Facette n°");
    					printf("%d ", *ptr); 
     
    					num_facettet = *ptr;
    					num_facetteV = num_facettet;
    					ptr++;
    				}
    				printf("\n");
    			}
    			else
    			{
     
    			ptr=saut(ptr);	/*!on saute les donnees si on est pas sur le bon point*/
    			}
    		}
    		printf("\n");
    	}
    }
    Voilà pour le processhits
    Mais je suis pas sur que ce soit dans ce morceau qu'il me manque quelque chose... En fait j'arrive a recuperer la premiere facette que je clicke mais pas les suivantes (le click restant enfoncé et la souris se deplacant)
    Bon je sais c'est une question débile et pour la plupart d'entre vous ca parait évident mais moi a force de regarder ce code je fini par ne plus rien voir
    Merci

    [/code]

Discussions similaires

  1. SELECT sur plusieurs Tables et Composer Champs
    Par Giuseppe dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/11/2005, 12h27
  2. selection de plusieurs dates avec un calandrier
    Par matdesign dans le forum Access
    Réponses: 5
    Dernier message: 01/10/2005, 08h21
  3. un seul SELECT sur plusieurs tables ?
    Par deloo dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/09/2005, 12h57
  4. [XSLT]select sur plusieur documents XML
    Par jesus144 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/06/2005, 10h56
  5. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo