[OpenGL] Transparence?

Transparence? [OpenGL] - Divers - Programmation

Marsh Posté le 06-10-2003 à 23:51:54    

Dans le cadre de création d'un moteur 3D, j'essaye d'activer la transparence d'un objet à l'aide des insctructions

Code :
  1. glEnable(GL_BLEND);
  2. glBlendFunc(GL_SRC_ALPHA,GL_ONE);


 
Le probléme c'est que les faces cachés de l'objets ne sont pas dessinées ce qui est très génant lors du rendu de l'objet transparent.
J'ai pu résoudre ce probléme en désactivant le test du z-buffer le temps du rendu de l'objet grace à l'instruction

Code :
  1. glDepthMask(GL_FALSE);


 
Bien sure je désactive le blending et réactive le DephMask une fois mon objet affiché.
 
Un autre probléme c'est posé, les objets qui passent derrière mon objet transparent sont rendu comme si ils étaient devant (à cause du z-buffer désactivé pour cet objet).
Ca a pu être détourné en dessinant mon objet transparant en tout dernier par contre le probléme persiste lorsque qu'un objet transparant passe par derrière un autre objet trasnparant (on ne sait pas lequel est devant et lequel est derrière?)
Y'a t'il une manière de détourner celà d'une manière ou d'une autre par exemple grace à la procédure glDepthFunc() ou à l'aide d'instructions diverses?
Merci de votre aide

Reply

Marsh Posté le 06-10-2003 à 23:51:54   

Reply

Marsh Posté le 06-10-2003 à 23:59:55    

y'a pas 250 fonctions miracles malheureusements :
 
1)rendre les objets transparent en fin de process  
2)si plusieurs objets transparent, alors les rendres en back to front (un petit tri ici)
 
et si tes objets transparent se superposent ? ben la fo triller par ...face. A l'ancienne;
Note que y'a un truc qui s'appelle "depth peeling" cense eviter ce pb, mais je ne peux guere t'en dire plus (recherche google et tout ca)


Message édité par chrisbk le 07-10-2003 à 00:01:04
Reply

Marsh Posté le 07-10-2003 à 00:31:12    

J'ai trouvé une petite explication assé peu précise à cette adresse http://www.cse.msu.edu/~cse472/lab13.html et ça rejoind asser bien ce dont tu parlais (triage back to front des objets manuelement)
Si quelqu'un a une autre idée ou une algorithme basé sur cette technique qu'il les partages
Merci

Reply

Marsh Posté le 07-10-2003 à 00:41:17    

Reply

Marsh Posté le 07-10-2003 à 08:50:51    

Merci beaucoup pour ce lien, y'a plein de tutos utile je ne connaissais pas

Reply

Marsh Posté le 07-10-2003 à 09:04:13    

stun lien pour l'elite :sol:

Reply

Marsh Posté le 07-10-2003 à 13:05:06    

J'ai pu résoudre le probléme d'affichage de mes texture contenant une zone transparante grace à l'activation des instruction:

Code :
  1. glEnable(GL_ALPHA_TEST);
  2. glAlphaFunc(GL_GREATER, 0.0);


qui vont mettre à jour dans le z-buffer uniquement les pixels avec une valeur Alpha suppérieure à 0, par contre le probléme demeure toujours pour les objets totalement translucides

Reply

Marsh Posté le 08-10-2003 à 03:55:47    

Jer a écrit :


qui vont mettre à jour dans le z-buffer uniquement les pixels avec une valeur Alpha suppérieure à 0, par contre le probléme demeure toujours pour les objets totalement translucides


 
bienvenu dans le monde de la 3D.
 
Il n'y a pas de solutions miracle que de l'huile de coude
 
LeGreg

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed