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 transparente sans trier les polygones ?


Sujet :

OpenGL

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Points : 60
    Points
    60
    Par défaut texture transparente sans trier les polygones ?
    Bonjour,
    oui c'est encore moi :p
    je voudrais juste savoir si il y a pas un moyen simple d'afficher une texture transparente parce que je veut afficher les cils d'un personnages, le problème c'est que sans transparence c'est moche et avec glBlend ça fait bugger le zbuffer et ça donne ça :
    Nom : cils_bug.png
Affichages : 207
Taille : 1,94 Mo
    je sais qu'il faut trier les polygones transparents et tout mais y'a pas plus simple ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Pièce jointe invalide.

    Plusieurs solutions :
    1 - Tu tris.
    2 - Tu tris pas + alpha blending classique, artefacts possibles (qui peuvent être acceptables dans certains cas).
    3 - Tu tris pas + Order Independant Transparency (par exemple ça), peu d'artefacts.
    4 - Tu divises ton mesh en 2 parties : la partie semi-transparente et le reste, solution 1 ou 2 (ou 3 éventuellement) pour la partie transparente -> moins de trucs à trier, et la partie opaque est dessinée avant même si tu trie pas.

    Pour ton cas, je pense que diviser ton mesh et trier les quelques triangles de tes cils est la meilleure solution.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Points : 60
    Points
    60
    Par défaut
    merci pour ta réponse,
    j'ai corrigé la pièce jointe et j'avais essayé de placer les cils a la fin de l'obj mais au final ça donnait un tas de triangle randoms (logique après réflexion) du coup je peut faire comment pour diviser le mesh facilement ? pour le OIT il faut quand même séparer transparents/pas transparents non ?
    EDIT : sinon javais une idée d'algo : on fait un rendu de tout ce qui est opaque puis on fait un rendu de tout ce qui est transparent en se servant d'une image a 4 composantes pour le z buffer : si 4 objets transparents se croisent, y'en auras 1 par "sous-pixel". si il y en a 5, le plus loin ne seras pas affiché. après on fait un test par rapport au z buffer normal et on vire tous les "sous-pixels" du gros z buffer qui sont derrière ceux du normal
    envisageable ?
    EDIT 2 : je viens de me rendre compte que ma phrase avait aucun sens :p corrigé*

  4. #4
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Bonjour, afin de se faire une idée de différents algos:
    Sur le site developer d'Nvidia: https://developer.nvidia.com/content...ency-rendering
    Et pour Opengl 4.x, un tres bon pdf qui permet de connaitre les différents algos possible pour la transparence : http://on-demand.gputechconf.com/gtc...ncy-opengl.pdf
    Apres ca reste assez dépendant du matériel il me semble (il faut des GPU assez récent, et en général AMD suit Nvidia, mais pas toujours rapidement...).

    Voila, "My 2 cents" comme on dit, si cela ne correspond pas a tes attentes, merci de me le dire, j'éviterai de poster des âneries par la suite

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup enfaite si j'ai bien compris mon idée d'algo c'est en gros la même chose que l'OIT de NVIDIA mais j'aimerais bien le faire moi même déjà parce que je suis pas fan des algos tout faits et puis surtout j'aimerais bien un programme cross plateform. Comment je pourrais faire pour utiliser un z buffer custom ?

  6. #6
    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 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    FBO?

    Tu bind une texture niveau de gris a ta composante Depth et tu joues avec ^^
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Points : 60
    Points
    60
    Par défaut
    oui c'est a ça que je pensait mais ça implique de faire plusieures copies par secondes et c'est pas top pour les perfs mais bon si j'ai pas le choix...

  8. #8
    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 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Pourquoi des copies?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Points : 60
    Points
    60
    Par défaut
    on fait un rendu des objets opaques - > sauvegarde du z buffer puis on le clear
    on fait un rendu des objets transparents et pour chaque objet on fait une copie de chaque pixel du z buffer dans la bonne "case" du gros z buffer a plusieurs épaisseurs puis on clear le z buffer
    on vire les pixels du gros buffer qui sont derrière ceux de la première sauvegarde

    EDIT : ooops je suis stupide j'avais oublié qu'il y avait déjà un depth buffer dans un fbo je sais pas pourquoi mais dans ma tête c'était juste une sorte d'image dans laquelle on fait le rendu

  10. #10
    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
    C'est d'autant plus dommage que sur ton screenshot on a l'impression que ton cil n'a besoin que de l'alpha test (pas besoin de trier avec alpha test).

    Sinon comme dit plus haut, déjà si tu traces tes objets opaques avant tes objets semi-transparents (je ne sais pas si on peut appeler ça un tri quand il n'y a que deux buckets ^_^ ) ça devrait te débarrasser de la forme la plus évidente des problèmes du screenshot. Ensuite quand tu affiches les trucs semi transparents tu désactives l'écriture de profondeur (sachant que le zbuffer standard ne stocke qu'une seule info de profondeur par pixel/fragment).

    Après plein d'autres techniques plus ou moins pratiques pour gérer les collisions entre objets semi transparents (trier au niveau du polygone n'est pas forcément viable et parfois intractable, trier les objets l'est un peu plus, il y a des formes de blending qui ne nécessitent pas de tri comme le blending additif). Et d'autres méthodes qui évitent le problème (order independant transparency, alpha to coverage, etc).

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Points : 60
    Points
    60
    Par défaut
    j'ai essayé l'alpha test et ça changeait absolument rien
    je sais que je pourrais faire plus simple mais je veut faire un moteur 3D donc autant partir avec quelque chose qui marche sans glitchs graphiques

Discussions similaires

  1. [2.x] trier les entités sans utiliser de colonne
    Par romuluslepunk dans le forum Symfony
    Réponses: 2
    Dernier message: 20/01/2015, 20h27
  2. Réponses: 4
    Dernier message: 09/05/2013, 00h14
  3. Comment trier les polygones en back to front
    Par Tonyryu dans le forum OpenGL
    Réponses: 27
    Dernier message: 28/10/2008, 09h33
  4. Récuperer les polygones pour les trier.
    Par LapinGarou dans le forum OpenGL
    Réponses: 7
    Dernier message: 31/01/2007, 13h35
  5. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07

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