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 :

Dessiner par-dessus une texture 2D


Sujet :

OpenGL

  1. #1
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut Dessiner par-dessus une texture 2D
    Bonjour à tous,

    J'affiche une texture OpenGL.
    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
     
    glViewport(190,360,798,340);
    glMatrixMode (GL_PROJECTION) ;					
    glLoadIdentity () ;	
    gluOrtho2D(190, 988, 360, 700) ;
    glMatrixMode (GL_MODELVIEW);						
    glLoadIdentity ();glEnable(GL_TEXTURE_2D) ;
     
    glBindTexture( GL_TEXTURE_2D, textureBmp->id );
    glBegin( GL_QUADS );
       glTexCoord2i( 0, 0 ); glVertex2i( textureBmp->x, textureBmp->y);
       glTexCoord2i( 1, 0 ); glVertex2i( textureBmp->x + textureBmp->width, textureBmp->y);
       glTexCoord2i( 1, 1 ); glVertex2i( textureBmp->x + textureBmp->width, textureBmp->y - textureBmp->height);
       glTexCoord2i( 0, 1 ); glVertex2i( textureBmp->x, textureBmp->y  - textureBmp->height);
    glEnd();	 
    glDisable(GL_TEXTURE_2D) ;
    Jusque-là tout va bien

    Je voudrais maintenant dessiner un point sur cette texture.
    J'ai donc essayé
    _ de remplacer gluOrtho par glOrtho avec des valeurs 0 et 1 pour le near et le far,
    _ puis de remplacer glTexCoord2i et glVertex2i par glTexCoord3i et glVertex3i en mettant 1 pour les valeurs de z,
    _ de dessiner un point en z = 0.

    Ma texture ne s'affiche plus ... le point n'apparaît pas également. Comment dois-je procéder ?

  2. #2
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Si je comprend bien, on veut un point sur cette texture, un point dessiné à l'aide d'OpenGL et pas dans la texture elle-même ?

    On peut essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    glBegin( GL_QUADS );
       glTexCoord2i( 0, 0 ); glVertex2i( textureBmp->x, textureBmp->y);
       glTexCoord2i( 1, 0 ); glVertex2i( textureBmp->x + textureBmp->width, textureBmp->y);
       glTexCoord2i( 1, 1 ); glVertex2i( textureBmp->x + textureBmp->width, textureBmp->y - textureBmp->height);
       glTexCoord2i( 0, 1 ); glVertex2i( textureBmp->x, textureBmp->y  - textureBmp->height);
    glEnd();	 
    glDisable(GL_TEXTURE_2D) ;
     
    glBegin(GL_POINTS);
       glVertex2i( textureBmp->x + 5, textureBmp->y + 5) ;
    glEnd();

  3. #3
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut
    Merci pour ta réponse Happy.

    Mais justement, mon point j'essaye bien de l'afficher avec GL_POINTS. Mon souci c'est que rien n'apparaît !

    D'où ma demande, je voudrais savoir quels paramètres mettre avant de dessiner le point pour pouvoir l'afficher, parce que je suppose que le problème vient du fait qu'on est en 2D, et que si je veux dessiner un point par-dessus un autre il faut les mettre à deux hauteurs différentes.

  4. #4
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Il y a plusieurs façons, peut être deux

    Voici une, le code de préparation, il doit être appelé avant d'afficher des choses 2D. Il vaut mieux regrouper les choses 2D de façon à devoir appeler ce code une seule fois dans la boucle d'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    glViewport( 0, 0, 800, 600 ); // on devrait appeler cette fonction que si on change la taille de la fenêtre
    glLoadIdentity();
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D( 0, 800, 600, 0 );
    glDisable(GL_DEPTH_TEST);
    Maintenant on peut afficher des choses 2D sur l'entier-té de l'écran, et l'ordre d'affichage est l'ordre dans laquelle on appelle glBegin().

    Puis une fois qu'on veut repasser en 3D on appelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glEnable(GL_DEPTH_TEST);

  5. #5
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut
    Merci pour toutes ces infos.

    Tout d'abord j'ai besoin de plusieurs viewports, d'où mes dimensions un peu particulières. Cela fonctionne très bien jusqu'ici.

    J'ai essayé de mettre le glDisable(GL_DEPTH_TEST) ; avant l'affichage de la texture, puis d'indiquer glEnable (GL_DEPTH_TEST) ; et enfin d'afficher le point. Mais toujours rien...
    (J'avais d'ailleurs enlevé ces deux lignes qui étaient initialement dans mon programme en vue de pouvoir dessiner le point.)

    Pour le point j'ai d'abord essayé en 2D avec vertex2i, puis vertex3i en 0 et 1, mais aucun des trois ne fonctionne. Y a-t-il d'autres paramètres que j'ai manqués ? Ou alors est-ce le z du point qui ne va pas ?

  6. #6
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Il faut dessiner toutes les formes 2D entre glDisable et glEnable GL_DEPTH_TEST.

    Et toujours utiliser glVertex2i en 2D sauf cas particulier. ^^

    Édit : Voici un code et une image pour illustrer l'exemple :
    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
    glDisable(GL_DEPTH_TEST);
        glColor3d(1,1,1);
        glBegin(GL_QUADS);
            glVertex2i(10,10);
            glVertex2i(100,10);
     
            glVertex2i(100,40);
            glVertex2i(10,40);
        glEnd();
     
        glColor3d(1,0,0);
        glBegin(GL_POINTS);
            glVertex2i(20,20);
        glEnd();
        glEnable(GL_DEPTH_TEST);


    Édit 2 : Essaye d'utiliser le code suivant dans l'initialisationd OpenGL, ça évite de s'arracher les cheveux pour commencer bien puis tu pourra enlever. Ça désactive l'invisibilité des faces qui sont à l'invers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glDisable(GL_CULL_FACE);

Discussions similaires

  1. [API HTML5] <Video> Dessiner par dessus une vidéo
    Par cjacquel dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 14/12/2013, 00h57
  2. Dessiner par dessus une image
    Par bakaneko dans le forum C++Builder
    Réponses: 9
    Dernier message: 14/07/2007, 05h25
  3. [jtable][jpanel] dessiner par dessus une jtable
    Par tuxor dans le forum Composants
    Réponses: 4
    Dernier message: 22/04/2007, 14h37
  4. Réponses: 3
    Dernier message: 31/10/2005, 16h47
  5. [Dx9] Dessiner un curseur par dessus une texture
    Par SteelBox dans le forum DirectX
    Réponses: 16
    Dernier message: 25/04/2005, 20h38

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