martes, noviembre 07, 2006

Contenido Capítulo 4 : Color

Color en el Computador

• Los colores de cada pixel son almacenados:
– Modo RGB o RGBA
– Modo Color-Index

• Los colores son almacenados en el buffer de color.
– glColor3f (1.0, 0.0, 0.0);
– glBegin (GL_POINTS);
– glVertex3fv (point_array);
– glEnd();

• El color es especificado por vértice para cada primitiva.
• Se aplica el modelo de Shading.
• Las primitivas son rasterizadas (convertidas a imagen 2d).
• Rastering implica determinar qué cuadrados de la grilla, en coordenadas de la ventana, son ocupados por la primitiva.
• Cada cuadrado tiene asociado un color, z (depth), coordenadas de textura. El conjunto se llama Fragmento.
• Los pixeles son elementos del framebuffer.
• Un pixel con un fragmento son combinados para formar el nuevo pixel.

Modo RGBA versus Color-Index
• Un dato de color se almacena en un pixel.
• El número de colores se determina por el número de planos de bits del framebuffer.
• 8 planos de colores = 256
• Para obtener el número de planos disponibles:
– void glGetIntegerv(GLenum pname, GLint *params)
• pname: GL_RED_BITS, GL_GREEN_BITS, GL_BLUE_BITS, GL_ALPHA_BITS, GL_INDEX_BITS.
• params: retorna el valor buscado.

Modo RGBA
• Valores de cada componente: 0.0 a 1.0

Dithering
• Dithering es una técnica que combina algunos colores para crear el efecto de otros colores.
• Para habilitar dithering:
– glEnable(GL_DITHER);

Modo Color-Index
• Usa un mapa de color (o tabla de búsqueda).

Especificación de Color en RGBA
• Selecciona el color actual:
void glColor3{b s i f d ub us ui} (TYPEr, TYPEg, TYPEb);
void glColor4{b s i f d ub us ui} (TYPEr, TYPEg, TYPEb, TYPEa);
void glColor3{b s i f d ub us ui}v (const TYPE*v);
void glColor4{b s i f d ub us ui}v (const TYPE*v);

Especificación de Color en RGBA
• Conversión de valores de colores a números flotantes. (ver tabla)

Especificación de Color en Color-Index
• Selecciona el índice de color actual:
void glIndex{sifd ub}(TYPE c);
void glIndex{sifd ub}v(const TYPE *c);
• Especifica el índice usado para limpiar el buffer de índice de color: void glClearIndex(GLfloat cindex);
• OpenGL no tiene funciones para cargar el mapa de colores. Ver glutSetColor().

Especificación del Modelo Shading
• voidglShadeModel (GLenum mode);
– mode: GL_SMOOTH (default), GL_FLAT.
• Ejemplo: smooth.c

No hay comentarios: