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 :

Methode pour le dragging


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut Methode pour le dragging
    Bonjour,

    Actuellement, j'affiche dans une fenetre OpenGL plusieurs objets (rectangles, cercles...).
    Quand je veux faire un deplacement via le click de la souris, toute la fenetre se deplace donc tous les objets.

    Maintenant je voudrai pouvoir deplacer un objet uniquement quand je clique dessus. J'ai vu de nombreux exemples sur la selection et le picking mais je ne sais pas si je suis sur la bonne voie ?

    Quelqu'un a-t-il un exemple de dragging ?

    Merci.

  2. #2
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    J'ajoute que je travaille en 2D et que donc, peut-etre serait-il plus simple de le coder moi-meme plutot que d'utiliser des mecanismes d'opengl ?

  3. #3
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    effectivement, si tu bosse en 2D, faire les test par toi même sera probablement plus simple, et tu aura un meilleurs control
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  4. #4
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Oui c'est ce que je pensais au debut aussi mais si j'ai une figure quelconque les tests deviennent plus complexes...
    Un rectangle je dis pas mais une figure tracee a la main par l'utilisateur c'est autre chose.
    Je sens que je vais devoir me jeter dans le picking quand meme !

  5. #5
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Je me suis basee sur l'exemple le plus simple de picking ici mais j'ai quelques soucis.

    Voici mon code car j'ai du mal a comprendre...

    Ma fonction de dessin des rectangles que j'enregistre dans un vecteur :
    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
     
    void COpenGLControl::drawRects(GLenum mode)
    {
     
    	int nb_name = 1;
    	for(vector<CRectangle *>::iterator it = rectList.begin(); it != rectList.end();)
    	{
    		CRectangle *temp = *it;
     
    		if (mode == GL_SELECT)
    		{
    			glLoadName(nb_name);
    			nb_name++;
    		}
     
    		glBegin(GL_QUADS);			// Rectangle
    			glVertex3f(temp->getFirstPoint()->x, temp->getFirstPoint()->y, 0.0f);	// Top Left
    			glVertex3f(temp->getFirstPoint()->x, temp->getFirstPoint()->y + temp->getWidth(), 0.0f);	// Top Right
    			glVertex3f(temp->getFirstPoint()->x + temp->getLength(), temp->getFirstPoint()->y + temp->getWidth(), 0.0f);	// Bottom Right
    			glVertex3f(temp->getFirstPoint()->x + temp->getLength(), temp->getFirstPoint()->y, 0.0f);	// Bottom Left
    		glEnd();
     
    		++it;
    	} 
    }
    Ma fonction de click gauche de la souris, la ou je souhaite implementer le picking :
    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
     
    void COpenGLControl::OnLButtonDown(UINT nFlags, CPoint point)
    {
    	// ...
     
    	GLuint selectBuf[BUFSIZE];
       GLint hits;
       GLint viewport[4];
     
       glGetIntegerv(GL_VIEWPORT, viewport);
     
       glSelectBuffer(BUFSIZE, selectBuf);
       (void) glRenderMode(GL_SELECT);
     
       glInitNames();
       glPushName(0);
     
       glMatrixMode(GL_PROJECTION);
       glPushMatrix();
       glLoadIdentity();
    	/*  create 5x5 pixel picking region near cursor location */
       gluPickMatrix((GLdouble) point.x, (GLdouble) (viewport[3] - point.y),
                     5.0, 5.0, viewport);
       glOrtho(-10,10,-10,10,-10,10);
       drawRects(GL_SELECT);
     
       glMatrixMode(GL_PROJECTION);
       glPopMatrix();
       glFlush();
     
       hits = glRenderMode(GL_RENDER);
       processHits(hits, selectBuf);
       //glutPostRedisplay();
     
    	CWnd::OnLButtonDown(nFlags, point);
    }
    Et dans ma fonction de dessin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    drawRects(GL_RENDER);
    Lorsque je clique sur un des rectangle que je viens de dessiner avec la souris, je recois toujours hits = 1 et apres le click gauche ma scene disparait et je ne peux plus rien afficher.
    Ai-je oublier quelque chose ?

    Merci.

  6. #6
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Bon ben finalement j'ai trouve, il me manquait une ligne a la fin de ma fonction de click de souris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    processHits(hits, selectBuf);
    glMatrixMode(GL_MODELVIEW);
    CWnd::OnLButtonDown(nFlags, point);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/04/2006, 15h40
  2. methode pour exécuter une class dans un jar
    Par yann_p dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2006, 17h47
  3. Methode pour réinitialiser la partie body
    Par os_rasta dans le forum ASP
    Réponses: 5
    Dernier message: 13/03/2006, 10h25
  4. [MSSQL2K] methode pour reprendre une BDD incomprehensible
    Par igorzup dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/02/2006, 12h44
  5. [web] Cherche méthode pour barre de prgression
    Par Ludo167 dans le forum Web
    Réponses: 2
    Dernier message: 21/07/2004, 15h52

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