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 :

glOrtho et zoom


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 891
    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 891
    Par défaut glOrtho et zoom
    Bonjour

    Je dispose d'une scène dont les repères sont définies par glOrtho(xmin, xmax, ymin, ymax, zmin, zmax).
    J'arrive à faire tout ce que je veux mais je voudrais implémenter un zoom. Y a t'il moyen de faire cela en "simplement" changeant mon repère avec une constante de zoom ? Y a t'il sinon un moyen plus élégant ?

    Merci d'avance.

    @++
    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
    pour faire un zoom, il faut changer la matrice de visualisation (pour reduire l'angle quand tu est en projection conique généralement), donc introduire un facteur de zoom dans ton glOrtho me semble tout a fait convenable comme solution
    * 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 891
    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 891
    Par défaut
    Bonjour bafman

    Merci de ton conseil. je l'ai appliqué et cela fonctionne. Merci à toi.
    Toutefois, je trouve quand même cela bien lent.
    Voici un extrait de mon 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
     
    public void mouseWheelMoved(MouseWheelEvent arg0) {
            if(arg0.getWheelRotation()==1)
                zoom*=2;
            else
                zoom*=0.5f;
            this.mw.refresh();
        }
     
    public void reshape(GLAutoDrawable arg0, int x, int y, int w, int h) {
            this.gl = arg0.getGL();
            GLU glu = new GLU();
            gl.glViewport(0, 0, w, h);
            gl.glMatrixMode(gl.GL_PROJECTION);
            gl.glLoadIdentity();
            System.out.println("reshape zoom="+this.zoom);
            gl.glOrtho(-5f*zoom, 5f*zoom, -5f*zoom, 5f*zoom, -5f*zoom, 5f*zoom);
            glu.gluPerspective(30, this.height/this.width, -5f, 5f);
            gl.glMatrixMode(gl.GL_MODELVIEW);
            gl.glLoadIdentity();
        }
     
    private void pickPoint(GL gl) {
            GLU glu = new GLU();
            int selectBuf[] = new int[BUFSIZE];
            IntBuffer selectBuffer = BufferUtil.newIntBuffer(BUFSIZE);
            int hits;
            int viewport[] = new int[4];
     
            gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
     
            gl.glSelectBuffer(BUFSIZE, selectBuffer);
            gl.glRenderMode(GL.GL_SELECT);
     
            gl.glInitNames();
            gl.glPushName(0);
     
            gl.glMatrixMode(GL.GL_PROJECTION);
            gl.glPushMatrix();
            gl.glLoadIdentity();
            glu.gluPickMatrix((double) this.point.x,
                    (double) (viewport[3] - this.point.y),//
                    5.0, 5.0, viewport, 0);
            System.out.println("pickPoint zoom="+this.zoom);
            gl.glOrtho(-5f*zoom, 5f*zoom, -5f*zoom, 5f*zoom, -5f*zoom, 5f*zoom);
            drawWorld(gl, GL.GL_SELECT);
     
            gl.glMatrixMode(GL.GL_PROJECTION);
            gl.glPopMatrix();
            gl.glFlush();
     
            hits = gl.glRenderMode(GL.GL_RENDER);
            selectBuffer.get(selectBuf);
            processHits(hits, selectBuf);
        }
     
        private void processHits(int hits, int buffer[]) {
            int names, ptr = 0;
            if (hits > 0) {
                names = buffer[ptr] - 1;
                selected = names;
            } else {
                selected = -1;
            }
        }
    Comme tu le vois, je fais du picking en même temps.
    Autre chose, voici la méthode refresh():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void refresh(){
            this.gljPanel.updateUI();
        }
    Y a t'il moyen d'optimiser ou je m'y prends mal ?

    Merci d'avance.

    @++
    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.

  4. #4
    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
    je ne vois pas de problème particulier, en tout cas, ce n'est pas le fait de changer ta matrice de visualisation qui va ralentir l'affichage...
    * 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

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 116
    Par défaut
    Une optimisation serait de travailler sur des entiers et non des flottants, bien que l'amélioration soit minime.

Discussions similaires

  1. visualisation et zoom d'une image
    Par julie20 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2003, 03h28
  2. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40
  3. [VB6][Graphisme] Zoom
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/10/2002, 17h30
  4. Zoom avec du TJPEG
    Par Thylia dans le forum C++Builder
    Réponses: 3
    Dernier message: 17/06/2002, 16h03
  5. URGENT : Zoom et changement de repère
    Par poca10 dans le forum MFC
    Réponses: 5
    Dernier message: 28/05/2002, 13h32

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