Pb particules

Résolu
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 23 oct. 2004 à 23:16
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 26 oct. 2004 à 19:22
salut, je suis en train de faire un moteur de particules; il est fini, mais seulement ,quand plusieurs particules se superposent ca fait un effet super bizarre, on voit le bord des carrés , qui sonttransparents, alors que l'intérieur est normal. c'est un peu dur a expliquer, j'autais bien mis un screenshot, mais multimania il refuse qu'on accede directement a un de ses fichiers :( grr...

il va de soi que je n'ai pas oublié les commandes
glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA,GL_ONE);
(cf source de CaptainPartGl), mais on peut pas dire que ça fasse grand chose (bon ca c'est pas tres juste, quand on le met pas on voit tous les carrés pas transparents du tout...)

Que diable faire?
voili voilou, merci, bonne soirée, et TRES bonnes vacances a ceux qui ont pas cours le samedi :)

++
Ad

4 réponses

zoom1984 Messages postés 17 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 26 février 2005
26 oct. 2004 à 18:35
Un moyen plus simple de faire, à mon avis :

Ne désactive pas le zbuffer mais trie tes particules en fonction de la distance au plan de la caméra ( de la plus lointaine à la plus proche ).

distance au plan de la caméra :

vec3 v0,v1;
float distance

v0 = camera.normale;
v1 = particule.position - camera.position;
distance = Produit_scalaire(v0,v1);

Pour un bon algorithme de tri, voir :
http://www.codercorner.com/RadixSortRevisited.htm

De manière générale, il ne vaut mieux pas relire le zbuffer ou le framebuffer, parce que ca peut être excessivement lent.
3
zoom1984 Messages postés 17 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 26 février 2005
26 oct. 2004 à 05:00
Yo

Un classique.

Le problème c que tes particules écrivent dans le zbuffer même lorsque tu affiches un texel avec un alpha à 0 (complètement transparent). Donc les particules qui doivent s'afficher derrière seront clippées par le zbuffer. D'où l'effet bizarre.

Il faut que tu désactives l'écriture dans le zbuffer.

Je connais pas la fonction en OpenGL, mais si tu ne la trouves pas tout seul, un intégriste d'OpenGL va sûrement te renseigner.

a+
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
26 oct. 2004 à 11:35
c'est
glDisable(GL_DEPTH);
je l'ai mise, et ca marchje...qd ya pas de fond derriere, pasque quand l'écran est noir ca marche impec, sinon les particules s'affichesmeme qd elles sont derriere un mur.
je pense que la meileur solution serait de tout afficher d'abord, puis de tester pour chaque particule si il faut l'afficher. Je sais comment obtenir la valeur du z-buffer en un point 2D, mais ma particule est en 3D, donc il me faudrait les coords de la particule en 2D et ca je sé pas faire

merci qd meme
Ad
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
26 oct. 2004 à 19:22
trop cool...on est heureux...encore 200 lignes de plus... ouééé...

ouin
un truc simple en openGL ca existe pas?

bon merci qd meme
0
Rejoignez-nous