Tema 7 Colores y Sombras. Índice Color –La luz –Percepción del color –Características...
-
Upload
edmundo-aguiniga -
Category
Documents
-
view
58 -
download
2
Transcript of Tema 7 Colores y Sombras. Índice Color –La luz –Percepción del color –Características...
Tema 7Colores y Sombras
Índice
• Color– La luz– Percepción del color– Características psicológicas del color– Profundidad de color– Modelos de color– Colores en OpenGL
La luz
• El color es una banda de frecuencias del espectro electromagnético
• El espectro visible abarca desde los 4.3*1014 Hz (rojo) hasta los 7.5 * 10 14 Hz (violeta)
• El ojo humano distingue aproximadamente unos 400.000 colores diferentes
La luz
• La luz blanca esta formada por el conjunto de radiaciones visibles– Un objeto sobre el que incide luz blanca
absorberá algunas frecuencias y reflejará otras
– La combinación de éstas últimas determinará el color del objeto
– La frecuencia dominante se denomina color o matiz de la luz
Percepción del color
• El color es la impresión producida al incidir en la retina los rayos luminosos difundidos o reflejados por los cuerpos
• El ojo humano actúa como sensor y el cerebro interpretar las imágenes– Los conos están especializados en la visión del color– Especializados en:
• azul y violeta• verde y amarillo• rojo y naranja
• Los bastones requieren muy poca luz y no son capaces de discernir los colores.
Características psicológicas del color
• Cromaticidad:– Matiz – Luminosidad – Tono – Saturación
• Además de la frecuencia, otras propiedades para caracterizar nuestra percepción de la luz
Profundidad de color• Color de 1-bit
– Permite 2 colores, utiliza 1 bit dedicado a la información de color por cada píxel (2 1).• Color de 4-bits
– 16 colores por píxel, utiliza 4 bits dedicados a la información de color (2 4)• Color de 8-bits
– 256 colores ya que se utilizan 8 bits dedicados a la información de color por cada píxel (2 8) – Se pueden utilizar los 8 bits para imágenes de un tono continuo en blanco y negro con 256 matices de color
• Color de 24-bits – Permite 16.777.216 colores, se utilizan 24 bits dedicados a la información de color por cada píxel (2 24)– 8 bits para cada color: rojo, verde y azul– El inconveniente es la utilización de memoria que se necesita para pantallas de alta resolución (2MB para
1024x768)
Modelos de color
• El propósito de un modelo de color es facilitar la especificación de colores en algún formato estándar
• Especificación de un modelo de coordenadas 3D y un subespacio dentro donde cada color se representa por un punto único
• La mayoría de los modelos de color que se utilizan están orientados hacia el hardware como monitores o impresoras
Modelos de color
• Espacio de color CIE – El CIE ("d'Eclairage de Internationale de la Comisión") definió tres
fuentes de luz hipotéticas, x, y, y z, resultando curvas positivas– El diagrama de cromaticidad CIE es un modelo de dos dimensiones de
visión del color – El diagrama de cromaticidad CIE refleja el tono y la saturación, pero es
necesario un modelo tridimensional para añadir el componente del brillo
Modelos de color
• El modelo de color RGB– Modelo aditivo de color que es
representado por el cubo del color del RGB
– R, G, y B representan los colores producidos por los fósforos rojos, verdes y azules
– El cubo se proyecta dentro del espacio de color del CIE XYZ
– Los valores de R,G,B se asignan en el intervalo de 0 a 1
Colores en OpenGL
• OpenGL especifica un color utilizando las intensidades separadas de componentes rojo, verde y azul (espacio de color RGB)
• Definimos un color con la función glColor*• Los elementos geométricos se dibujan con los
atributos activos en cada momento• En cualquier momento se pude modificar el
valor de los atributos, sustituyendo el nuevo valor al anterior
• Los atributos podrán apilarse y desapilarse
Colores en OpenGL
void triangulo2(void){glBegin(GL_TRIANGLES);glColor3f(0.0,0.0,1.0); glColor3f(0.0,1.0,0.0);glVertex2f(0.0,-0.4);glVertex2f(-0.4,0.2);glVertex2f(0.4,0.2);
glEnd();
}
Colores en OpenGL
• Al dibujar polígonos se puede controlar que se dibujen sus aristas o solo el interior
• control de visibilidad de las aristas se realiza con la función glEdgeflag(b)
• También se pueden conseguir gradientes• Con un triángulo, por ejemplo, bastará con
asignar un color distinto a cada vértice • OpenGL renderiza la imagen con el
gradiente de color resultante entre ellos
Colores en OpenGL
glBegin GL_TRIANGLESglColor3f( 1.0,0.0,0.0 ) //color rojo
glVertex3f( 0.0,1.0,0.0 )
glColor3f( 0.0,1.0,0.0 ) //color verde
glVertex3f( -1.0,-1.0,0.0 )
glColor3f( 0.0,0.0,1.0 ) //color azul
glVertex3f( 1.0,-1.0,0.0 )
glEnd
Colores en OpenGL
• Canal alpha– El modelo RGBA de color dota a cada punto
de una cuarta componente llamada canal alfa– Imagen de 8 bits en escala de grises– OpenGL lo interpreta de la manera siguiente
• Un valor alpha de 0 (color negro) indica transparencia total
• Un valor de 128 (color gris "puro") indica semitransparencia
• Un valor de 255 (color blanco) indica opacidad total
Colores en OpenGL
• Mezclando dos colores generamos un tercero, si tengo un objeto de color rojo y le pongo delante un papel translúcido de color azul, la intersección de ambos se verá de color lila
Colores en OpenGL
• Activar el mezclado de colores y desactivarlo con las funciones – glEnable(GL_BLEND)– glDisable(GL_BLEND)
• Para indicar como debe hacerse la mezcla se usará la función – glBlendFunc(Glenum factorfuente, Glenum factordestino)
• glBlendFunc(GL_ONE,GL_ZERO)– importancia de 1 (máxima) al canal alfa de la fuente y de 0 (nula) al
canal alfa del destino
• glBlendFunc(GL_SRC_ALPHA, GL_ONE) – multiplique a la fuente por su valor de alfa y sume el resultado al color
destino
Colores en OpenGL
• Ocultaciones– OpenGL permite utilizar dos métodos de
ocultación• El algoritmo de las caras de detrás
– Consiste en ocultar las caras que no se dibujarían porque formarían parte de la parte trasera del objeto
» glEnable(GL_CULL_FACE)
• Algoritmo del Z-buffer– Cada vez que se va a renderizar un pixel, comprueba
que no se haya dibujado antes en esa posición un píxel que esté más cerca respecto a la cámara
» glEnable(GL_DEPTH_TEST)
• Sin ocultaciones• Ocultando caras detrás
Colores en OpenGL
• Sin Z-Buffer• Con Z-Buffer
Colores en OpenGL
Colores en OpenGL
• Eliminando caras detrás• Caras detrás + Z-Buffer
Colores en OpenGL
• La combinación de estos dos algoritmos no siempre es adecuada
• Caras detrás + Z-Buffer• Z-Buffer
Colores en OpenGL
• El color de los materiales– La forma en que la luz incide sobre las
superficies de los objetos depende de las propiedades del material de los mismos
– OpenGL la forma de definir estas propiedades es la función:
• void glMaterial{if}[v](GLenum face, GLenum pname, TYPEparam);
– El primer argumento determina la cara del objeto donde se aplica el material
– propiedad del material que va a fijarse
Colores en OpenGL
Indice
• Sombras– Efecto falloff (Distance falloff)– Sombreado– Tipos de sombreado– Sombreado en OpenGL– Stencil Buffer– Volúmenes de sombras– Fusión (Dithering)– Paletas de Ventana
Sombras
• Definición:Una sombra es una región de oscuridad donde la luz es obstaculizada. Una sombra ocupa todo el espacio de detrás de un objeto opaco con una fuente de luz frente a él. La sección eficaz de una sombra es una silueta bidimensional o una proyección invertida del objeto que bloquea la luz.
Sombras
• Propiedades:– Cuanto menor el ángulo entre dirección de la
luz y objeto, más corta la sombra.– Cuanto menor el ángulo entre dirección de la
luz y superficie donde aparece la sombra, mayor será esta.
– Fuente luz no puntual-> umbra y penumbra– Múltiples focos->múltiples sombras– Múltiples focos colores-> Color de cada
sombra será del color de la luz del otro foco
Sombras
• Sombras por ordenador:– Simula como se comportan las caras del
polígono cuando es iluminado por una fuente de luz virtual
– Altera el color de las caras de un modelo 3D basándose en el ángulo de la superficie con la fuente de luz.
Sombras
• Ejemplo:
sombreado en las carassin líneas en los bordes Imagen renderizada
Sombras-Efecto Falloff
• Se puede observar que las superficies de las caras son brillantes en la caja delantera y más oscuras en la situada en la parte de atrás. También la superficie sobre la que están pasa de claro a oscuro según se aleja.
• produce imágenes más realistas
efecto falloff
sin efecto falloff
Tipos de sombreado
• Sombreado plano (Flat shading)– Definición: sombrea cada polígono de un
objeto basándose en el ángulo que existe entre la superficie normal del polígono y la dirección de la fuente de luz, sus respectivos colores y la intensidad de la luz
– Renderizado de alta velocidad– Desventaja: aspecto poco natural en modelos
bajos en polígonos
Tipos de sombreado
• Comparación Flat Shading-Phong
Tipos de sombreado
• Sombreado Gouraud – Simula el efecto de difusión de la luz y los
colores a través de la superficie del objeto – Aplica el patrón de iluminación a cada vértice
del polígono y entonces promedia los valores de color en toda la superficie del objeto para así alcanzar un efecto de sombreado suave
– El resultado final de todo esto es un polígono con un suave gradiente de intensidades sobre su superficie
Tipos de sombreado
• Sombreado Gouraud: Bandas de Mach– objetos sombreados
con Gouraud muestran las zonas de unión de polígonos
Tipos de sombreado
• Sombreado de Phong– usado en los gráficos 3D para la interpolación de
superficies en polígonos rasterizados, para obtener mejor resolución especular.
– proporciona una mejor aproximación a la aplicación punto-por-punto de un modelo de reflexión superficial, asumiendo una suavidad variante de la superficie como vector normal.
– en lugar de interpolar intensidades de los vértices, según se hace en el sombreado Gouraud, se interpole normales a lo largo del polígono
Tipos de sombreado
• Sombreado Blinn–Phong – intercambia la precisión visual por eficiencia
computacional
Reflexión
• Modelo de Lambert– Superficies en las que la luz que incide sobre
ellas se reparte de forma que sólo depende del ángulo de incidencia y es independiente del ángulo de observación.
– Sólo se puede emplear con ciertos materiales.– Sirve como una buena aproximación cuando las
características de la superficie no se conocen.
Reflexión
• Modelo de Oren-Nayar– Similar al de Lambert.– Es más preciso aunque también más
complicado. Los cálculos se realizan teniendo en cuenta un factor de rugosidad de la superficie.
Sombreado en OpenGL
• glShadeModel(GLenum modo ) selecciona el modelo de sombreado: suave o plano. El modo puede ser:– Plano GL_FLAT – Suave GL_SMOOTH
Sombreado OpenGL GL_Flat
glShadeModel(GL_FLAT);glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); // color rojo glVertex3f(-1.0f, 0.0f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); // color verde glVertex3f(1.0f, 0.0f, 0.0f); glColor3f(1.0f, 0.0f, 0.0f); // color azul glVertex3f(0.0f, 1.0f, 0.0f);glEnd();
Sombreado OpenGL GL_SMOOTH
glShadeModel(GL_SMOOTH);glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); //activamos el color rojo
glVertex3f(-1.0f, 0.0f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); // verde
glVertex3f(1.0f, 0.0f, 0.0f); glColor3f(1.0f, 0.0f, 0.0f); // azul
glVertex3f(0.0f, 0.0f, 1.0f);glEnd();
Sombreado-Stencil Buffer
• Sirve para mejorar la calidad de las sombras y los reflejos.
• Añade planos de bits adicionales para cada píxel además de los bits de color y profundidad.
• Es una manera de marcar píxeles en una renderización para controlar su actualización en renderizaciones siguientes.
• Funciones en OpenGL:– glEnable(GL_STENCIL_TEST)– glDisable(GL_STENCIL_TEST).– glClearStencil
Volúmenes de sombras
• Construcción:– se proyecta un rayo de luz a través de cada
vértice en la proyección de la sombra del objeto hacia el infinito.
– El conjunto de estas proyecciones generan un volumen que engloba todos los puntos que pudieran posiblemente verse ensombrecidos por un objeto.
– Cualquier objeto dentro de este volumen debería ser ensombrecido
Volúmenes de sombras
Volúmenes de sombras- Técnicas
• Existen 3 técnicas aplicables en tiempo real.• Características comunes:
– dibujar la escena como si estuviera completamente en sombra.
– para cada punto de luz:• usar la información de profundidad de la escena para
construir una mascara en el stencil buffer • la escena de nuevo como si estuviera completamente
iluminada, usando el stencil buffer para la máscara de las áreas sombreadas.
Volúmenes de sombras- Técnicas
• Paso de profundidad (Depth pass)– Si la superficie de un objeto esta en sombra, habrá
más superficies sombreadas frontalmente entre ella y el ojo que con las superficies traseras sombreadas.
• Error de Profundidad (Depth fail)– En vez de contar las caras frontales sombreadas de
la superficie del objeto, las superficies traseras se pueden contar así fácilmente con el mismo resultado
• OR exclusivo – Aproxima las dos anteriores, no trata propiamente
con la intersección de los volúmenes de sombras
Fusión (Dithering)
• Definición:– técnica usada para crear la ilusión de profundidad de
color en imágenes con una paleta de colores limitada.– los colores no disponibles en la paleta original son
aproximados por una difusión de los píxel coloreados dentro de la paleta disponible.
– El ojo humano percibe la difusión como una mezcla de colores.
Fusión
• Incremento de fusión:
glDisable(GL_DITHER)
glEnable( GL_DITHER )
Paletas
• En Windows existen dos tipos de paletas:– Paletas lógicas– Paletas del sistema
• Existe una paleta especial que es la paleta por defecto que es la que utiliza el usuario a no ser que crea una.
• No se puede acceder a la paleta del sistema directamente. Los accesos se hacen mediante la paleta lógica.
• Como programadores, podemos usar los colores de la paleta por defecto o bien crear nuestra propia paleta lógica y asociarla al contexto de dispositivo.
Creación de Paletas de Ventana
• Crear una paleta en OpenGL:HPALETTE CreatePalette( CONST LOGPALETTE *lplgpl //
puntero a la paleta lógica de color ); • Esta paleta utiliza una estructura lógica de
paleta (LOGPALETE) que contiene 256 entradas, especificando los 8 bits para las componentes R,G,B.
Arbitraje de paletas
• Windows es un S.O. multitarea Ejecución simultánea de varias aplicaciones.
• Pero el hardware solo permite 256 colores en la paleta del sistema que deben ser compartidos por todas las aplicaciones en ejecución.
• Si alguna de las aplicaciones modifica la paleta del sistema puede que se altere la presentación de imágenes de otras aplicaciones produciendo efectos no deseados.
• Windows proporciona un conjunto de mensajes para arbitrar el uso de paletas.
Arbitraje de paletas
• Mensajes:– WM_QUERYNEWPALETTE Preguntar a la
ventana principal si desea copiar las entradas de su paleta privada en las entradas del sistema.
– WM_PALETTECHANGED Indica a la ventana que puede seleccionar la paleta, incluso si no es la ventana activa.
Creación de paletas
• DescribePixelFormat() para determinar si una aplicación requiere una paleta.
• Retorna una estructura PÍXELFORMATDESCRIPTOR
• Si el valor del bit PFD_NEED_PALETTE está activo crear una paleta para la aplicación
Estructura de una paleta
• Reservar memoria:typedef struct tagLOGPALETTE { // lgpl WORD palVersion; WORD palNumEntries; PALETTEENTRY palPalEntry[1]; } LOGPALETTE;
• Llamar a la función CreatePalette() • Cada entrada en la paleta es una
estructura PALETTEENTRY
Estructura de una paleta
• typedef struct tagPALETTEENTRY { // pe BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; } PALETTEENTRY; - peRed, peGreen y peBlue representan las
intensidades relativas para las componentes de 8 bits RGB. Así cada una de las 256 entradas de la paleta contendrá una definición de color de 24 bits.
- PeFlags se utiliza para especificar opciones avanzadas de la paleta. Normalmente su valor será NULL.
Destrucción de una paletacase WM_DESTROY:
// Desactiva el contexto de generación actual y lo borra
wglMakeCurrent(hDC,NULL);
wglDeleteContext(hRC);
ReleaseDC(hWnd,hDC);
// Borra la paleta si fue creada
if(hPalette != NULL)
DeleteObject(hPalette);
// Le dice a la aplicacion que termine despues de que se cierre la ventana
PostQuitMessage(0);
break;
Librería GL
• Principales funciones para el manejo de colores y sombras en OpenGL– glAccum - establece los valores de un píxel
en el buffer.– glClearColor – borra los buffers de color.– glClearDepth – asigna un valor de
profundidad al buffer de profundidad.– glColor – selecciona el color actual en modo
RGBA.
Librería GL
• glColorMask – activa o desactiva la modificación de las componentes de color en los buffers de color.
• glColorMaterial – permite seleccionar las propiedades de un material siguiendo el color definido por glColor.
• glDisable – desactiva una característica de OpenGl
Librería GL
• glEnable – activa una característica de OpenGl.
• glDrawBuffer – selecciona un buffer de color para dibujar.
• glFog – especifica los parámetros de niebla.
• glIndex – selecciona el índice de color actual.
Librería Gl
• glLogicOp – selecciona la operación lógica para el modo de color indexado.
• glPolygonMode – selecciona el modo en que se generan los polígonos.
• glShadeModel – asigna el sombreado por defecto (suave o plano)