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 :

ptit soucis de blending


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut ptit soucis de blending
    Bonjour à tous

    j'ai un petit probleme avec la transparence d'un objet ... je m'explique :
    cet objet represente un carré rouge qui doit etre translucide afin de laisser apparaitre les objets opaques qu'il recouvre ...
    un petit dessin valant mieux qu'un long discours voici ce que ca donne :
    http://img45.echo.cx/my.php?image=blending5la.png

    le soucis, c'est que ce "nivo zero" comme je l'appelle doit etre rouge et m'est affiché en blanc (sauf sur les objets opaques) :s

    voici un peu de code :

    creation de mon nivo_zero :
    nivo_zero = new Plancher(new Vecteur(1, PosNivoZero, -1), 1.2f );
    nivo_zero.AppMateriau = new Materiau();
    nivo_zero.AppMateriau.Ambiance = utilitaires.Drawsplus.HLS_Transform(
    Color.FromArgb(125, 255, 0, 0 ),
    -10,-40 );
    nivo_zero.AppMateriau.Apply();
    HLS c'est pour la Hue-Lightness-Saturation de la couleur
    le fait de modifier l'alpha (ici 125) ne change rien du tout ...

    enfin le dessin a proprement parler des objets :


    foreach (GraphObject grobj in this.Objects)
    grobj.Paint();

    GL.glDepthMask(0);

    GL.glEnable(GL.GL_BLEND);
    GL.glBlendFunc(GL.GL_ONE, GL.GL_ONE);

    foreach (GraphObject grnivo in this.NivoZero)
    grnivo.Paint();

    GL.glDisable(GL.GL_BLEND);

    GL.glDepthMask(1);
    mes grobj sont mes deux courbes, le reste du monde est dessiné avant ou apres ce morceau de code, ca dépend

    en vous remerciant par avance de l'attention que vous me porterez, je vous prie, Madame, Monsieur, de bien ... euh qu'est ce que je dis moi ??
    merci de m'eclairer

  2. #2
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut Re: ptit soucis de blending
    Citation Envoyé par Deus Ex Makina
    GL.glBlendFunc(GL.GL_ONE, GL.GL_ONE);
    ton problème vient de là, GL_ONE est équivalent au maximum, c'est une valeur fixe, du coup tu as du blanc
    alors qu'en fait la transparence doit être calculée pixel par pixel en fonction du pixel situé sous la surface transparente
    tu dois donc utiliser des paramètres de blending du style :
    GL.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    encore un détail, penses à dessiner ta surface transparente APRES les surfaces qui sont derrière
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    humm en changeant avec tes parametres pour glBlendFunc, ma surface n'apparait plus du tout
    en revanche :
    http://img26.echo.cx/my.php?image=blendingbis7ki.png

    avec ce code
    GL.glEnable( GL.GL_LIGHTING );
    foreach (GraphLight grlight in this.Lights)
    grlight.Paint();

    // Dessin des Font
    foreach (GraphText grfont in this.Fonts)
    grfont.Paint();

    foreach (GraphObject grobj in this.Objects)
    grobj.Paint();


    GL.glDepthMask(0);

    GL.glEnable(GL.GL_BLEND);
    GL.glBlendFunc(GL.GL_ONE, GL.GL_SRC_ALPHA);

    foreach (GraphObject grnivo in this.NivoZero)
    grnivo.Paint();

    GL.glDisable(GL.GL_BLEND);

    GL.glDepthMask(1);
    une idee ?

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    ta fenêtre d'affichage est-elle bien en 32 bits rgba ? (et pas seulement en rgb)

    ce qui est certain c'est que c'est un problème de paramètres de la fonction glBlendFunc

    essayes différentes combinaisons et vois ce que cela change
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    pb résolu

    en fait, je passais par des matériaux pour définir les couleurs de mes objets ... j'ai fais un ch'tit test avec un glColor et vlan ... v'la t'y pas qu'ca marche !!

    du coup voici le code
    GL.glEnable(GL.GL_BLEND);
    GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
    GL.glEnable(GL.GL_COLOR_MATERIAL);

    foreach (GraphObject grnivo in this.NivoZero)
    grnivo.Paint();
    GL.glDisable(GL.GL_COLOR_MATERIAL);
    GL.glDisable(GL.GL_BLEND);
    et j'ai bien ma surface avec son effet transparent

    merci @ toi Shenron

  6. #6
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Congratulations, content que ça fonctionne
    Et bonne continuation
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

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

Discussions similaires

  1. Ptit souci sur un CListCtrl
    Par Rupella dans le forum MFC
    Réponses: 2
    Dernier message: 04/09/2006, 16h11
  2. [mfc]un ptit souci de pointeur
    Par isidore dans le forum MFC
    Réponses: 3
    Dernier message: 14/05/2006, 14h11
  3. [Conception] Ptit soucis de bdd
    Par jenny50 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 07/03/2006, 16h36
  4. [Perl] Un ptit souci avec le zip->addFile
    Par irenee dans le forum Langage
    Réponses: 1
    Dernier message: 28/12/2005, 11h44
  5. [langage] ptit souci de syntaxe
    Par marouanitos dans le forum Langage
    Réponses: 2
    Dernier message: 26/09/2003, 10h28

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