Opengl - glitches

Opengl - glitches - C++ - Programmation

Marsh Posté le 05-01-2006 à 15:59:16    

Slt,
J'ai quelques problèmes lors du rendu d'une ligne en opengl. En effet, il se dessine quelques pixels noirs entre les deux extremités de chaque trait.
Apparament, ça viendrait du fait qu'opengl ne "relie pas les deux extremités de la ligne entre eux (comme montré sur le dessin en bas au milieu)
avant de tracer la ligne je fait ceci :  

Code :
  1. glEnable( GL_POLYGON_SMOOTH );
  2.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  3.   glEnable( GL_BLEND );
  4.   glEnable(GL_LINE_SMOOTH);   
  5.   glLinewidth(5.0f);
  6. puis un simple glBegin(GL_LINES );


 
Dans le meme genre : il me trace tout les triangles intermediaire dés que l'alpha et l'aliasing sont activé :/
 
 
http://img205.imageshack.us/img205/9505/untitled11dh.jpg


Message édité par red faction le 05-01-2006 à 15:59:30
Reply

Marsh Posté le 05-01-2006 à 15:59:16   

Reply

Marsh Posté le 05-01-2006 à 17:27:21    

tu fais des lignes indépendantes ou un strip de lignes ?

Reply

Marsh Posté le 05-01-2006 à 18:56:33    

stripe[:aloy]

Reply

Marsh Posté le 05-01-2006 à 19:39:26    

Lignes independantes, faire autre chose compliquerait énormement mon rendering path  :o  
 
Pour un autre probleme sur le même prog le fait de passer de polys independants a un strip avait resolu pas mal de trucs (yavait enormement de poly a dessiner, tous tres proches les un des autres  
Jviens d'essayer avec GL_LINE_LOOP GL_LINE_STRIP mais ca donne exactement la même chose :/
 
EDIT : apres reflexion, effectivement seul un loop ou un strip pourrait resoudre mon probleme (comment opengl peut il relier deux ligne independantes ?)


Message édité par red faction le 05-01-2006 à 21:32:03
Reply

Marsh Posté le 06-01-2006 à 10:56:39    

hé oui c'est ça la blague.
 
sinon si ça marche pas en strip et que l'opengl est pas capable de d'ajuster la connectivité des lignes il reste deux solutions:
 
1) tricher avec des disques à chaque point de connection (bof bof)
 
2) abandonner les lignes et passer à des triangles ou des quads, générant les segments intermédiaires avec des courbes de bezier (je te fais un dessin)

Reply

Marsh Posté le 06-01-2006 à 11:00:50    

Donc un truc dans ce goût là quoi: a toi de voir ce qui rends le mieux aux inflexions de ta courbe....
http://img203.imageshack.us/img203/6977/lineux7xv.png


Message édité par bjone le 06-01-2006 à 11:01:20
Reply

Marsh Posté le 06-01-2006 à 11:03:17    

bjone a écrit :

hé oui c'est ça la blague.
 
sinon si ça marche pas en strip et que l'opengl est pas capable de d'ajuster la connectivité des lignes il reste deux solutions:


 
je pensait qu'il y avait une option a activer genre glEnable (something)
 

bjone a écrit :


1) tricher avec des disques à chaque point de connection (bof bof)


 
c'est ce que j'ai fait pour le moment (effectivement c tres bof)
 

bjone a écrit :


2) abandonner les lignes et passer à des triangles ou des quads, générant les segments intermédiaires avec des courbes de bezier (je te fais un dessin)


 
un simple trait qui relie les deux lignes serait deja une grande evolution
cependant pour dessiner les lignes soi-même ca reste compliqué  
(trouver la perpendiculaire a la droite....)
 
 
pour le 2e probleme tu vois pas d'ou ca pourrait venir ???

Message cité 1 fois
Message édité par red faction le 06-01-2006 à 11:06:35
Reply

Marsh Posté le 06-01-2006 à 11:08:09    

red faction a écrit :

je pensait qu'il y avait une option a activer genre glEnable (something)
 
bin ouais ce serait top, mais là pour le coup je sais pas du tout
 
c'est ce que j'ai fait pour le moment (effectivement c tres bof)
 
:/
 
un simple trait qui relie les deux lignes serait deja une grande evolution
cependant pour dessiner les lignes soi-même ca reste compliqué  
(trouver la perpendiculaire a la droite....)
 
 
pour le 2e probleme tu vois pas d'ou ca pourrait venir ???


 
pour ton deuxième problème, j'ai du mal a visualiser ce que c'est censé être ?
tu as deux triangles c'est ça ? avec du pixel popping à l'intersection des deux ?

Reply

Marsh Posté le 06-01-2006 à 11:12:13    

disons que je dessine un GL_QUADS et que (c logique) le driver me le decoupe en 2 triangles...
 
le probleme c que si j'active le blend et l'antialias, il me dessine tout les triangles intermidiaires (d'ou la ligne en gris qui fait la diagonale sur mon rectangle)

Reply

Marsh Posté le 07-01-2006 à 12:06:05    

c'est marrant ça... bug de driver :/
 
c'est quoi comme carte vidéo ?

Reply

Marsh Posté le 07-01-2006 à 12:06:05   

Reply

Marsh Posté le 07-01-2006 à 13:37:28    

C'est un comportement prévisible.
 
Lorsque le rasterizer sort des samples avec antialiasing, les fragments avec couverture partielle vont passer dans le pipeline comme les autres, avec le facteur de couverture qui sera utilisé pour la fonction de blending (ce qui donne l'effet antialiasé). Maintenant une fois que le fragment en question est ecrit dans le buffer de destination (backbuffer ou plus généralement rendertarget), le zbuffer est aussi mis a jour avec le fragment partiellement couvert. Au moment où la ligne suivante (ou segment de ligne suivant) arrive, il est évident que les fragments des bords (ceux a couverture partielle) des lignes successives se superposent. Sauf que ceux de la nouvelle ligne seront jetés à cause du test sur le zbuffer. On restera donc avec des pixels qui seront typiquement plus sombre (si le fond est sombre) à la jointure.  
 
Voir ce thread pour plus d'infos.

Reply

Marsh Posté le 07-01-2006 à 15:09:39    

3) the GL spec says linestrips are treated as groups of line segments. there's no handling of segment joining or mitering.


 
Voila au moins c'est clair
 
en tout cas merci a tout ceux qui ont repondu  :)  
 
jvais essayer de rendre moi meme la ligne par coup de GL_QUADS ca devrait aller mieux.....

Reply

Marsh Posté le 12-01-2006 à 22:41:05    

Reply

Sujets relatifs:

Leave a Replay

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