Tema 7 Colores y Sombras ndice Color La
Tema 7 Colores y Sombras
Índice • Color – La luz – Percepción del color – Características psicológicas del color – Profundidad de color – Modelos de color – Colores en Open. GL
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 • Además de la frecuencia, otras propiedades para caracterizar nuestra percepción de la luz • Cromaticidad: – – Matiz Luminosidad Tono Saturación
Profundidad de color • Color de 1 -bit – Permite 2 colores, utiliza 1 bit dedicado a la información de color por cada píxel (21). • Color de 4 -bits – 16 colores por píxel, utiliza 4 bits dedicados a la información de color (24) • Color de 8 -bits – 256 colores ya que se utilizan 8 bits dedicados a la información de color por cada píxel (28) – 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 (224) – 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 (2 MB para 1024 x 768)
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 3 D 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 Open. GL • Open. GL especifica un color utilizando las intensidades separadas de componentes rojo, verde y azul (espacio de color RGB) • Definimos un color con la función gl. Color* • 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 Open. GL void triangulo 2(void){ gl. Begin(GL_TRIANGLES); gl. Color 3 f(0. 0, 1. 0); gl. Color 3 f(0. 0, 1. 0, 0. 0); gl. Vertex 2 f(0. 0, -0. 4); gl. Vertex 2 f(-0. 4, 0. 2); gl. Vertex 2 f(0. 4, 0. 2); gl. End(); }
Colores en Open. GL • 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 gl. Edgeflag(b) • También se pueden conseguir gradientes • Con un triángulo, por ejemplo, bastará con asignar un color distinto a cada vértice • Open. GL renderiza la imagen con el gradiente de color resultante entre ellos
Colores en Open. GL gl. Begin GL_TRIANGLES gl. Color 3 f( 1. 0, 0. 0 ) //color rojo gl. Vertex 3 f( 0. 0, 1. 0, 0. 0 ) gl. Color 3 f( 0. 0, 1. 0, 0. 0 ) //color verde gl. Vertex 3 f( -1. 0, 0. 0 ) gl. Color 3 f( 0. 0, 1. 0 ) //color azul gl. Vertex 3 f( 1. 0, -1. 0, 0. 0 ) gl. End
Colores en Open. GL • 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 – Open. GL 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 Open. GL • 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 Open. GL • Activar el mezclado de colores y desactivarlo con las funciones – gl. Enable(GL_BLEND) – gl. Disable(GL_BLEND) • Para indicar como debe hacerse la mezcla se usará la función – gl. Blend. Func(Glenum factorfuente, Glenum factordestino) • gl. Blend. Func(GL_ONE, GL_ZERO) – importancia de 1 (máxima) al canal alfa de la fuente y de 0 (nula) al canal alfa del destino • gl. Blend. Func(GL_SRC_ALPHA, GL_ONE) – multiplique a la fuente por su valor de alfa y sume el resultado al color destino
Colores en Open. GL • Ocultaciones – Open. GL 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 » gl. Enable(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 » gl. Enable(GL_DEPTH_TEST)
Colores en Open. GL • Sin ocultaciones • Ocultando caras detrás
Colores en Open. GL • Sin Z-Buffer • Con Z-Buffer
Colores en Open. GL • Eliminando caras detrás • Caras detrás + Z-Buffer
Colores en Open. GL • La combinación de estos dos algoritmos no siempre es adecuada • Caras detrás + Z-Buffer • Z-Buffer
Colores en Open. GL • 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 – Open. GL la forma de definir estas propiedades es la función: • void gl. Material{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 Open. GL
Indice • Sombras – Efecto falloff (Distance falloff) – Sombreado – Tipos de sombreado – Sombreado en Open. GL – 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 3 D basándose en el ángulo de la superficie con la fuente de luz.
Sombras • Ejemplo: Imagen renderizada sin líneas en los bordes sombreado en las caras
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 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 3 D 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 Open. GL • gl. Shade. Model(GLenum modo ) selecciona el modelo de sombreado: suave o plano. El modo puede ser: – Plano GL_FLAT – Suave GL_SMOOTH
Sombreado Open. GL GL_Flat gl. Shade. Model(GL_FLAT); gl. Begin(GL_TRIANGLES); gl. Color 3 f(1. 0 f, 0. 0 f); // color rojo gl. Vertex 3 f(-1. 0 f, 0. 0 f); gl. Color 3 f(0. 0 f, 1. 0 f, 0. 0 f); // color verde gl. Vertex 3 f(1. 0 f, 0. 0 f); gl. Color 3 f(1. 0 f, 0. 0 f); // color azul gl. Vertex 3 f(0. 0 f, 1. 0 f, 0. 0 f); gl. End();
Sombreado Open. GL GL_SMOOTH gl. Shade. Model(GL_SMOOTH); gl. Begin(GL_TRIANGLES); gl. Color 3 f(1. 0 f, 0. 0 f); //activamos el color rojo gl. Vertex 3 f(-1. 0 f, 0. 0 f, 0. 0 f); gl. Color 3 f(0. 0 f, 1. 0 f, 0. 0 f); // verde gl. Vertex 3 f(1. 0 f, 0. 0 f); gl. Color 3 f(1. 0 f, 0. 0 f, 0. 0 f); // azul gl. Vertex 3 f(0. 0 f, 1. 0 f); gl. End();
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 Open. GL: – gl. Enable(GL_STENCIL_TEST) – gl. Disable(GL_STENCIL_TEST). – gl. Clear. Stencil
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: gl. Disable(GL_DITHER) gl. Enable( 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 Open. GL: HPALETTE Create. Palette( 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 • Describe. Pixel. Format() 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 tag. LOGPALETTE { // lgpl WORD pal. Version; WORD pal. Num. Entries; PALETTEENTRY pal. Pal. Entry[1]; } LOGPALETTE; • Llamar a la función Create. Palette() • Cada entrada en la paleta es una estructura PALETTEENTRY
Estructura de una paleta • typedef struct tag. PALETTEENTRY { // pe BYTE pe. Red; BYTE pe. Green; BYTE pe. Blue; BYTE pe. Flags; } PALETTEENTRY; - pe. Red, pe. Green y pe. Blue 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. - Pe. Flags se utiliza para especificar opciones avanzadas de la paleta. Normalmente su valor será NULL.
Destrucción de una paleta case WM_DESTROY: // Desactiva el contexto de generación actual y lo borra wgl. Make. Current(h. DC, NULL); wgl. Delete. Context(h. RC); Release. DC(h. Wnd, h. DC); // Borra la paleta si fue creada if(h. Palette != NULL) Delete. Object(h. Palette); // Le dice a la aplicacion que termine despues de que se cierre la ventana Post. Quit. Message(0); break;
Librería GL • Principales funciones para el manejo de colores y sombras en Open. GL – gl. Accum - establece los valores de un píxel en el buffer. – gl. Clear. Color – borra los buffers de color. – gl. Clear. Depth – asigna un valor de profundidad al buffer de profundidad. – gl. Color – selecciona el color actual en modo RGBA.
Librería GL • gl. Color. Mask – activa o desactiva la modificación de las componentes de color en los buffers de color. • gl. Color. Material – permite seleccionar las propiedades de un material siguiendo el color definido por gl. Color. • gl. Disable – desactiva una característica de Open. Gl
Librería GL • gl. Enable – activa una característica de Open. Gl. • gl. Draw. Buffer – selecciona un buffer de color para dibujar. • gl. Fog – especifica los parámetros de niebla. • gl. Index – selecciona el índice de color actual.
Librería Gl • gl. Logic. Op – selecciona la operación lógica para el modo de color indexado. • gl. Polygon. Mode – selecciona el modo en que se generan los polígonos. • gl. Shade. Model – asigna el sombreado por defecto (suave o plano)
- Slides: 60