openGL : sorting polygon

openGL : sorting polygon - C++ - Programmation

Marsh Posté le 20-10-2004 à 15:01:35    

bonjour,
 
Dans un post sur le blending, on me dit que pour gérer le blending un peu compliqué ( on voit a travers plusieurs objets, ceux ci se passent devant ou derriere...)il faut trier afficher les poly opaques puis les transparent back to front.  
Afficher les opaques avant ( dans le code )ca va, mais comment trier les polygon transparent ?  :heink:  
Ainsi Je voulais connaitre les différentes manières de trier les polygons autre que le BSP qui me semble inutil car ma scene ne comporte pas des multitudes de polygons (ce n'est pas une scene ou l'on se ballade a perpete)
Est ce encore et toujours uniquement une histoire de Z-buffer   :kaola:  
 
 

Reply

Marsh Posté le 20-10-2004 à 15:01:35   

Reply

Marsh Posté le 20-10-2004 à 15:24:37    

essay aussi glAlphaFunc( GL_GREATER, 0.5 ); pour eviter les problemes de superposition
 
Passes if the incoming alpha value is greater than the reference value.

Reply

Marsh Posté le 20-10-2004 à 15:31:51    

ca ne semble pas fonctionne
Je precise que tout se passe bien SAUF que certaines faces des cubes transparents ne sont pas tout le temps transparentes. En effet quand on voit a travers 2 faces opposées du cube mais 2 faces connexes ne sont pas transparentes ( si c clair...)
ceci du au fait que dans le code on est bien obligé de creer une face avant une autre...et selon notre position et l'ordre de creation certaines sont transparentes ( entres elles) et pas d'autres...
 
Donc je crois qu'il faut faire du tri.
mais comment, that is my question

Reply

Marsh Posté le 20-10-2004 à 15:59:39    

oui je comprends ton probleme, moi ca me parais lour d'avoir a trier un tableau de polygone, à chaque rendu finalement ?
 
ce probleme n'est sans doute pas benin, gta vc est plein de ce genre de defaut de transparence (surtout avec les arbres, ou des fois on voit pas les bonhommes derrieres une grille)

Reply

Marsh Posté le 20-10-2004 à 19:55:32    

methos69006 a écrit :


Afficher les opaques avant ( dans le code )ca va, mais comment trier les polygon transparent ?  :heink:  
Ainsi Je voulais connaitre les différentes manières de trier les polygons autre que le BSP qui me semble inutil car ma scene ne comporte pas des multitudes de polygons (ce n'est pas une scene ou l'on se ballade a perpete)
Est ce encore et toujours uniquement une histoire de Z-buffer   :kaola:


 
Tu n'es pas obligé de trier par polygone. Essaie d'abord un tri par objet et si le résultat ne te plait pas il faudra passer à autre chose ou changer ton contenu.
 
Beaucoup de jeux se contentent d'avoir des artefacts (GTA), ou d'éliminer le problème en limitant la transparence à quelques objets.
 
Ce qu'on voit habituellement:  
- nombre de surfaces transparentes très limitées, par exemple à de l'eau ou quelques vitres. Par ailleurs certains de ces cas, gèrent la transparence en faisant un rendu dans une texture préalable du background et en utilisant cette texture pour texturer l'objet transparent (ça nécessite de trier uniquement par rapport à l'objet transparent).
- effets spéciaux indépendants de l'ordre de rendu. Ça peut être un systeme de particules de fumées quasi monochrome (dans ce cas c'est l'accumulation qui compte, les artefacts liés à l'ordre de tracé sont réduits). Ou encore un systeme de particules de feu tracés en additif (je crois que c'est BLEND_ONE, BLEND_ONE en OGL meme si ça fait longtemps que j'en ai plus fait). Dans ce dernier cas l'ordre n'a aucune importance et tu peux meme utiliser le canal alpha pour varier l'intensité. Le problème par contre c'est que ça sature assez rapidement et que l'effet n'est pas toujours aussi réaliste que l'on voudrait. Beaucoup de jeux font ça pour les effets de sorts/armes etc...
 
Le problème du tri en général n'est pas soluble facilement.
J'indiquais le papier de "sort independent transparency" dans l'autre topic. C'est l'une des seules solutions "complete" que je connaisse. Subdiviser les polygones (avec ton BSP), en est une autre. N'utilise cela qu'en dernier recours !

Reply

Marsh Posté le 20-10-2004 à 19:57:51    

Une derniere chose:
trier les sprites d'un systeme de particule est generalement plus simple (ce sont des plans qui ne s'entrecoupent pas) et peut se faire en sauvant l'état d'une frame à l'autre.

Reply

Marsh Posté le 23-10-2004 à 14:59:32    

Comme LeGreg, je préconnise un tri à l'objet ou au batch (si tu as un BV à ce niveau) et tu rends en back to front.
Tu peux également essayer un rendu en 2 passes, alternative interessante au depth peeling :
 
- Alpha blend on
- Blend func comme tu veux
- Color Write off
- Z test on
- Z Write On
- Draw Batch
- Color Write On
- Z Write off
- Z Test On sur Z =
- Draw Batch.
 
Avec ça, tu obtiens un rendu "en coque" qui marche bien sur les objets concave. Fait bien attention à rendre en back to front car ton objet étant écrit dans le Z buffer, si tu rends après coup un objet qui est derrière, il disparaitra complètement.

Reply

Marsh Posté le 01-11-2004 à 16:21:37    

sinon pour un tri sur le CPU je te conseil ces deux articles :  
http://www.alrj.org/docs/3D/TriFaces.txt
http://www.codefr.org/tiki-index.p [...] rtion+Sort  


---------------
http://www.janaga.com
Reply

Sujets relatifs:

Leave a Replay

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