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, pbm de coordonnées


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut GlOrtho, pbm de coordonnées
    eeeuh et voila encore un problème !!

    1/ Je lance mon appli 3D en 800x600
    2/ Je fais un glOrtho(0, 800, 600, 0, 0, 100) a la fin de ma boucle principale
    3/ Quand j'affiche un carré ayant pour centre (0,0), cela ne semble pas correspondre exactement au coin supérieur gauche, qui sera situé à qqc plutot du genre (90,84)...

    C'est assez embetant car comme c'est pour faire un menu, je teste si la souris est sur un élément en X, Y... donc si on parle pas du même système de coordonnées... ça le fait pas :s

    J'ai trouvé très peu d'infos et surtout très peu parlantes (en GLUT souvent aussi...) sur la fonction GlOrtho, et je pense que c'est elle que j'utilise mal et qui cause ce soucis.


    Si quelqu'un sait... :s

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par adrien357
    Je fais un glOrtho(0, 800, 600, 0, 0, 100) a la fin de ma boucle principale
    A part que je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glOrtho(0, 800, 600, 0, -1, 1)
    Je fais pareil

    3/ Quand j'affiche un carré ayant pour centre (0,0), cela ne semble pas correspondre exactement au coin supérieur gauche, qui sera situé à qqc plutot du genre (90,84)...
    Montre le code complet, concis et compilable qui affiche le carré avec cette erreur...

    C'est assez embetant car comme c'est pour faire un menu, je teste si la souris est sur un élément en X, Y... donc si on parle pas du même système de coordonnées... ça le fait pas :s
    C'est clair

    et je pense que c'est elle que j'utilise mal et qui cause ce soucis.
    Pas à ce que je vois,
    Jc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    procedure OnResize(width, height : integer); STDCALL;
    begin
        glViewPort(0, 0, width, height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity;
        gluPerspective(60, width/height, 1.0, 3000.0);
    end;
     
     
    begin
     
    glfwInit;
    glfwOpenWindow(800,600, 0, 0, 0, 0, 0, 0, GLFW_WINDOW );
    glClearColor( 0.0, 0.0, 0.0, 0.0 );
    glfwSetWindowSizeCallBack(OnResize);
    glfwEnable( GLFW_STICKY_KEYS );
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glDepthFunc(GL_LESS);
     
    glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity;
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
     
     
    // chargement de chaque boutton
     
    glGenTextures(1, @ta);
    glBindTexture(GL_TEXTURE_2D,ta);
    glfwLoadTexture2D('Textures/menu/jouer.tga', GLFW_BUILD_MIPMAPS_BIT);
    running := 1;
     
    while running <> 0 do begin
     
        gluLookAt(0, 0, 0, 1, 0, 0, 0,0,1);
     
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glOrtho(0, 800, 600, 0, 0, 100);
     
        glBindTexture(GL_TEXTURE_2D, ta);
        glBegin(GL_QUADS);
            glTexCoord2f(0,0);      glVertex2i(90, 500);
            glTexCoord2f(0,1);      glVertex2i(90,90);
            glTexCoord2f(1,1);      glVertex2i(720,90);
            glTexCoord2f(1,0);      glVertex2i(720,500);
        glEnd;
     
        glfwGetMousePos(MouseX,MouseY);
        writeln(inttostr(MouseX)+' ; '+inttostr(MouseY));
     
        if glfwGetKey(GLFW_KEY_ESC) = 1 then running := 0;
    end;
    glfwTerminate;
    end.
    voila ce qui pourrait peut être influer...

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Ces deux lignes, n'ont rien à faire là...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        gluLookAt(0, 0, 0, 1, 0, 0, 0,0,1);
    A virer...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       gluPerspective(60, width/height, 1.0, 3000.0);
    Mais plutôt :
    glOrtho(0, width, height, 0, 0, 100);[/CODE]


    Pourquoi avoir mis ceci dans la boucle?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glOrtho(0, 800, 600, 0, 0, 100);
    Jc

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Une image pour illustrer le problème?

    Jc

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    J'ai inclus toutes les modifications sur les matrices / sur l'affichage qui interviennent dans le projet final, c'est pour ca qu'il y a ces lignes... qui bien sur sont totalement inutiles ici, mais comme je ne connais pas le fonctionnement réel de glortho, je les ai mises des fois que ça ai un sens... apparemment non ^^.

    image à venir... beeh en 0,0 y a pas d'image justement
    en prenant 90,90 comme dans l'exemple ça me met le carré quasiment dans l'angle supérieur gauche.

  7. #7
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    glBegin(GL_QUADS);
    glTexCoord2f(0,0); glVertex2i(90, 500);
    glTexCoord2f(0,1); glVertex2i(90,90);
    glTexCoord2f(1,1); glVertex2i(720,90);
    glTexCoord2f(1,0); glVertex2i(720,500);
    glEnd;
    Bon, à moins que je ne me trompe ou que j'ai mal suivi, est ce qu quelqu'un peut me dire comment ce quad est centré autour de (0, 0) ?

  8. #8
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Modjo
    Bon, à moins que je ne me trompe ou que j'ai mal suivi, est ce qu quelqu'un peut me dire comment ce quad est centré autour de (0, 0) ?
    Il ne l'est pas, nous sommes en mode Ortho...

    Jc

  9. #9
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Oui je vois, mais adrien357 a dit au début :
    3/ Quand j'affiche un carré ayant pour centre (0,0),
    Donc Ortho ou perspective, le quad
    glBegin(GL_QUADS);
    glVertex2i(90, 500);
    glVertex2i(90,90);
    glVertex2i(720,90);
    glVertex2i(720,500);
    glEnd;
    n'est pas centré en (0, 0), mais en (405, 295)...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    il n'est pas centré en 0,0 mais il part de l'angle supérieur gauche (qui devrait être 0,0), mais qui correspondent aux coordonées 90,90 environ

  11. #11
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    D'accord, je vois. Désolé.
    Est ce que ton application est en mode fenêtré ou plein écran ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    Pas de problème c'est moi qui est donné un code qui collait pas a ce que je disais (mais qui était + rapide à expliquer )

    Je suis en mode fenêtré... j'ai essayé de changer les résolutions ça ne change rien, j'ai toujours un décallage entre la résolution / les coordonnées sur lesquelles je dois afficher.

  13. #13
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Est tu sur que la taille de ta fenêtre est 800*600 ?
    Sinon, essaies d'inverser les paramètres de glOrtho, en utilisant 0, 600 à la place de 600, 0. Puis vérifie que ton quad est au coin inférieur gauche ...

  14. #14
    Membre éclairé Avatar de NiuAge
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Par défaut
    Lut Adrien
    Si t'avais pas posé la question, je l'aurai fait ^^. Vraiment embêtant comme bug.
    Ce que je me demande, c'est si le décalage est le même pour toutes les résolutions, ou s'il est proportionnel. Dans ces 2 cas, à défault de corriger le prob, on pourrait s'y adapter.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    héhé j'ai cherché et pas trouvé de coefficient vraiment simple (private joke : faudrait faire appel à YJD)... voila les décallage sur Y par exemple en 800x600 :

    à 150 -> decal de 120
    à 200 -> decal de 75
    à 400 -> décal de -74

  16. #16
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Ce n'est pas logique ton problème. Voici comment je fais pour mettre en place une vue Ortho :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    glMatrixMode(GL_PROJECTION);                            // Select The Projection Matrix
    glLoadIdentity();                                                       // Reset The Projection Matrix
    glViewport(0,0,WIDTH,HEIGHT);                           // Reset The Current Viewport
     
    glOrtho(0.0f,WIDTH,HEIGHT,0,-1.0f,1.0f);        // Create Ortho 640x480 View (0,0 At Top Left)
     
    glMatrixMode(GL_MODELVIEW);                                     // Select The Modelview Matrix
    glLoadIdentity();
    Vérifie que tu ne fais rien d'autre comme opérations sur les matrices, que tu ne joues pas avec la perspective et normalement il n'y a pas de raison d'avoir de problème.

    Visiblement, tu fais cela en Delphi donc je ne peux pas t'aider plus que ça

    Jc

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    merci bien, je vais ré-essayer de voir si une opération est succeptible de modifier tout ça...

  18. #18
    Membre éclairé Avatar de NiuAge
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Par défaut
    Alors... je viens de tester ça, et miracle ! ça marche

    Nous, on faisait seulement ça je crois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glOrtho(0, WIDTH, HEIGHT, 0, 0, 100);
    Par contre, ça serait trop beau s'il n'y avait pas de problème... Le décor ne s'affiche plus avec ton code fearyourself. Mais bon, j'ai pas encore regardé en détail... Je dois pas faire les bonnes commandes pour repasser en mode 3D.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    ah yes yes yessssssss ça marche oui mes super classes de menu/bouttons vont marcher !

    reste plus qu'a trouver effectivement comment retourner dans le bon mode 3D...
    merci bien !

  20. #20
    Membre éclairé Avatar de NiuAge
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Par défaut
    Le seul truc que j'ai trouvé pour que ça repasse correctemet en mode 3D, c'est de rappeler gluPerspective à chaque boucle... ça marche, mais ça me parait un peu moisi comme technique...

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

Discussions similaires

  1. Récuperer les coordonnées d'un vecteur
    Par kerzut dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/04/2003, 11h51
  2. [ PostgreSQL ] Pbm migration base d'un serveur à un autre
    Par TiSteph dans le forum Administration
    Réponses: 3
    Dernier message: 06/03/2003, 18h04
  3. [Crystal Report 8.5 + VB6] Pbm déploiment
    Par La Gillasse dans le forum SDK
    Réponses: 2
    Dernier message: 14/10/2002, 15h19
  4. Coordonnées du curseur ???
    Par LE CHAKAL dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/08/2002, 17h28
  5. Pbm avec les '&'...
    Par AmaX dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/08/2002, 11h08

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