Logo

¡Bienvenido a Stratos!

Acceder

Foros



Antialiasing con OpenGL

Iniciado por Fran, 25 de Enero de 2007, 10:13:04 AM

« anterior - próximo »

Fran

¿Como se hace con los polígonos? No me sale.

Fran

void display(void)
{
   GLfloat position[] = { 0.0, 0.0, 1.0, 0.0 };
   GLfloat mat_cube1[] = { 0.75, 0.75, 0.0, 1.0 };
   GLfloat mat_cube2[] = { 0.0, 0.75, 0.75, 1.0 };

   if (polySmooth)
       glClear (GL_COLOR_BUFFER_BIT);
   else
       glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   glPushMatrix ();
       glTranslatef (0.0, 0.0, -8.0);    
       glLightfv (GL_LIGHT0, GL_POSITION, position);

       glBlendFunc (GL_SRC_ALPHA_SATURATE, GL_ONE);

       glPushMatrix ();
           glRotatef (30.0, 1.0, 0.0, 0.0);
           glRotatef (60.0, 0.0, 1.0, 0.0);
           glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_cube1);
           auxSolidCube (1.0, 1.0, 1.0);
       glPopMatrix ();

       glTranslatef (0.0, 0.0, -2.0);    
       glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_cube2);
       glRotatef (30.0, 0.0, 1.0, 0.0);
       glRotatef (60.0, 1.0, 0.0, 0.0);
       auxSolidCube (1.0);

   glPopMatrix ();

   glFlush ();
}

Esto q está extraido del red book , no me funciona

marcode

falta activarlo.

glEnable(GL_POLYGON_SMOOTH);
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Fran

Cita de: marcodefalta activarlo.

glEnable(GL_POLYGON_SMOOTH);

Bueno ya. Es q eso lo hago antes. Perdón por la omisión. Pero esto te funciona?

marcode

Pues la verdad que ahora que lo pienso nunca me ha funcionado, solo con lineas y puntos. Me parece que esa función no está en la implementación y quizás no funciona en todas las tarjetas.

Prueba esto otro de cosecha propia.


DibujarCosa();

glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); // o GL_FASTEST
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
glPolygonMode(GL_FRONT, GL_LINE);

DibujarCosa();

glDisable(GL_BLEND);
glPolygonMode(GL_FRONT, GL_FILL);
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Fran

Cita de: marcodePues la verdad que ahora que lo pienso nunca me ha funcionado, solo con lineas y puntos. Me parece que esa función no está en la implementación y quizás no funciona en todas las tarjetas.

Prueba esto otro de cosecha propia.


DibujarCosa();

glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); // o GL_FASTEST
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
glPolygonMode(GL_FRONT, GL_LINE);

DibujarCosa();

glDisable(GL_BLEND);
glPolygonMode(GL_FRONT, GL_FILL);

:) Que truquitor...... No lo he probado pero sé que quieres hacer. Pero eso lo hará ir más lento ¿no?. Dibujo 200.000-1M triángulos. He leido algo por ahi del multisampling. Alguien sabe como funciona? Ahora cuando llegué a casa pongo las funciones a ver si alguien ha logrado que funcione y me explica como.

marcode

Claro, para tantos triángulos es una locura dibujar todo 2 veces. Esto más bien para muros y edificios, o algunas rectas que parecen serruchos y dan mucho el cante.

Pero el multisample también chupa lo suyo y no sirve para el modo ventana. si usas glut pruébalo pasando a la función de inicio GLUT_MULTISAMPLE y glEnable(GL_MULTISAMPLE). Sin glut es más coñazo iniciarlo.

Otra opción es usar un buffer de acumulación, que tiene más calidad que el multisample.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]






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.
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.