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 :

Accomoder des display lists avec du picking


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut Accomoder des display lists avec du picking
    Bonjour

    Je cherche à optimiser mon application basée sur JOGL.
    Mon but est de visualiser des réseaux et de pouvoir manipuler les noeuds à la souris (picking pour les faire changer de position).
    Voici, sous forme de méthodes, ma classe de rendu:
    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
     
    public NetworkRenderer(){
            createGLNodeList();
            createGLEdgeList();
    }
     
    public void init(GLAutoDrawable arg0) { /**/ }
     
    public void display(GLAutoDrawable arg0) {
            this.gl = arg0.getGL();
            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
            
            if (this.point != null) {
                pickPoint(gl);
            }
            
            drawWorld(gl, GL.GL_RENDER);
     
            gl.glFlush();
        }
     
    private void drawNodes(GL gl, int mode){
            gl.glPopName();
            for (int i = 0; i < this.nodes.size(); i++) {
                if (mode == gl.GL_SELECT) {
                    gl.glLoadName(i);
                    gl.glPushName(i);
                }
                GLNode n = this.nodes.get(i);
                if (this.mouse_state == this.PICKED && this.selected == i) {
                    if (this.point != null) {
                        GLU glu = new GLU();
                        int viewport[] = new int[4];
                        double mvmatrix[] = new double[16];
                        double projmatrix[] = new double[16];
                        double wcoord[] = new double[4];// wx, wy, wz;// returned xyz coords
                        int realy = 0;// GL y coord pos
                        this.gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
                        this.gl.glGetDoublev(GL.GL_MODELVIEW_MATRIX, mvmatrix, 0);
                        this.gl.glGetDoublev(GL.GL_PROJECTION_MATRIX, projmatrix, 0);
                        realy = viewport[3] - (int) this.point.y - 1;
                        glu.gluUnProject((double) this.point.x, (double) realy, 0.0, //
                                mvmatrix, 0,//
                                projmatrix, 0, //
                                viewport, 0, //
                                wcoord, 0);
                        n.setPosition((float) wcoord[0], (float) wcoord[1]);
                        n.setColor(Color.GREEN);
                    }
                } else {
                    n.setPosition(n.x, n.y);
                    n.setColor(Color.RED);
                }
                n.draw(gl, new GLU());
            }
            gl.glPopName();
        }
        
        private void drawEdges(GL gl){
            for (int i = 0; i < this.edges.size(); i++) {
                GLEdge e = this.edges.get(i);
                e.draw(gl, new GLU());
            }
        }
     
        private void drawWorld(GL gl, int mode) {
            drawNodes(gl, mode);
            drawEdges(gl);
        }
     
    public void reshape(GLAutoDrawable arg0, int x, int y, int w, int h) { /**/ }
    Je veux donc obtenir un rendu plus rapide. J'ai donc pensé aux display lists. J'ai essayé d'implementer une display liste contenant mes méthodes d'affichages des nodes et des edges, mais:
    1) la position ne correspond pas du tout à ce que j'aais avant.
    2) je perd le picking.
    Il ne fait aucun doute que je m'y suis mal pris.
    Avez-vous des conseils à me donner concernant les display lists ? Voyez-vous d'autres moyens d'optimiser le rendu ?

    Merci d'avance de vos réponses.

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

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

  2. #2
    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
    Citation Envoyé par Red book
    Not all OpenGL commands can be stored and executed from within a display list. Generally, commands that pass parameters by reference or that return a value can't be stored in a display list, since the list might be called outside the scope of where the parameters are originally defined. If such commands are called when making a display list, they're executed immediately and aren't stored in the display list. Here are the OpenGL commands that aren't stored in a display list (also, note that glNewList() generates an error if it's called while you're creating a display list). Some of these commands haven't been described yet; you can look in the index to see where they're discussed.
    • glDeleteLists()
    • glIsEnabled()
    • glFeedbackBuffer()
    • glIsList()
    • glFinish()
    • glPixelStore()
    • glFlush()
    • glReadPixels()
    • glGenLists()
    • glRenderMode()
    • glGet*()
    • glSelectBuffer()
    donc a priori, le picking et les display list c'est pas compatible... ce que tu peut faire par contre, c'est en dehors du mode picking, afficher l'environnement en display list, et quand tu fait ton picking, tu fait un affichage classique
    * 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

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Ok bafman, je te remercie de ta réponse
    Il me semblait bien que c'était cette interprétation que j'avais du red book.
    Je vais par contre réfléchir à ta proposition.

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

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

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

Discussions similaires

  1. ajout d'une description pour des fichiers listes avec apache
    Par deny dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 31/10/2007, 10h16
  2. [Débutant] Liste avec des valeurs associées aux string
    Par Bouillou dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/03/2006, 18h11
  3. Petit problèmes avec display list et transformations
    Par Baptiste Wicht dans le forum OpenGL
    Réponses: 5
    Dernier message: 10/02/2006, 17h00
  4. alligner des textbox (input) avec une liste
    Par sundjata dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/01/2006, 15h16
  5. [MFC] creer une liste avec des check????
    Par ginounet dans le forum MFC
    Réponses: 4
    Dernier message: 16/06/2004, 11h47

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