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 :

[Débutant] Ordre d'affichage, 2D


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Points : 88
    Points
    88
    Par défaut [Débutant] Ordre d'affichage, 2D
    Bonjour,

    J'utilise OpenGL pour faire de l'affichage en 2D. J'ai remarqué que si j'affichais des quads, disons A, B et C, dans cet ordre, alors A apparaissait devant B qui lui même sera devant C (comme si ça passait par un tampon FILO avant l'affichage). Juisque là pas de problèmes.

    Maintenant il s'avère que je voudrais appliquer un effet visuel lorsque A et B sont à l'écran, puis dessiner C sans qu'il subisse l'effet. Actuellement ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Afficher A,
    Afficher B,
    glReadPixels(),
    appliquer l'effet
    afficher un quad plein écran avec le résultat de l'effet,
    afficher C
    Le problème est que C se trouve derrière le quad plein écran. Alors pour l'exemple je pourrais inverser les deux dernières instructions ; mais dans la vrai vie, où il peut y avoir des effets un peu n'importe quand et qu'il y a plus de 3 quads affichés, c'est plus difficile.

    Ainsi je vous demande, existe-t-il un moyen d'imposer de mettre C devant le quad de l'effet, sans avoir recours à la troisième dimension ? (demander un comportement FIFO par exemple)

    Merci.

  2. #2
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Salut,

    Est-ce que un avant de dessiner le quad C (puis un re-enable après) ne résoud pas le problème ? Il me semble que si tu désactive le Z-testing, les polygones sont dessinés dans l'ordre ou tu "appelles" leur affichage (à vérifier).

    J'ai remarqué que si j'affichais des quads, disons A, B et C, dans cet ordre, alors A apparaissait devant B qui lui même sera devant C (comme si ça passait par un tampon FILO avant l'affichage).
    Par contre je ne sais pas du tout comment ça se passe quand le test est activé, s'il y a une règle pour déterminer qui sera devant et qui sera derrière...
    And still we will be here, standing like statues ...

  3. #3
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    la methode pour determiner lequel est affiché devant avec le depth test activé est toute simple : c'est le pixel le plus proche de la camera qui est affiché... et en 2D comme tout les pixel ont la même profondeur, il faut se referer a la depth func pour determiner comment ca marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glDepthFunc(GL_LESS);
    seul les pixel ayant un z STRICTEMENT inferieur au z precedent sont affiché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glDepthFunc(GL_LEQUALS);
    seul les pixel ayant un z inferieur ou egal au precedent seront affiché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glDepthFunc(GL_EQUALS);
    seul les pixel ayant un z strictement egal au z precedent seront affiché...
    et ainsi de suite avec GL_GEQUALS et GL_GREATER...
    * 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

  4. #4
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    ah ouai ! suis-je bête .....
    merci pour ce rappel !

    donc YéTeeh tu devrais trouver ton bonheur avec tout ça
    And still we will be here, standing like statues ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Points : 88
    Points
    88
    Par défaut
    Vous êtes des anges...

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant] Probleme d'affichage
    Par mavina dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 01/12/2005, 18h36
  2. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  3. [Débutant(e)][Stratégie] Affichage d'une aide
    Par clairette dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 07/07/2005, 16h05
  4. Réponses: 5
    Dernier message: 08/03/2005, 13h22
  5. [débutant] Ordre des champs de saisie par la touche tab
    Par almisuifre dans le forum C++Builder
    Réponses: 10
    Dernier message: 03/03/2005, 19h45

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