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 :

Ajouter de la transparence


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut Ajouter de la transparence
    Bonjour,

    j'ai développé une application qui permet d'afficher un nuage de points en utilisant OpenGL et VS2008.
    Dans la plupart des cas il y a des nuages qui sont totalement ou partiellement confondus donc le nuage affiché en premier sera caché derrière le second.
    Pour résoudre ce problème j'ai pensé à ajouter la transparence à ma scène avec le Blending:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    Mais je me trouve un peu bloqué là dessus.

    j'utilise les vertexArrays pour afficher les nuages, et lorsque j'ai ajouté le blending rien ne change ,
    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
     
    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_VERTEX_ARRAY);
     
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
     
    glColorPointer(4, GL_UNSIGNED_BYTE, 0, colors);
    glVertexPointer(3, GL_FLOAT, 0, vertex);
     
    glDrawArrays(GL_LINES, 0, shared_counter);
     
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
    glDisable(GL_BLEND);
    Comment dois je faire pour résoudre le problème???

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    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 : 618
    Par défaut
    Salut,

    La transparence est toujours un sujet assez délicat en OpenGL...

    Déjà, est-ce que tes couleurs ont bien une valeur alpha < 1 ?

    Ensuite, pour ne pas avoir d'artefact, il faudra que tu dessine tes points du plus éloigné au plus proche de la caméra. Donc, que tu trie à la main, à chaque frame, ton tableau de vertex. Ce qui risque d'être un peu couteux si tu a beaucoup de points.

    Il y existe d'autre techniques plus évoluer pour gérer la transparence (depth peeling et autre), mais tu n'en es pas encore là

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Citation Envoyé par pyros Voir le message
    est-ce que tes couleurs ont bien une valeur alpha < 1 ?
    oui, les couleurs varient entre 0 et 1, et pour le alpha il est égale à 0.5.
    Citation Envoyé par pyros Voir le message
    Donc, que tu trie à la main, à chaque frame, ton tableau de vertex. Ce qui risque d'être un peu couteux si tu a beaucoup de points.
    c'est très coûteux pour mes nuages car il sont très grands
    Citation Envoyé par pyros Voir le message
    Il y existe d'autre techniques plus évoluer pour gérer la transparence (depth peeling et autre), mais tu n'en es pas encore là
    donc je laisse le GL_BLEND à côté?? pas de solution avec???

    Merci d'avance

  4. #4
    Membre Expert

    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
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    c'est très coûteux pour mes nuages car il sont très grands
    rien à voir avec leur taille mais avec leur nombre.

    Si tu fais de l'alpha blending classique pas d'autre solution que de trier.
    En attendant tu n'es pas forcément obligé de trier à chaque frame (toutes les N frames ou tri partiel), ou tu peux placer tes nuages dans une structure d'accélération pour les trier plus rapidement (ou utiliser un tri normal rapide ce n'est pas forcément si lourd que ça).

    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

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    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 : 618
    Par défaut
    donc je laisse le GL_BLEND à côté?? pas de solution avec???
    Sisi, ça marchera. D'ailleur c'est censé marcher... Peux-tu envoyer un screenshot du résultat ?

  6. #6
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Bonjour,
    Merci pour vos réponses

    pour mon cas je ne peux pas trier car trier 2 000 000 points(3D) ou plus c'est vraiment de la folie
    Citation Envoyé par pyros Voir le message
    Sisi, ça marchera. D'ailleur c'est censé marcher... Peux-tu envoyer un screenshot du résultat ?

    par exemple j'ai affiché deux cylindres confondus mais je ne vois que le dernier sachant que j'ai modifié la couleur.

    Merci d'avance

Discussions similaires

  1. Ajouter de la transparence aux png
    Par Seb33300 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/10/2007, 10h11
  2. Ajouter la transparence à un composant
    Par hush dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 22/07/2006, 18h17
  3. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  4. Connaitre l'unitée à ajouter dans USES
    Par DelphiCool dans le forum Langage
    Réponses: 7
    Dernier message: 01/08/2002, 13h48
  5. Ajouter une aide
    Par Mailgifson dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/06/2002, 13h32

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