Title: LUCES Y L
1LUCES Y LÁMPARAS
- Realizado por
- Mercedes Sánchez Marcos
- Almudena Sardón García
2Contenido (I)
- Introducción.
- Los modelos de iluminación.
- Rendering. Determinación de superficies visibles.
- Métodos de rendering de los polígonos.
- Iluminación en OpenGL
- Tipos de iluminación
- Caracteristicas de las fuentes de lus
- Vectores normales
- Colocar luces
- Atenuación con la distancia
- Área de cobertura
3Contenido (II)
- Propiedades de los materiales
- Efectos de la iluminación
- Focos de luz
- Sombras
- Conclusiones
4Introducción I
- Actuación de la luz al chocar con una
superficie. - Cómo representa OpenGL la luz y sus fenómenos.
- Uso de la luz para construir escenas.
- Modelos de renderizado más usados.
- Uso de la iluminación en OpenGL.
- Especificación de los materiales de la escena.
5Introducción II
- Efectos de iluminación que se pueden conseguir
con OpenGL. - Modelos de iluminación y reflexión.
- Luz incidente luz reflejada luz dispersa
luz absorbida luz transmitida. - Parámetros distancia entre la fuente de luz y el
objeto, rugosidad de la superficie, tipo de
material, ángulo de incidencia de la luz,
longitud de onda de la luz incidente.
6Los modelos de iluminación I
- El fenómeno de iluminación y reflexión indica
cómo la luz interactúa con un sólido. - Clasificación de la luz
- Luz incidente.
- Luz de reflexión.
- Luz difusa.
- Luz difusa global.
- Luz difusa local.
- Luz especular.
- Luz de refracción.
- Luz de transmisión.
7Los modelos de iluminación II
- Los diferentes tipos de iluminación producen
distintos efectos de brillo y color
(reflectancia). - El ángulo entre los rayos de luz y la
perpendicular de la superficie determina en que
medida la superficie aparecerá brillante a los
ojos del espectador. - La perpendicular de una superfice plana es la
línea qu sale con un ángulo de 90 grados
(normal). - Una superficie plana aparecerá más brillante
cuando su perpendicular apunte directamente hacia
el foco de luz. - La superficie no reflejará luz cuando esté más de
90 grados de los rayos de luz, ni tampoco cuando
esté mirando al lado opuesto del foco luminoso. - El modelo básico de iluminación considera sólo
las reflexiones ?Intensidad luz ambiente luz
difusa luz especular
8Los modelos de iluminación III
- Luz ambiental.
- Es la luz indirecta, por ejemplo la que se ve en
un día nuboso. - Es el resultado de la reflexión múltiple de todos
los objetos en la escena. - En teoría no produce sombras en el mundo real,
pero en caso de producirlas serán suaves. - Luz difusa.
- Es la que la superficie de un objeto refleja en
todas las direcciones debido a la iluminación
directa. - Es la responsable del color del objeto.
- Es una característica propia de los objetos mates.
9Los modelos de iluminación IV
- Luz especular.
- Procede de un único punto de luz, es decir de una
sola dirección. - Es una luz con alta intensidad que una superficie
brillante refleja a lo largo de la dirección del
espejo. - Es la que produce el efecto espejo.
- Tiene el color de la fuente de luz.
- La reflexión especular depende de la posición del
observador.
10Los modelos de iluminación V
- Modelo de Phong (I).
- La luz en un punto tiene tres componentes y es
igual a la suma de las tres ? luz difusa luz
especular luz ambiental. - El modelo de Phong consiste en modelar el efecto
de la luz especular. Lo hace de la forma
IespksIlcosnfksIl(VR)n
- n es el parámetro de reflexión especular.
- Si la superficie es más brillante, n es mas
grande
11Los modelos de iluminación VI
- Modelo de Phong (II).
- La componente difusa toma el color de la
superficie. - El rayo reflejado (componente especular) toma el
color de la fuente de luz. - I d I i k d cos q
- Si sólo se consideran la componente difusa y la
especular el objeto queda como si estuviera
iluminado por un flash. Para evitarlo se usa la
componente ambiental. - I g I a k a
- En la componente ambiental se engloban las otras
componentes.
12Los modelos de iluminación VII
- Modelo básico de iluminación.
- Considerando el modelo de Phong se puede definir
el modelo básico de iluminación de la siguiente
forma - IIambienteIdifusaIespecularkaIakdIl(NL)ksIl
(NH)n - Modelo básico de iluminación con n fuentes de
luz. - De la misma forma, se puede definir el modelo
básico de iluminación si se dispone de n fuentes
de luz - IIambienteIdifusaIespecularkaIaIIkd(NLl)ks
(NHl)n - Atenuación de la intensidad a lo largo de la
distancia de la luz. - Para tener en cuenta que los objetos más cercanos
son más brillantes que los más lejanos se usa un
término de atenuación. - El modelo básico con atenuación de distancia y
fuentes múltiples - IkaIa f(dl)II kd(N Ll) ks (N Hl)n
- Donde f es una función de atenuación empírica.
13Rendering. Determinación de superficies visibles I
- Una parte importante de la generación de gráficos
realistas es la identificación de las partes de
una escena que son visibles desde un punto de
vista determinado. - Distintos planteamientos
- Métodos de detección de superficie visible.
- Imagen-espacio.
- Objeto-espacio.
- Métodos de eliminación de superficies ocultas.
14Rendering. Determinación de superficies visibles
II
- Método de la normal.
- Se aplica en figuras planas.
- Permite ocultar la mitad de las superficies que
hay en escena. - Se basa en calcular la normal a todas las
superficies. - Las normales cuya proyección en la dirección de
visión sean positivas son superficies ocultas y
las negativas visibles. - Se calcula haciendo el producto escalar del
vector de visión por el vector normal de cada
cara. - Si un objeto es poliédrico, las caras son
totalmente visibles o totalmente ocultas. - Si hay varios objetos se realiza el algoritmo
para todos los objetos. - Los que hace el algoritmo es eliminar la cara
posterior de los objetos.
15Rendering. Determinación de superficies visibles
III
- Método de buffer con profundidad. Buffer Z.
- Es un método de espacio-imagen.
- Se mantiene una base de datos que corresponde a
cada pixel de la pantalla de visión. - La base de datos contiene información sobre la
profundidad de la coordenada visual z para cada
parte de un objeto que ocupe una posición
determinada de pixel. - Para cada pixel (x,y) de la imagen, el punto con
menor coordenada z es visible. - El método del Z-Buffer es infalible para todas
las escenas 3D, no importa cuál sea su
complejidad. Sin embargo, es de memoria
intensiva.
16Rendering. Determinación de superficies visibles
IV
- Algoritmo del pintor.
- Se basa en pintar primero el fondo. Sobre este
fondo, se dibuja la siguiente figura. Si sobre
esa figura va otra, se dibujaría encima. - Este método tiene un inconveniente cuando las
superficies se oscurecen alternativamente.
17Rendering. Determinación de superficies visibles V
- Método de traza de rayos.
- Se aplica la definición del algoritmo de
superficie oculta (método de imagen-espacio). - Para cada pixel se traza un rayo. Si no
intercepta ningún objeto se le da el color de
fondo. Si intercepta un objeto, se le da el color
del primer objeto interceptado. - Es un método es muy lento, pero tiene la ventaja
de dar imágenes muy realistas. Por ejemplo,
usando varias fuentes de luz, se obtienen unos
resultados muy buenos, casi fotográficos.
18Métodos de rendering de los polígonos I
- Sombreado con intensidad constante.
- Consiste en calcular una única intensidad para
cada polígono. - Una vez calculada la intensidad de cada polígono,
se visualizan todos los puntos del mismo polígono
con una única intensidad. - Es muy rápido y preciso si las luces y el
observador están lejos. - Presenta el inconveniente de que hay
discontinuidad de intensidad entre los polígonos. - Este método es el más ineficiente y menos usado
de los tres.
19Métodos de rendering de los polígonos II
- Método de sombreado de Gouraud (Gouraud Shading).
- El método consiste en calcular la intensidad de
los pixeles a lo largo de la línea de escaneo por
interpolación. - Elimina la discontinuidad de la intensidad entre
los polígonos que presentaba el método anterior. - Método de sombreado de Phong (Phong Shading).
- En lugar de interpolar las intensidades, lo que
hace es interpolar las normales para cada punto
de la superficie. - Con este método es con el que se consiguen
resultados mas realistas, pero tiene el
inconveniente de que necesita realizar entre 6 y
7 veces mas cálculos que para el método de
Gouraud.
20Activar la iluminación
- Para activar/desactivar la iluminación, OpenGL
propone las siguientes primitivas - glEnable(GL_LIGHTING)
- glDisable(GL_LIGHTING)
- Con estas funciones se le indica a OpenGL que
realice los cálculos correspondientes para el uso
de las fuentes de luz y de las propiedades de los
materiales.
21Tipos de iluminación
- Hay tres tipos de iluminación en OpenGL
- Iluminación plana evalúa sólo un color para
todos los puntos de un polígono - glShadeModel(GL_FLAT)
- Iluminación suaveefectúa cálculos de color para
cada uno de los puntos del polígono. - glShadeModel(GL_SMOOTH)
- Iluminación de Phong OpenGL no implementa PHONG
directamente
22Características de las fuentes de luz(I)
- OpenGL soporta hasta 8 luces por escena.
- Las luces llevan asociado un nombre
- GL_LIGHT0, GL_LIGHT1, GL_LIGHT2
- Para activar y desactivar una luz se utiliza
- glEnable(GL_LIGHT0)
- glDisable(GL_LIGHT0)
- Para definir las fuentes de luz tenemos que
decirle a OpenGL cuáles son las propiedades de
cada una de nuestras luces. - GLvoid glLightfv(GLenum light, GLenum pname,
const GLfloat params)
23Características de las fuentes de luz(II)
24Vectores Normales a la superficie (I)
- Para iluminar una superficie (plano) necesitamos
información sobre su vector normal asociado. - En OpenGL es necesaria la definición de un vector
normal para cada uno de los vértices de nuestra
geometría. - Una vez calculada la normal tenemos que
normalizar, es decir, dividir ese vector por su
propio módulo para que sea unitario. - OpenGL utilizará la normal asociada a cada
vértice para evaluar la luz que incide sobre
éste.
25Vectores Normales a la superficie (II)
- Para definir normales con OpenGL
- glBegin(GL_POLYGON )
- glNormal3f(CoordX, CoordY, CoordZ)
- glVertex3f ( ... )
- glVertex3f ( ... )
- glVertex3f ( ... )
- glVertex3f ( ... )
- ...
- glEnd( )
26Vectores Normales a la superficie (III)
- En este caso cada vértice tiene su normal
- glBegin ( GL_POLYGON )
- glNormal3f ( CoordX, CoordY, CoordZ )
- glVertex3f ( ... )
- glNormal3f ( CoordX, CoordY, CoordZ )
- glVertex3f ( ... )
- glNormal3f ( CoordX, CoordY, CoordZ )
- glVertex3f ( ... )
- glNormal3f ( CoordX, CoordY, CoordZ )
- glVertex3f ( ... )
- ...
- glEnd( )
27Vectores Normales a la superficie (IV)
- Se puede indicar a OpenGL que realice el cálculo
de la normal automáticamente - glEnable(GL_NORMALIZE)
- glDisable(GL_NORMALIZE)
- No recomendable
28Colocar las luces
- Para colocar la luz se utiliza
- GLvoid glLightfv (GLenum light, GL_POSITION,
const GLfloat params) - La posición se indica con un array de valores
- Glfloat posición0.0, 0.0, 100.0, 1.0)
- Los rayos de la luz se asumen paralelos.
- Podemos mover una luz a gusto por una escena.
29Atenuación con la distancia (I)
- Es la atenuación que sufre la luz a medida que se
desplaza. - Para modelar esto contamos con tres parámetros a
definir - GL_CONSTANT_ATTENUATION. En la formula es "a".
- GL_LINEAR_ATTENUATION. En la formula es "b".
- GL_QUADRATIC_ATTENUATION. En la formula es c".
30Atenuación con la distancia (II)
- Para pasarle los valores a OpenGL se usa la
función de siempre - GLvoid glLightfv ( GL_LIGHT5, GL_CONSTANT_ATTENUAT
ION, 0.8 ) - GLvoid glLightfv ( GL_LIGHT5, GL_LINEAR_ATTENUATIO
N, 0.5 ) - GLvoid glLightfv ( GL_LIGHT5, GL_QUADRATIC_ATTENUA
TION, 0.1 )
31Área de cobertura(I)
- Hace referencia al área que abarca el haz de luz
que surge de la fuente. - Podemos definir los siguientes parámetros
- GL_SPOT_CUTOFF para definir un "cono" de luz.
- GL_SPOT_DIRECTION para restringir la dirección de
la luz emitida. - GL_SPOT_EXPONENT que regula la pérdida de
intensidad de la luz a medida que nos alejamos
del centro del cono. - Pasamos estos parámetros a OpenGL con la función
- glLightfv(GL_LIGTH0, GL_SPOT_DIRECTION,
dirección) - Glfloat dirección0.0, 0.0, 1.0
32Área de cobertura (II)
33Propiedades de los materiales (I)
- Para cada polígono de la escena hay que definir
un material de forma que su respuesta a la
incidencia de luz varíe según sea el caso. - Se definen cinco características para un
material - Reflexión difusa
- Reflexión especular
- Reflexión ambiental
- Coeficiente de brillo
- Coeficiente de emisión
34Propiedades de los materiales (II)
- Para indicar las características de los
materiales se utiliza - GLvoid glMaterialfv(GLenum face, GLenum pname,
const GLfloat params) - Los parámetros de la función son
Glenum face Glenum pname const GLfloat params
GL_FRONT GL_DIFFUSE ( R, G, B, 1.0 )
GL_BACK GL_AMBIENT ( R, G, B, 1.0 )
GL_FRONT_AN D_BACK GL_AMBIENT_AND_ DIFFUSE ( R, G, B, 1.0 )
GL_EMISSION ( R, G, B, 1.0 )
GL_SPECULAR ( R, G, B, 1.0 )
GL_SHININESS 0, 128
35Efectos de la iluminación (I)
- Se basan en la componente especular.
36 Efectos de la iluminación (II)
- Para conseguir los efectos de la luz especular
hay que realizar lo siguiente - Por un lado tenemos que activar la iluminación
especular recurriendo a las primitivas de OpenGL - Espec 1.0f,1.0f,1.0f,1.0f
- GlLight(GL_LIGHT0,GL_SPECULAR,Espec)
- Por otro lado tenemos que asignar al material las
propiedades adecuadas de brillo - GlMaterialfv(GL_FRONT,GL_SPECULAR,espec)
- GlMateriali(GL_FRONT,GL_SHININESS,128)
37Focos de luz (I)
- Tenemos dos tipos de luz
- Luz propia es proporcionada por un foco de luz
bien situado, del cual conocemos su ubicación, y
que emite sus rayos de luz de forma radial o
divergente. - Luz impropia emite sus rayos de luz desde una
ubicación muy distante, de forma que podemos
considerar sus rayos como paralelos entre si
38Focos de luz (II)
- Colocación de un foco de luz.
- Para colocar una fuente de luz en OpenGL
- glLightfv (GL_LIGHT0, GL_POSITION,LightPos)
- Si queremos le podemos dar el efecto foco
- Se configura el ángulo del cono de luz.
- glLight (GL_LIGHT0, GL_SPOT_CUTOFF, 60.0f)
- Configura el brillo del mismo.
- glLight (GL_LIGHT0, GL_SPOT_EXPONENT, 100.0f)
39Focos de luz (III)
- Para ver como los focos de luz interaccionan en
una escena hay que hablar de - iluminación local cómo se comporta cada
superficie al ser iluminada de forma individual. - iluminación global iluminación de un determinado
objeto en una escena, teniendo en cuenta los
rayos provenientes varias fuentes de luz y varios
objetos.
40Sombras (I)
- Es una de las partes de la iluminación que mayor
realismo aporta a nuestras escenas. - En general vamos a tener muy diversos tipos de
sombras, y diversas formas de aplicarlos, pero
sólo nos vamos a centrar en dos técnicas y su
aplicación mediante el buffer plantilla.
41Sombras (II)
- Sombras proyectadas.
- Es la técnica más sencilla, y consiste en
calcular una matriz de proyección sobre el plano
sobre el que queremos dibujar la sombra. - Una vez calculada esta matriz, si la
multiplicamos por la matriz del modelo, y
procedemos a dibujar nuestras figuras, las
estaremos dibujando sobre ese plano. - Por tanto una vez dibujada nuestra escena,
desactivamos la iluminación, proyectamos y
dibujamos nuestras figuras teniendo en cuenta que
hay que elegir un color adecuado porque van a ser
las sombras.
42Sombras (III)
- Sombras Volumétrica
- La técnica anterior es muy sencilla, pero solo
nos sirve para dibujar esas sobras proyectadas
sobre planos. - Si tenemos una composición de figuras en las que
unas proyectan sombras sobre otras, con la
técnica anterior no las podremos representar. - Para evitar esto vamos a utilizar una técnica que
consiste en calcular las sombras como
intersección de volúmenes.
43Sombras (IV)
- Sombras Volumétricas el buffer plantilla.
- El funcionamiento de este buffer es muy sencillo
- Cada píxel tiene asignado un valor en este
buffer. - Además, hay una operación de comparación definida
para el buffer. - Si el valor de plantilla de un píxel satisface la
condición de comparación este se dibuja, si no,
no se dibuja. - También tenemos una operación de modificación de
este valor, que se aplica sobre los píxel que
satisfacen la condición.
44Sombras (V)
- El algoritmo será como sigue
- Calculamos el volumen de la sombra, y lo
dibujamos de tal manera que modifique el valor de
todos los píxeles asignándoles un valor
reconocible para nosotros posteriormente como
sombreado. - Dibujamos nuestra escena.
- Desactivamos la luz, asignamos el color de
nuestra sombra activamos es test del buffer, de
tal manera que solo se dibuje en las regiones
donde el valor del buffer sea el que hemos
asignado a nuestra sombra. - Volvemos a dibujar nuestra escena y ya tendremos
las sombras.
45Conclusiones
- El capítulo de iluminación es uno de los más
interesantes de la programación gráfica, porque
es uno de los que más nos va a permitir dotar de
fotorrealismo a las escenas que estemos
modelando, pero exige un gran dominio del resto
de temas. - Existen una serie de técnicas que ayudan a
conseguir ese fotorrealismo.No hemos querido
profundizar mucho en ellas, ya que en la mayoría
de los casos nos saldríamos de lo que es el
carácter introductorio a lo que es OpenGl y a lo
que es la programación gráfica.