Stratos: Punto de Encuentro de Desarrolladores

¡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: "marcode"falta 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: "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);

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