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 :

[JOGL]utiliser la souris pour déplacer un élément


Sujet :

OpenGL

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    janvier 2003
    Messages
    2 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : janvier 2003
    Messages : 2 830
    Points : 4 614
    Points
    4 614
    Par défaut Utiliser la souris pour déplacer un élément
    Bonjour

    Dans le cadre d'un rafraîchissement mémoire personnel sur OpenGL en utilisant JOGL (1.1.1r5) avec Java6, je crée une visualisation "bête" de 4 points:
    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
     
        public void init(GLAutoDrawable arg0) {
            this.gl = arg0.getGL();
            gl.glShadeModel(GL.GL_SMOOTH); // Enable Smooth Shading
            gl.glClearColor(1f, 1f, 1f, 1f);
            gl.glClearDepth(1.0f);
            arg0.addMouseListener(this);
            arg0.addMouseMotionListener(this);
        }
     
        public void display(GLAutoDrawable arg0) {
            this.gl = arg0.getGL();
            gl.glLoadIdentity();
            gl.glTranslatef(0f, 0f, -5f);
            drawWorld(gl);
            GLU glu = new GLU();
            int viewport[] = new int[4];
            double mvmatrix[] = new double[16];
            double projmatrix[] = new double[16];
            int realy = 0;// GL y coord pos
            double wcoord[] = new double[4];// wx, wy, wz;// returned xyz coords
            if (mouse != null) {
                int x = mouse.getX(), y = mouse.getY();
                switch (mouse.getButton()) {
                    case MouseEvent.BUTTON1:
                        gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
                        gl.glGetDoublev(GL.GL_MODELVIEW_MATRIX, mvmatrix, 0);
                        gl.glGetDoublev(GL.GL_PROJECTION_MATRIX, projmatrix, 0);
                        // note viewport[3] is height of window in pixels
                        realy = viewport[3] - (int) y - 1;
                        System.out.println("Coordinates at cursor are (" + x + ", " + realy + ")");
                        glu.gluUnProject((double) x, (double) realy, (z+(-5f)), //
                                mvmatrix, 0,//
                                projmatrix, 0,//
                                viewport, 0, //
                                wcoord, 0);
                        System.out.println("World coords at z="+(z+(-5f))+" are (" //
                                + wcoord[0] + ", " + wcoord[1] + ", " + wcoord[2] + ")");
                        break;
                    case MouseEvent.BUTTON2:
                        break;
                    default:
                        break;
                }
            }
        }
     
        private void drawWorld(GL gl) {
            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
            Node n0 = new Node(gl, new GLU(), -0.35f, 0.25f, z);
            n0.draw();
            Node n1 = new Node(gl, new GLU(), 0.35f, 0.25f, z);
            n1.draw();
            Node n2 = new Node(gl, new GLU(), 0.35f, -0.25f, z);
            n2.draw();
            Node n3 = new Node(gl, new GLU(), -0.35f, -0.25f, z);
            n3.draw();
            gl.glFlush();
        }
     
        public void reshape(GLAutoDrawable arg0, int x, int y, int w, int h) {
            this.gl = arg0.getGL();
            final GLU glu = new GLU();
            gl.glViewport(0, 0, w, h);
            gl.glMatrixMode(GL.GL_PROJECTION);
            gl.glLoadIdentity();
            glu.gluPerspective(45, w / h, 1.0, 100);
            gl.glMatrixMode(GL.GL_MODELVIEW);
            gl.glLoadIdentity();
        }
     
    /**Far away in the same class*/
     
        class Node {
     
            private GL gl;
            private GLU glu;
            public float x,  y,  z;
            private final float c = 0.025f;
            int id = 0;
     
            public Node(GL gl, GLU glu) {
                this.gl = gl;
                this.glu = glu;
            }
     
            public Node(GL gl, GLU glu, float x, float y, float z) {
                this.gl = gl;
                this.glu = glu;
                this.x = x;
                this.y = y;
                this.z = z;
            }
     
            public void draw() {
                gl.glPolygonMode(GL.GL_FRONT, GL.GL_FILL);
                gl.glColor3f(1f, 0f, 0f);
                gl.glBegin(GL.GL_POLYGON);
                gl.glVertex3f(x - c, y + c, z);
                gl.glVertex3f(x + c, y + c, z);
                gl.glVertex3f(x + c, y - c, z);
                gl.glVertex3f(x - c, y - c, z);
                gl.glEnd();
            }
        }
    Ce code affiche 4 points et au clic souris, affiche la position du clic.
    Ce que je cherche finalement, c'est de pouvoir déplacer mes points avec la souris sachant que je peux rester dans un environnement 2D. La raison de l'utilisation de JOGL est dû au fait que je veux par la suite afficher des réseaux moléculaires pouvant être grand.
    En fait, je coince sur le déplacement de mes points. Avant, en C, j'utilisais les routines de GLUT. Mais avec JOGL, je ne vois pas trop comment faire :s Si vous avez des exemples, même en C, n'utilisant pas GLUT pour les déplacements d'objets avec la souris, je suis preneur.

    Merci d'avance de votre aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    janvier 2003
    Messages
    2 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : janvier 2003
    Messages : 2 830
    Points : 4 614
    Points
    4 614
    Par défaut
    Ok, j'y suis arrivé.
    Je proposerais un code complet ultérieurement.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Membre du Club
    Inscrit en
    février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    Salut !
    Tu pourrais mettre le code en question ? Parce que je cherche comment faire et je ne vois pas du tout...

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    janvier 2003
    Messages
    2 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : janvier 2003
    Messages : 2 830
    Points : 4 614
    Points
    4 614
    Par défaut
    Hello

    Je pense qu'un tel code doit exister sur ce forum. Fais une recherche avec mon pseudo comme paramètre pour ce forum. Tu devrais trouver pas mal de sources d'inspiration

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre du Club
    Inscrit en
    février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    d'accord merci, je vais jeter un oeil !

  6. #6
    Membre du Club
    Inscrit en
    février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    le problème c'est qu'il y a plusieurs dixaines de pages

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

Discussions similaires

  1. Utilisation de variable pour attributs et éléments
    Par BenjGe dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/07/2013, 12h49
  2. Réponses: 1
    Dernier message: 21/05/2010, 16h10
  3. Réponses: 9
    Dernier message: 16/03/2007, 02h41
  4. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58

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