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 :

Transparence de faces éclairées par la lumière ambiante


Sujet :

OpenGL

  1. #1
    lia
    lia est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 59
    Points : 42
    Points
    42
    Par défaut Transparence de faces éclairées par la lumière ambiante
    Bonjour,

    J'ai un icosahèdre implémenté comme indiqué dans le red book (pas avec glut). Une sphère se trouve à l'intérieur. J'arrive à voir la boule par transparence des faces avant de l'icosahèdre.

    Mais j'ai un problème pour voir les faces arrières de l'icosahèdre dans certains cas. Lorsque les faces en avant sont éclairées par la lumière spéculaire ou diffuse, aucun problème: les faces arrières sont visibles. Mais lorsqu'elles sont éclairées par la lumière ambiante, je ne vois plus les faces en arrière.

    Est-ce que quelqu'un aurait une explication?

    Un grand merci d'avance pour votre aide.

    lia

  2. #2
    lia
    lia est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Finalement, j'ai réglé mon problème de transparence des faces éclairées par la lumière ambiante.

    Mais voilà mon nouveau problème: je dessine ma boule, que je veux opaque, en premier. Ensuite je dessine mon icosahèdre autour. Du coup, les faces arrières de l'icosahèdre sont visibles (ça c'est ok), même celles situées derrière la boule. Elle est aussi "transparente".

    Merci pour votre aide.

    lia

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Avez-vous bien activé le test de profondeur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glEnable(GL_DEPTH_TEST);
    (il faut aussi penser à le nettoyer à chaque cycle avec un glClear(GL_DEPTH_BUFFER_BIT); )

  4. #4
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Bonjour,

    Le z-buffer ne doit pas être utilisé pour les objets transparents.
    Plutôt, il faut faire le rendu en plusieurs étapes avec algorithme du peintre, c'est à dire dessiner les objets plus éloignés de la caméra aux plus près.

    Pour une sphère dans un icosahèdre, le rendu serait dans cet ordre:
    - les faces arrières de l'icosahèdre
    - les faces arrières de la sphère
    - les faces avants de la sphère
    - les faces avants de l'icosahèdre

    Le choix de dessiner les faces avants ou arrières se fait avec le "back/front face culling":
    glEnable(GL_CULL_FACE)
    glCullFace(GL_FRONT) ou glCullFace(GL_BACK)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Je ne vois pas le problème d'utiliser le z-buffer pour l'affichage d'objets transparent

    On peut par exemple ->
    - dessiner tous les objets non transparents avec le z-buffer activé.
    - puis dessiner les objets transparents du plus loin au plus pres (ça peut etre subtil si 2 objets sont à la fois devant et derrière l'autre..).

    C'est là qu'OpenGL 4 peut etre pratique avec les listes chainées par pixels pour trier les fragments transparents "après coup".

  6. #6
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Le problème avec l'utilisation du z-buffer lors du rendu des objets transparents, est que un objet transparent peut obstrué un autre objet, ce qui serait bizarre pour un objet transparent.
    Et le z-buffer fait un peut double emploie avec l'algorithme du peintre.

Discussions similaires

  1. Formule pixel éclairé par une lumière teinté
    Par carton99 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 23/08/2013, 15h45
  2. Lumière ambiante
    Par Thrud dans le forum DirectX
    Réponses: 2
    Dernier message: 07/01/2013, 09h29
  3. rendu des surfaces par la lumière
    Par ol9245 dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/10/2010, 12h06
  4. Réponses: 21
    Dernier message: 13/08/2010, 00h44
  5. Réponses: 5
    Dernier message: 19/03/2006, 09h39

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