Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Anti-aliasing

Iniciado por fgutierrez, 08 de Octubre de 2007, 01:40:14 PM

« anterior - próximo »

fgutierrez

Hola, buenas tardes. Estoy intentando suavizar mis polígonos mediante la implementación de anti-aliasing mediante las funciones de blending. Estoy haciendo las pruebas con un Quadratic Object cilíndrico, generandolo mediante la función gluCylinder(...). Antes de llamar a esta función realizo las siguientes modificaciones:

  .....

  glDisable(GL_DEPTH_TEST);
  glEnable(GL_BLEND);
  glEnable(GL_POLYGON_SMOOTH);
  glBlendFunc(GL_SRC_ALPHA_SATURATE,GL_ONE);


y después del dibujado

  glEnable(GL_DEPTH_TEST);
  glDisable(GL_BLEND);
  glDisable(GL_POLYGON_SMOOTH);


bien, despues de incluir estas lineas en mi código y ejecutar, me encuentro con la desagradable sorpresa de que no se ve nada en la ventana de dibujado. Le ha dado varias vueltas y no encuentro la razón por la que esto ocurre.Además,esta misma función de Blending es utilizada en el Red Book con un ejemplo de Antialiasing en polígonos. ¿Alguien podria decirme porque me esta ocurriendo esto?

Muchas gracias
eamos realistas: Exijamos lo imposible

Fran

Yo lo único que te puedo decir es q a mi no me ha salido, ni cn lo del redBook, ni activando los SampleBuffers ni nada. Solo con el panel de control de la tarjeta (no por el programa) me lo hace bien. De todos modos lo del POLYGON_SMOOTH lo puedes dejar puesto, creo

Tei

¿  glEnable(GL_POLYGON_SMOOTH);   ?

¿ Seria posible que las tarjetas 3D no implementasen estas funciones ?.

Quizas si no se usen en videojuegos mucho, la gente que fabrica el hardware no siente ningún ímpetu para implementarles soporte. Y elijas o no el modo SMOOTH a la tarjeta se la repamfimfle.

Esta es una pregunta de un ignorante total, por cierto. Entre 0 y 10, yo de OpenGL se -1.

r2d2rigo

Recuerdo haber leido hace un tiempo en un libro (Realtime Rendering, creo) que el mejor metodo de renderizar una escena con antialiasing es mediante el accumulation buffer, dibujando la escena 2-4-x veces con un alpha de 1/x cada una, y tambien moviendola un pixel.

Aunque no me hagais mucho caso, porque no me acuerdo ahora mismo si era el metodo para hacer antialiasing o para gaussian blur ·_.


EDIT: me acabo de encontrar esto de casualidad en GameDev: http://www.opengl.org/resources/code/samples/sig99/advanced99/notes/node121.html

fgutierrez

Cita de: "r2d2rigo"
EDIT: me acabo de encontrar esto de casualidad en GameDev: http://www.opengl.org/resources/code/samples/sig99/advanced99/notes/node121.html

Justo es esa recomendación la que estoy intentando seguir, pero no se porque razón cuando la implemento tal cual desaparece el cilindro con el que estoy haciendo las pruebas. No se si tiene algo que ver el hecho de que esté trabajando con Quadratics. Muchas gracias de todas las maneras.
eamos realistas: Exijamos lo imposible

Tei

Googleando un poco, he encontrado esto:

http://www.groupsrv.com/computers/about328263.html

Citar
         
AlexD wrote:

Citar
http://iihm.imag.fr/demeure/pmwiki/Images/BIGre/nvidia_bigre.png
The problem is that it seems OpenGL draw all lines in black
even is I just try to display polygons and not lines...I do not
know what kind of command can generate that...Could someone
help?

Let me guess: You have GL_POLYGON_SMOOTH enabled, right. This
sort of antialiasing is difficult to get right and causes a lot
of problems. My recommendation: Don't use it, use FSAA
multisampling instead.

Wolfgang Draxinger


Citar
         


Citar
could a driver update solve the pb?

No, since this is the normal behaviour. GL_POLYGON_SMOOTH
antialiasing is difficult to get right if dealing with
transparent primitives. GL_POLYGON_SMOOTH is modifiying the
alpha value of the edge pixels, so that they blend smoothly with
the fragments behind them. This blending interferes with the
alpha value of the incoming vertices: Both values get multiplied
which exposes a ()^2 falloff, causing the noticable edges.

As I already said: Don't use GL_POLYGON_SMOOTH. Use FSAA
multisampling instead. It's supported even by the oldest T'n'L
cards (2x FSAA was introduced with GeForce2) and doesn't cause a
high performance hit.

Wolfgang Draxinger


Citar
NeHe #46:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=46


Tambien he encontrado esto:
http://lists.apple.com/archives/Mac-opengl/2007/Jul/msg00144.html

Citar
Re: GL_POLYGON_SMOOTH no longer supported?
..

yes

Tiene pinta que no es un efecto en el que depositar demasiadas esperanzas. Yo lo evitaria.

Fran

Lo del multisampling FSAA es lo q he comentado esta mañana -y pensaba que lo conocías- de los Sample Buffers. Pero yo no he logrado hacerlo funcionar. Si lo logras, haznos saber como.

tamat

si usas SDL el antialiasing es tan facil como:

   SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
   SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, num_samples );

justo antes de crear el contexto de opengl.
Por un stratos menos tenso

fgutierrez

No conocia la técnica de multisamplig FSAA, asi que le echaré un vistazo y lo intentaré de esta forma. De todas formas es realmente curioso lo del POLYGON_SMOOTH,he intentado probrarlo en otro Pc con otra tarjeta gráfica (la de mi casa es un NVIDIA) y lo que ahora ocurre es que la figura aparece totalmente pintada en colo blanco. Curioso el tema.
eamos realistas: Exijamos lo imposible

Tei

Cita de: "fgutierrez"No conocia la técnica de multisamplig FSAA, asi que le echaré un vistazo y lo intentaré de esta forma. De todas formas es realmente curioso lo del POLYGON_SMOOTH,he intentado probrarlo en otro Pc con otra tarjeta gráfica (la de mi casa es un NVIDIA) y lo que ahora ocurre es que la figura aparece totalmente pintada en colo blanco. Curioso el tema.

Bueno. Puede que necesites dibujar las lineas con antialias o poligonos con antialias de atras hacia adelante.  

Del primer mensaje ya saque como conclusión que tienes un poligono que ocupa toda la pantalla.  Quizas un fondo, o una gui, o algo.

fgutierrez

Cita de: "Tei"
Cita de: "fgutierrez"No conocia la técnica de multisamplig FSAA, asi que le echaré un vistazo y lo intentaré de esta forma. De todas formas es realmente curioso lo del POLYGON_SMOOTH,he intentado probrarlo en otro Pc con otra tarjeta gráfica (la de mi casa es un NVIDIA) y lo que ahora ocurre es que la figura aparece totalmente pintada en colo blanco. Curioso el tema.

Bueno. Puede que necesites dibujar las lineas con antialias o poligonos con antialias de atras hacia adelante.  

Del primer mensaje ya saque como conclusión que tienes un poligono que ocupa toda la pantalla.  Quizas un fondo, o una gui, o algo.

He probado tanto dibujando un solo polígono simple como un cilindro utilizando los quadratics de glu, y el efecto  es el mismo. De todas formas, muchas gracias por intentar ayudarme, seguiré investigando.
eamos realistas: Exijamos lo imposible






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.