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 :

Texture avec trous transparent


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 80
    Points
    80
    Par défaut Texture avec trous transparent
    Bonjour,

    Pour dessiner un sapin, j'ai besoin de croiser deux textures avec de la transparence.

    Voici mon problème :



    Le Z-buffer est affecté par le dessin de la texture du sapin, même sur la zone transparente, ce qui a pour effet, ensuite, de ne pas dessiner les objets situé plus loin qui serait visible dans la zone transparente. Dans l'ordre, j'affiche : le ciel, le sapin, les murs, le sol.

    J'aimerais que le Z-buffer ne soit pas affecté par la texture lorsque la zone est transparente.

    J'aurais pu dessiner le sapin en dernier. Mais il y auras plusieurs sapins l'un derrière l'autre, je devrait dessiner les sapins du plus éloigné au plus proche. Cela n'est pas forcément simple à mettre en œuvre. De plus, comme les textures se croisent entre elles, il y aurait encore un bug :



    Pouvez-vous m'apporter une solution ?

    Merci.

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 474
    Points
    11 474
    Billets dans le blog
    11
    Par défaut
    Il faut activer l'alpha blending avec "glEnable( GL_ALPHA_BLEND)" et lui dire l'opération et l'opérande à utiliser avec "glBlendFunc". Pour l'opération si je ne me trompe pas ce doit être GL_ONE_MINUS_SRC_ALPHA et l'opérande GL_SRC_ALPHA, à vérifier.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 80
    Points
    80
    Par défaut
    Merci.

    J'ai essayé comme tu m'as dis mais je n'ai pas réussi. Sans doute parce que je ne comprend pas tout à fait ce qu'il faut faire.

    En revanche, j'ai réussi à faire ce que je voulais en faisant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        // Dessin de la skybox
        this->skybox->dessiner();
     
        // Dessin de la skybox
        this->carte->dessiner();
     
     
        glEnable(GL_ALPHA_TEST);
        glAlphaFunc(GL_GREATER, 0.0f);
        this->sapin->dessiner();
        glDisable(GL_ALPHA_TEST);
    Je me suis aidé de ça.

    J'espère que ça pourra aider quelqu'un.

  4. #4
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 474
    Points
    11 474
    Billets dans le blog
    11
    Par défaut
    Effectivement ça marchera aussi en faisant cela, par contre, tu ne pourras pas avoir de texture semi-transparente avec cette méthode (certes dans le cas précis que tu nous as décrit, tu n'as pas besoin de semi-transparence)

  5. #5
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Bonjour,

    Vous pouvez aussi éliminer les pixels transparents avec le test alpha. Lorsque ces pixels seront eliminés, ils n'affecteront pas le z-buffer.

    Pour activer le test alpha: glEnable( ALPHA_TEST )

    Pour garder que les pixels non transparent: AlphaFunc( EQUAL, 1.0 )

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 395
    Points : 5 011
    Points
    5 011
    Par défaut
    les objets possédant une transparence doivent être dessiné en dernier et de préférence de l'arrière vers l'avant.

Discussions similaires

  1. Textures avec transparence
    Par Corpio dans le forum OpenGL
    Réponses: 8
    Dernier message: 05/05/2006, 16h56
  2. [SWT] Problème avec la transparence des PNG
    Par sirjuh dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 02/08/2004, 09h07
  3. chargement de texture avec la SDL
    Par Fry dans le forum OpenGL
    Réponses: 7
    Dernier message: 27/05/2004, 16h31
  4. Combiner plusieurs textures avec couches alpha
    Par TibobiT dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/05/2004, 16h20
  5. Probleme avec la transparence
    Par CookSlash dans le forum OpenGL
    Réponses: 12
    Dernier message: 15/01/2004, 23h35

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