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 :

Problème AlphaBlending / FaceCulling


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut Problème AlphaBlending / FaceCulling
    Bonjour,

    Voilà, encore un problème d'alpha-blending. Je veux réaliser une forêt de "cristaux" semi-transparents en 3D mais comme vous pouvez le voir (cf pièce jointe) la partie haute/droite est mal affichée, la partie du dessous est affichée avant... Voilà ce que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Init
           glCullFace(GL_BACK);
           glEnable(GL_CULL_FACE);
     
           glEnable(GL_BLEND);
           glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     
    //Draw
           glPolygonMode(GL_FRONT,GL_FILL);
           //Je dessine le bloc 1
           glPolygonMode(GL_FRONT,GL_LINE);
           //Je (re)dessine le bloc 1
    Le premier passage (en mode FILL) est bien rendu (le bas est invisible ou presque, même en mode sans transparence avec couleur distincte etc...), le second passage (en mode LINE) par contre me semble mauvais et je ne comprend pas pourquoi puisque les polygones sont dans le bon ordre pourtant...Est-ce que le culling est effectué sur ceux-ci???

    Images attachées Images attachées  

  2. #2
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Salut,

    tu aimerais que tous tes cristaux apparaissent comme ceux du bas c'est ca?

    a priori ca ressemble à un problème d'ordre de dessin: quand tu dessines les cristaux du bas, il n'y a pour eux que le fond noir en arriere plan. Quand tu dessines ceux du haut, il y a déjà la grille, dont la couleur est du coup mélangée avec celle de tes cristaux, ce qui donne ce qu'on voit sur ton image.

    Il me faudrait plus de details sur ton code de dessin mais, si le probleme vient effectivement de l'ordre, tu peux essayer d'ordonner tout ca. Si ta camera ne bouge pas c'est assez facile, dans le cas contraire un peu plus prise de tête.

    sinon tu peux peut être oublier l'ordre de dessin et utiliser le blending pour mélanger avec une couleur fixe (celle de ton arriere plan) sans te soucier des objets placés "derriere" celui qui est dessiné

  3. #3
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Justement je pensais que le culling suffirait, voici la fonction de dessin toute bête que j'utilise...

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    glBegin(GL_QUADS);
                                        //Top
                                        glVertex3i(   i,    j, h);
                                        glVertex3i( i+1,    j, h);
                                        glVertex3i( i+1,  j+1, h);
                                        glVertex3i(   i,  j+1, h);
                                        //Bottom
                                        glVertex3i(   i,    j, 0);
                                        glVertex3i( i+1,    j, 0);
                                        glVertex3i( i+1,  j+1, 0);
                                        glVertex3i(   i,  j+1, 0);
                                        //Face1
                                        glVertex3i( i+1,  j+1, 0);
                                        glVertex3i(   i,  j+1, 0);
                                        glVertex3i(   i,  j+1, h);
                                        glVertex3i( i+1,  j+1, h);
                                        //Face2
                                        glVertex3i( i+1,  j+1, h);
                                        glVertex3i( i+1,    j, h);
                                        glVertex3i( i+1,    j, 0);
                                        glVertex3i( i+1,  j+1, 0);
                                        //Face3
                                        glVertex3i(   i,    j, 0);
                                        glVertex3i( i+1,    j, 0);
                                        glVertex3i( i+1,    j, h);
                                        glVertex3i(   i,    j, h);
                                        //Face4
                                        glVertex3i(   i,    j, h);
                                        glVertex3i(   i,  j+1, h);
                                        glVertex3i(   i,  j+1, 0);
                                        glVertex3i(   i,    j, 0);
     
                                    glEnd();
    Mais je pensais que le culling suffirait...
    Ok j'ai compris l'origine du problème mais la caméra va se déplacer et je ne veux pas m'embêter à gérer l'ordre du dessin...
    Est-ce que les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glEnable (GL_ALPHA_TEST);
    glAlphaFunc (GL_GREATER, ...);
    me seraient utiles???

  4. #4
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Pour bien gérer la transparence, tu es obligé de passer par une gestion d'ordre d'affichage de tes objets du plus loin au plus proche.
    C'est assez lourd mais tu n'as pas le choix :p

    Si tu ne veux pas tenquiquiner avec ça, tu peux regarder une technique appellée Depth Peeling :
    http://developer.nvidia.com/object/I...nsparency.html
    http://research.microsoft.com/resear...spx?tr_id=1125

    Le alpha test ne peux pas te sauver

  5. #5
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Merci pour votre aide...je ne pensais pas le problème si compliqué, je vais devoir m'orienter vers un autre affichage...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Par défaut
    c'est vraiment jolie ce que tu affiche. Si tu repasse par la, peux tu me donner le code.

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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