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 de transparence avec OpenGL


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut Problème de transparence avec OpenGL
    Bonjour,

    C'est pour vous prévenir que OpenGL gére trés mal le alpha ! sinon
    pour ce qui concerne les textures , rien à signaler.
    Idéal pour voir un labyrinthe en 3D avec texture.

    Mais si vous comptez developper un jeux en 3d contenant des vertex avec des textures transparents variante ; ce n'est pas la peine .

    La mauvaise gestion des transparence est du à un mauvais algorithme mais non à un bug.

    Je vous joint deux images ,

    A l'endroit ou l'on voit un cadre noir , eh bien normalement il devrait avoir la texture du précédent en plus avec des cercles rouge bleu en plus ;
    Ce que vous voyez c'est que OpenGL n'a pas tracer le vertex qui est aprés le vertex transparent.

    Je m'explique je trace le vertex traditionnel et aprés je trace un vertex transparent contenant les cercles , BIEN ENTENDU je le trace aprés et non avant.
    Pour info : la texture contenant les cercles sont au format PNG.
    L'image est à l'envers , mais on s'en fiche.


    Sinon c'est trés rapide et les buffers de textures à l'air d'être ok à condition de bien gérer les textures.
    C'est plus simple d'utiliser OpenGL que DirectX ou Direct3D.
    Tester avec OpenGL Mesa et le natif , pareille ;

    Voilà ;

    pour info j'utilise bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    Images attachées Images attachées     

  2. #2
    screetch
    Invité(e)
    Par défaut
    sans plus d'info je parie quand même plus sur un bug dans ton code que sur un problème dans une bibliothèque utilisée par des milliers de programmes...

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 907
    Points : 220 164
    Points
    220 164
    Billets dans le blog
    126
    Par défaut
    Bonjour,

    Dire qu'un algorithme d'OpenGL est faux, c'est un peu énorme vous ne trouvez pas ?
    Alors, je me demande où êtes vous aller chercher quel était l'algorithme utilisé. Enfin, même en disant que vous avez trouvé l'algorithme, si vous pensez que vous en avez un meilleur, pourquoi ne pas le soumettre à nous, puis à tous ?

    Bref, revenons un peu sur Terre. Je dois dire que je n'ai pas très bien compris votre problème de transparence. En regardant les images, je suis à peu près sur que c'est une histoire d'ordre d'affichage. Pour qu'une transparence fonctionne, il faut faire un tri des polygones selon leurs profondeur.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut
    J'affiche d'abord le vertex normale (que lui constitue le labyrinthe)puis après le vertex transparent , et ca ne marche pas et je ne comprend pas.

    Pour détailler quand j'affiche le vertex transparent , eh bien le vertex derriére (que lui constitue le labyrinthe) n'est pas afficher.
    J'ai beau essayer de désactiver le DEPTH_TEST et le DEPTH sur le vertex transparent , rien n'y fait ;

    Hier j'ai passer mon après midi à bidouiller OpenGL.

    Ce soir je vais essayer d'afficher d'abord le vertex transparent puis le vertex normal (que lui constitue le labyrinthe).

  5. #5
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

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

    pourrais-tu nous fournir un peu de code? On ne va pas ressortir la boule de crystal de Littlewhite tous les 3 posts...)

    Sinon, comme lui et screetch, je doute très fortement que ca soit un bug intrinsèque à OpenGL...

  6. #6
    Membre actif Avatar de NevilClavain
    Homme Profil pro
    Ingé logiciel
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingé logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 214
    Points
    214
    Par défaut
    Il serait plus pertinent de publier un extrait de la partie de votre code posant problème, sans ça personne ne parviendra à vous aider

  7. #7
    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
    J'aimerais aussi savoir si tu as implémenté la même chose en Direct 3D et si tu rencontres le même problème (ou pas, à te lire)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut
    Je ne peux pas joindre le code , il est gros et n'est pas freeware.

    Cependant j'ai resolu le probléme au 2 tiers en employant glAlphaFunc(GL_GREATED,0.01) voir image13.jpg.

    Etrange ce probléme à l'air de se produire sur un endroit données (image13.jpg) de mon labyrinthe,tandis
    dans les autres endroits de mon labyrinthe je n'ai pas rencontrer ce probléme.

    bref, glAlphaFunc est la solution de secour et de contournement.
    Images attachées Images attachées    

  9. #9
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Non ce n'est pas la solution à ton problème (elle ne fait que le cacher).

    Ton problème c'est que tu n'affiches pas tes objets transparents dans le bon ordre. Il faut trier, les objets lointains d'abord, les objets proches en dernier (pour les objets opaques il vaut mieux faire l'inverse les tracer de l'avant vers l'arrière pour des raisons de ZBuffer et performance).

  10. #10
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    mdr mais c'est quoi ce post, une review OpenGL complètement bidon ><

    "Mais si vous comptez developper un jeux en 3d contenant des vertex avec des textures transparents variante ; ce n'est pas la peine ." au moins t'es un garçon plein d'humour c'est déjà ça

    OpenGL et DirectX ont exactement le même comportement et il n'y a rien de faux, il y a un algo, pas parfait et bourré d'approx (si tu en trouve un parfait capable de gérer toutes les propriétés du monde réel [j'espère que tu t'y connais en particules élémentaires] en temps réel appel moi !!!). C'est à toi de te plier à ses exigences et pas l'inverse. Dire qu'il est faux parce qu'il ne fait pas ce que tu veux est erroné, il serait plus correcte de dire que tu ne sais pas comment lui faire faire ce que tu veux, dans ce cas dit ce que tu veux faire, ce que tu as essayé, donne un minimum de code pour mieux comprendre ton problème et là on pourras t'aider. C'est quand même culotter d'accuser l'API Graphique et de lui faire mauvaise presse dès que l'on rencontre un problème de base ><

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    mdr mais c'est quoi ce post, une review OpenGL complètement bidon ><

    "Mais si vous comptez developper un jeux en 3d contenant des vertex avec des textures transparents variante ; ce n'est pas la peine ." au moins t'es un garçon plein d'humour c'est déjà ça

    OpenGL et DirectX ont exactement le même comportement et il n'y a rien de faux, il y a un algo, pas parfait et bourré d'approx (si tu en trouve un parfait capable de gérer toutes les propriétés du monde réel [j'espère que tu t'y connais en particules élémentaires] en temps réel appel moi !!!). C'est à toi de te plier à ses exigences et pas l'inverse. Dire qu'il est faux parce qu'il ne fait pas ce que tu veux est erroné, il serait plus correcte de dire que tu ne sais pas comment lui faire faire ce que tu veux, dans ce cas dit ce que tu veux faire, ce que tu as essayé, donne un minimum de code pour mieux comprendre ton problème et là on pourras t'aider. C'est quand même culotter d'accuser l'API Graphique et de lui faire mauvaise presse dès que l'on rencontre un problème de base ><
    Un review opengl complétement bidon mais je suis tout seul à developper ce jeux cependant ce labyrinthe inclut des chemins à 45° (ce qui est rare et j'en aie bavé pour générer ce genre de labyrinthe),
    j'ai toujours ce probléme de transparence mais à certains endroit de mon labyrinthe.
    Les vertex je ne peux pas les tracer
    dans l'ordre du loin au plus prés , car ils sont stocker en bloc dans un fichier data , et je l'ai dessine par glCallList , bien sure ils sont déjà compiler.

    voilà ;

  12. #12
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Oui donc ton programme est mal conçu.
    Entre le chargement des données et l'appel à la display list il faut forcément que tu fasse quelque chose.
    Commence par la fragmenter ta display list au lieu de tout charger d'un seul bloc après tu pourras trier.

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 907
    Points : 220 164
    Points
    220 164
    Billets dans le blog
    126
    Par défaut
    Sachant que les listes d'appels (call list) sont maintenant obsolètes, je vous conseille de vous orienter vers le tri des objets selon la distance avec la caméra puis d'utiliser les VBO. Ainsi, vous aurez un programme future proof et vous aurez réglé votre problème.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut
    Oui,

    Je suis passer faire un tour sur gooooogle

    mais question :
    les VBO sont t'il compatible avec glBindTexture et glNewTexture ???
    je peux travailler sur plusieurs handle VBO par texture plaquer dans les primitives, mais je ne compte pas travailler sur texcoord sur une texture unique (trop complexes).

    Je m'explique "plusieurs handle VBO par texture" : un VBO qui contient par exemple 16 primitives avec la même textures.

    Peux t'on utiliser glrotate3f,gltranslatef sur les VBO ? (glDrawElements)

    Merci

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 907
    Points : 220 164
    Points
    220 164
    Billets dans le blog
    126
    Par défaut
    Oui, on peut faire tout ce que vous demandez. Les VBO, c'est juste une autre méthode d'affichage.
    Il faudra penser à passer aux shaders aussi

  16. #16
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 584
    Points : 1 558
    Points
    1 558
    Par défaut
    ce labyrinthe inclut des chemins à 45° (ce qui est rare et j'en aie bavé pour générer ce genre de labyrinthe)
    Essayer de relativiser et de vous remettre en question. Des jeux incluant des faces à des angles autre que 90° sont quand même "assez nombreux".
    Je suis tout à fait d'accord qu'OpenGL est assez déroutant au début, mais ce n'est pas pour autant de sa faute si vous n'y arrivez pas.

Discussions similaires

  1. Problème de normales avec OpenGL
    Par ndech dans le forum OpenGL
    Réponses: 13
    Dernier message: 28/04/2010, 11h53
  2. [ImageMagick] Transparence avec imagecopyresampled()
    Par kryogen dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/11/2007, 19h46
  3. Problème de Transparence avec SGE
    Par Clément76 dans le forum SDL
    Réponses: 1
    Dernier message: 28/07/2006, 16h16
  4. Problème de profondeur avec OpenGL et GLUT
    Par brotelle dans le forum GLUT
    Réponses: 3
    Dernier message: 12/03/2006, 14h47
  5. Réponses: 13
    Dernier message: 01/12/2005, 05h34

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