Partage
  • Partager sur Facebook
  • Partager sur Twitter

[OpenGL] problème curseur personnalisé

    17 décembre 2006 à 17:28:23

    Bonjour,
    j'essaye de créer un curseur destiné à être souvent changé de texture car le curseur par défaut ne me convient pas.
    Mon problème est que le curseur ne peut se déplacer que dans le quart en bas à droite de mon écran o_O .

    Image utilisateur

    Je code avec l'api windows.
    Voici mon code :
    dans la boucle de traitement de message
    case WM_MOUSEMOVE:
            GetCursorPos ( &curseur ) // Récupère les coordonnées de mon curseur;
            break;


    ma fonction de dessin
    void SceneFenetreJeu ()
    {
            glClearColor    ( 0.0, 0.0, 0.0, 0.0 );
            glClear   ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
            glMatrixMode    ( GL_MODELVIEW );
            glLoadIdentity  ();

            gluLookAt       ( 0, 2, 0, 0, 0, 0, 0, 1, 0 );

            /* Dessin 3d ici */

            Debut2D  ( resolutionEcran.x, resolutionEcran.y );

            glEnable        ( GL_BLEND);
            glBlendFunc     ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

            glEnable        ( GL_TEXTURE_2D );

            glBindTexture ( GL_TEXTURE_2D, curseur );

            glPushMatrix ();

            glTranslatef ( curseur.x, -curseur.y, 0 );

            glBegin ( GL_QUADS );
                    glTexCoord2d ( 0.0, 0.0 );           
                    glVertex2d ( resolutionEcran.x/2 - resolutionEcran.x/60, resolutionEcran.y/2 - resolutionEcran.y/60 );
                    glTexCoord2d ( 1.0, 0.0 );           
                    glVertex2d ( resolutionEcran.x/2 + resolutionEcran.x/60, resolutionEcran.y/2 - resolutionEcran.y/60 );
                    glTexCoord2d ( 1.0, 1.0 );           
                    glVertex2d ( resolutionEcran.x/2 + resolutionEcran.x/60, resolutionEcran.y/2 + resolutionEcran.y/60 );
                    glTexCoord2d ( 0.0, 1.0 );           
                    glVertex2d ( resolutionEcran.x/2 - resolutionEcran.x/60, resolutionEcran.y/2 + resolutionEcran.y/60 );
            glEnd ();

            glPopMatrix ();

            glDisable ( GL_TEXTURE_2D );
            glDisable ( GL_BLEND );

            Fin2D ();

            SwapBuffers          ( DC );
    }
    • Partager sur Facebook
    • Partager sur Twitter
      17 décembre 2006 à 20:18:02

      Tu est sur de ca :
      Debut2D ( resolutionEcran.x, resolutionEcran.y );
      Vérifie resolutionEcran !
      Met le code de Debut2D();
      • Partager sur Facebook
      • Partager sur Twitter
        18 décembre 2006 à 19:23:15

        Voilà ma fonction

        void Debut2D ( int x,int y )
        {

          glEnable(GL_TEXTURE_2D);

          glMatrixMode (GL_PROJECTION);

          glPushMatrix ();



          glLoadIdentity ();

          gluOrtho2D (0, x, 0, y );



          glMatrixMode (GL_MODELVIEW);

          glLoadIdentity ();

          glDisable(GL_DEPTH_TEST);
        }
        • Partager sur Facebook
        • Partager sur Twitter
          18 décembre 2006 à 19:32:38

          Tu charges l'identité de la matrice du modélisation/visualisation à la fin de ton matrixmode, c'est voulu ? :-°
          • Partager sur Facebook
          • Partager sur Twitter
            18 décembre 2006 à 19:38:28

            oui je sais
            quel est le problème?
            • Partager sur Facebook
            • Partager sur Twitter
              18 décembre 2006 à 19:47:48

              Si tu charges l'identité avec ta fonction 2D, je vois pas à quoi servent ces lignes :

              glMatrixMode    ( GL_MODELVIEW );
                      glLoadIdentity  ();

                      gluLookAt       ( 0, 2, 0, 0, 0, 0, 0, 1, 0 );


              Puis :

              glTranslatef ( curseur.x, -curseur.y, 0 );

              Je sais pas comment la WinAPI calcul la position du curseur, mais ça serait pas plutôt:

              glTranslatef ( curseur.x, resolutionEcran.y-curseur.y, 0 );


              ?

              EDIT:

              Et puis je sais pas comment ni pourquoi tu appliques ces calculs à tes vertices (resecran.x/2 - resecran.x/60.. ??), mais à mon avis c'est la cause de cette position bizarre.
              • Partager sur Facebook
              • Partager sur Twitter
                19 décembre 2006 à 19:29:41

                Pardon j'ai oublié d'expliquer la position de mes sommets :
                - je divise ma résolution par 2 pour centrer mon curseur
                - et j'enlève/j'ajoute un morceau de ma résolution/2 ( resolutionEcran/60 ) pour dessiner le carré de mon curseur

                et pour les glLoadIdentity () en trop, il faut supposer qu'il y a des dessins 3d entre ça et mon Debut2D ()

                Enfin pour
                glTranslatef ( curseur.x‚ resolutionEcran.y–curseur.y0 );

                non ça marcherai pas
                • Partager sur Facebook
                • Partager sur Twitter

                [OpenGL] problème curseur personnalisé

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown