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 :

Changer l'origine


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut Changer l'origine
    Bonjour tout le monde !

    Voilà : j'affiche une carte constituée de cases carrées. Ces cases sont créées à partir de l'origine soit le point 0,0 (je suppose)

    J'ai fait une fonction qui grâce à la souris permet de faire tourner cette carte. Seul problème ma carte tourne autour du point en haut à gauche de ma carte, ce qui ne fait pas vraiment beau

    Ce que je voudrais, c'est que le point de pivot soit le centre de ma carte (soit le point de coordonnée : (nbcases/2,nb/cases/2))

    J'ai lu ce topic et essayé les 2 méthodes présentaient mais aucune ne résoud mon problème

    Si vous pouviez m'aider
    J'utilise Delphi, OpenGL et glfw.

    Voici le bout de code qui applique mes translations et rotations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Effectue les déplacements --> translations et rotations
          glTranslatef(x2, z2, 0);
          glRotatef(sz,1,0,0);
          glRotatef(180,0,0,180);
          glRotatef(sx,0,0,-sx);
    Merci d'avane

  2. #2
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Par défaut
    Pour translaté l'origine, il suffit de faire un glTranslatef() avant le glRotatef.

    Dans ton cas, execute un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     glTranslatef(-taille/2,-taille/2);
    pour peu que ta carte soit carrée de coté 'taille'.

  3. #3
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut
    J'avais déjà essayé, ça ne fonctionne pas

  4. #4
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Par défaut
    ???

    Bizarre, tu es sur que tu ne fais pas de glLoadidentity() ou de trucs bizarre entre la commande des transformations et le dessin proprement dit de ta carte

  5. #5
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut
    Sûr
    A part activer les textures je ne fait rien entre le code que j'ai marqué et le traçage de la carte.

  6. #6
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Par défaut
    Et comment tu traces ta carte ?

  7. #7
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut
    Comme ça :
    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
    glBegin( GL_QUADS );
     
          x := 1.0;
     
          for i := 0 to nb_cases - 1 do
          begin
            y := 1.0;
            for j := 0 to nb_cases - 1 do
            begin
     
              glTexCoord2i(0,0);
              glVertex3f( x, y, 0 );
     
              glTexCoord2i(1,0);
              glVertex3f( x, y-1, 0 );
     
              glTexCoord2i(1,1);
              glVertex3f( x-1, y-1, 0 );
     
              glTexCoord2i(0,1);
              glVertex3f( x-1, y, 0 );
     
              y := y - 1;
     
            end;
     
          x := x + 1;
     
          end;
     
          glEnd;

  8. #8
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Par défaut
    A quoi ça sert de mettre des compteurs si tu ne t'en sers pas...
    Au lieu de bidouiller avec tes x et tes y que tu reaffectes à chaque fois, pourquoi ne pas utiliser i et j...

    Enfin, sinon je suis desolé, je crois que je t'ai raconté des betises puisque on aura beau translater avec glTranslatef(), ça ne changera rien puisque on dessinera la carte toujours à partir de l'origine

    C'est qu'il faut dessiner ta carte de manière à ce que le centre de la carte se trouve à l'origine du repère, genre comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i:=0 to nbcases-1 do
        begin
        for j:=0 to nbcases-1 do
            begin
            glVertex3f(i-nbcases/2,j-nbcases/2,0);
    ......
    [/code]

  9. #9
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut
    Heu oui, c'est vrai que x et y ne sont plus trop utiles maintenant ^^

    Si je généère ma carte comme ça c'est parce qu'ensuite j'affiche des objets dessus et c'est plus simple pour moi de commander au point 0,0 en haut à gauche

  10. #10
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Par défaut
    Ah ben alors, rotate d'abord puis translate ensuite en
    (-taillecarte/2,-taillecarte/2,0);
    (je sais, ça fait un peu type qui essaie tout mais bon )

  11. #11
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut
    Non plus, ça tourne plus autour du point 0,0 mais ça fait un méga tour

  12. #12
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Ben, a première vue, je dirais de déplacer la map avec gltranslate, de manière a ce que le point de rotation soit en 0/0/0, de faire la rotation, et de ramener la map la ou elle était avent.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  13. #13
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut
    J'ai déjà essayé
    ça ne fonctionne pas bien.

  14. #14
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Par défaut
    Ben essaye toujours en décalant de taille/2 quand tu dessine tes glVertex3f, ça fait qu'un petit truc à rajouter, c'est vite fait

  15. #15
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Normalement, si sa ne marche pas bien, c'est que tu t'est tromper dnas les coordonées de translation. Vérifi que les dimensions sont bien corecte, qu'il n'y a pas de décalage ect.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  16. #16
    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
    bon ben comme tout le monde hein... translate puis rotate... si ca ne marche pas le probleme viens d'autre part (essaye les translate avec des valeure differente pour voir)
    * 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

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Par défaut
    Et déplacer la caméra et son eyepoint au centre de la carte, ca marche pas ?

  18. #18
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut
    J'ai changé de méthode ^^
    J'ai regénérer la carte autour du point (0,0) et non plus à partir de ce point, ça fonctionne nickel maintenant

    Merci à tous

  19. #19
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 594
    Par défaut
    lol en fait tu as contourné ton problème, à mon avis tu devais te tromper dans tes translations

    imagine un cube de 100 de coté mais pas centré sur l'origine, coordonnées de 0 à 100 sur les 3 axes, si tu voulais faire une rotation de ton objet par rapport à son centre tu ferais quoi ?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  20. #20
    K20
    K20 est déconnecté
    Membre confirmé
    Profil pro
    Ingé DevOps
    Inscrit en
    Novembre 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingé DevOps

    Informations forums :
    Inscription : Novembre 2005
    Messages : 183
    Par défaut
    Je sais pas ^^

    Mais là ça fonctionne
    Et je pense pas mettre trompé sur mes translations, ça faisait vraiment un truc trop bizzare

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Changer origine des graphes 3D
    Par Novae dans le forum MATLAB
    Réponses: 1
    Dernier message: 18/04/2013, 11h30
  2. Changer l'origine d'un QPixmap
    Par Gébix dans le forum Débuter
    Réponses: 1
    Dernier message: 05/09/2012, 01h31
  3. Changer user-agent et page d'origine
    Par Fooshi dans le forum Internet
    Réponses: 1
    Dernier message: 08/01/2011, 17h53
  4. Ouvrir un pop, cliquer sur un lien et changer la page d'origine
    Par JackBeauregard dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/11/2006, 11h38
  5. changer l'adresse d'un fichier...
    Par cava dans le forum C
    Réponses: 6
    Dernier message: 05/06/2002, 13h22

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