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 :

pan, zoom et rotate


Sujet :

OpenGL

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut pan, zoom et rotate
    Bonjour,
    je suis débutante en openGl et en programmation 3D
    j'ai afficher un modèle en 3D, et maintenant je veux faire faire un pan, zoom et rotate en utilisant la sourie.
    j'ai cherché sur le net mais je ne trouve un exemple clair qui explique l'affaire.
    SVP comment je peut faire le zoom, pan et rotate en changeant la position de la cam ou autrement.

    Merci

  2. #2
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Bonjour 3aychoucha

    Quelle librairie utilises-tu pour gérer le fenêtrage et l'input ?

    Kromagg

  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut
    Bonjour,

    j'utilise openGl et c indiqué ci dessus.

    Merci

  4. #4
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    Bonjour,

    j'utilise openGl et c indiqué ci dessus.

    Merci
    Je te parle du fenêtrage et de l'input, pas de l'API graphique. Tu utilises GLUT, SDL, SFML, GLFW... ?

    Kromagg

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut
    Bonjour,

    Je m'excuse, mais vraiment je suis débutante.
    En fait qu'elle est la différence entre GLUT, SDL, SFML, GLFW...

    Merci

  6. #6
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    Je m'excuse, mais vraiment je suis débutante.
    Pas de problème on est tous passé par là

    Citation Envoyé par 3aychoucha Voir le message
    En fait qu'elle est la différence entre GLUT, SDL, SFML, GLFW...
    Comme tu le sais surement OpenGL est une bibliothèque portable pour faire du rendu graphique 2D et 3D, elle te permet donc d'envoyer des commandes directement à ta carte graphique. Par contre pour s'exécuter, OpenGL a besoin d'un contexte de rendu, et le contexte de rendu est tout sauf portable.

    C'est justement là qu'interviennent GLUT, SDL, SFML... car ces bibliothèques vont te fournir un contexte de rendu, la gestion du fenêtrage et de l'input de manière totalement transparente, quelque soit la plateforme sur laquelle tu exécutes ton application.

    Toutes ces bibliothèques font plus ou moins la même chose et je n'ai personnellement pas de préférences pour l'une d'entre elle. A toi de voir celle qui te convient le mieux.

    Comme tu débutes avec OpenGL je te conseille de faire un tour sur la FAQ OpenGL http://jeux.developpez.com/faq/opengl/.

    Kromagg

  7. #7
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut
    Merci ,

    Malheureusement l'exemple du site de zero ne contient que le zoom et le rotate, mais pas le pan
    SVP, comment je peux faire le pan et déplacer mes objets

    Merci

  8. #8
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Et bien c'est assez simple, enfin si je ne me trompe pas :s

    Tout d'abord c'est sur ta caméra que tu vas appliquer ton pan.

    Tu récupère l'évènement "clic droit souris" par exemple. A cet instant tu sauvegardes à la fois l'état de la souris (bouton droit enfoncé) et sa position. Puis tu récupères l'évènement "déplacement souris". A partir de là tu vérifies si le bouton droit et toujours enfoncé (avec la sauvegarde que tu as faites précédemment) et tu récupère a nouveau la position de la souris. Une petite soustraction entre la position précédemment sauvegardée et la nouvelle position devrait te donner ton pan. Tu appliques ce résultat en translation à ta caméra et le tour et jouer, du moins je l'espère

    Kromagg

  9. #9
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut
    Merci,
    Mais c pas clair
    Un bout de code stp
    Merci

  10. #10
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    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
     
    Camera defaultCamera;
     
    bool rightButtonPressed = false;
     
    int oldX, oldY = 0;
     
    void mouse(int x, int y, int button, int state)
    {
    	if (button == RIGHT_BUTTON && state == BUTTON_PRESSED)
    	{
    		rightButtonPressed = true;
    		oldX = x;
    		oldY = y;
    	}
     
    	if (button == RIGHT_BUTTON && state == BUTTON_RELEASED)
    	{
    		rightButtonPressed = false;
    		oldX = 0;
    		oldY = 0;
    	}
     
    	if (rightButtonPressed)
    	{
    		int panX = x - oldX;
    		int panY = y - oldY;
     
    		defaultCamera.translate(panX, panY);
    	}
     
    	oldX = x;
    	oldY = y;
    }
    Ca devrait marcher, tu n'as plus qu'à retranscrire ce morceau de code dans ton programme avec la gestion des évènements que tu utilises.

    Kromagg

  11. #11
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut
    Merci pour le code,
    l'objet Camera c quoi en fait ????
    autre chose aussi, d'après ce que j'ai lu, avec mouse il y a aussi motion ce que je ne trouve pas dans ce code car je veux comprendre
    Merci

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 30
    Points
    30
    Par défaut
    Pour répondre à ta question concernant la caméra, tout dépend de quelle version d'OpenGL tu te sers. En simplifiant, dans les premières versions, tu laisses openGL gérer les matrices modelview et projection et dans les dernières versions tu gères toi-même ces matrices que tu transmets aux shaders. Dans ce dernier cas, le plus souvent on crée une classe camera qui se charge de mettre à jour ces deux matrices.

    Pour le premier cas, tu dois charger la matrice modelview et appliquer un translate de panX, panY. Dans le deuxième cas, il faut que tu ajoutes une translation de panX, panY dans la matrice modelview de la caméra.

  13. #13
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    Merci pour le code,
    l'objet Camera c quoi en fait ????
    autre chose aussi, d'après ce que j'ai lu, avec mouse il y a aussi motion ce que je ne trouve pas dans ce code car je veux comprendre
    Merci
    Mouse motion correspond simplement à un évènement de type "déplacement de la souris sur la fenêtre"
    Pour ce qui est de l'objet Camera il te suffit de reprendre le code de la classe Caméra.
    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
     
    void TrackBallCamera::OnMouseMotion(const SDL_MouseMotionEvent & event)
    {
        if (_hold) //si nous maintenons le bouton gauche enfoncé
        {
            _angleZ += event.xrel*_motionSensivity; //mouvement sur X de la souris -> changement de la rotation horizontale
            _angleY += event.yrel*_motionSensivity; //mouvement sur Y de la souris -> changement de la rotation verticale
            //pour éviter certains problèmes, on limite la rotation verticale à des angles entre -90° et 90°
            if (_angleY > 90)
                _angleY = 90;
            else if (_angleY < -90)
                _angleY = -90;
        }
     
        if (_rightButtonHold) //si nous maintenons le bouton droit enfoncé
        {
            _panX += event.xrel - oldX;
            _panY += event.yrel - oldY;
        }
     
        oldX = event.xrel;
        oldY = event.yrel;
    }
     
    void TrackBallCamera::look()
    {
        gluLookAt(_distance,0,0,
                  0,0,0,
                  0,0,1); // la caméra regarde le centre (0,0,0) et est sur l'axe X à une certaine distance du centre donc (_distance,0,0)
        glRotated(_angleY,0,1,0); //la scène est tournée autour de l'axe Y
        glRotated(_angleZ,0,0,1); //la scène est tournée autour de l'axe Z
        glTranslate(_panX, _panY, 0.0f);
    }
    Je pense qu'avant de te lancer dans le codage d'une caméra et des évènements associés tu devrais commencer par lire la suite de tutoriel OpenGL, histoire de bien comprendre tous les concepts de base.

    Kromagg

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/08/2012, 13h01
  2. [ginput] Problème avec pan, zoom in, zoom out
    Par mathwork dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 14/09/2011, 20h48
  3. Probleme avec pan, zoom et permanentLogo dans apiFlash
    Par cmail dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 12/03/2011, 11h24
  4. zoom et rotation au sein d'un GUI?
    Par jponsoda dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 14/06/2010, 14h48
  5. Effet de zoom puis rotation 360°
    Par cincap dans le forum Débuter
    Réponses: 0
    Dernier message: 23/10/2009, 11h22

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