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 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
• 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 (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_TRIANGLES
glColor3f( 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)
Colores en OpenGL
• Sin ocultaciones
• Ocultando caras detrás
Colores en OpenGL
• Sin Z-Buffer
• Con Z-Buffer
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:
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
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 paleta
case 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)
Descargar

Tema 7 Colores y Sombras