Logo Studenta

Semana7-Luces

¡Este material tiene más páginas!

Vista previa del material en texto

UNIDAD I
COMPUTACIÓN GRÁFICA I
▪ Luces, Texturas
Semana 7
Al término de la sesión, el estudiante aplica el concepto de luces-texturas para desarrollar
una aplicación gráfica y complementar el tema de transformaciones OpenGL
Logro de 
Aprendizaje
¿Luces y Texturas?
Responder en el foro
Modelo de Iluminación
En la programación de gráficos 3D existen
distintos modelos de iluminación que
intentan simular cómo se comporta la luz
al iluminar la superficie de un objeto
tridimensional, uno de esto es el modelo
de iluminación Phong, lo podemos aplicar
por vértice (Gouraud shading) o por pixel
(Phong shading).
Modelo de Iluminación de Phong
❑ Un modelo de interacción entre fuentes de luz y objetos se denomina modelo de
iluminación (o modelo de reflexión o modelo de iluminación).
❑ En 1975, el informático vietnamita Phong Bui Tuong inventó un modelo de iluminación particular, que
actualmente es el más utilizado en la práctica.
OpenGL implementa el modelo de Phong
Fundamentos de Phong
En el modelo de Phong, la luz reflejada en un objeto O es la suma de tres componentes en
función de las propiedades de reflectancia de su superficie.
Ambiental
Difusa
Especular
Estos Componentes son (fuentes de luz):
Fundamentos de Phong
Ecuación para el cálculo de la iluminación en un punto
Esta fórmula utiliza los vectores: L, N, R, V, y las constantes: Ka, Kd, Ks, que se
definen como:
L: Vector del punto a la luz.
N: Normal en el punto*.
R: Vector reflejado (L reflejado sobre N).
V: Vector del punto al centro de la cámara.
Ka: Factor de luz ambiente del objeto.
Kd: Factor de luz difusa del objeto.
Ks: Factor de luz especular del objeto.
n: Coeficiente de brillo.
*Se llama normal a una recta perpendicular a otra, en especial a una tangente por su punto de tangencia, la 
normal indica la orientación de la superficie.
Cálculo de las 
normales:
Fundamentos de Phong
Ambiental
Modelo de reflectancia ambiental de O, es el reflejo de la luz
de fondo que lo golpea desde múltiples direcciones.
La luz ambiental es aquella que proviene de una
fuente que ha sido tan disipada por el entorno que
es imposible determinar su dirección.
El componente ambiental modela esa parte de la
luz que suministra iluminación constante a lo largo
de una escena.
La luz que llega rebotada de las paredes, los muebles, etc.,
se refleja en todas las direcciones simultáneamente.
Fundamentos de Phong
Difusa
La luz difusa procede de una dirección de forma que es
más brillante si da de lleno en la superficie.
Una vez que golpea la superficie desde la superficie de O
se disipa en todas las direcciones, así que aparece
igualmente brillante, no importando donde está
localizado el observador.
La luz que llega directamente desde la fuente de luz
rebota en todas direcciones, combinada con la luz
ambiental definen el color del objeto
Fundamentos de Phong
Especular
La luz especular procede de una dirección particular hacia O y
tiende a rebotar en una dirección determinada.
El metal o plástico brillante tienen alto componente especular,
mientras la tiza o una alfombra carecen de este componente.
Podemos asimilar la luz especular a la luz que produce brillos.
Especificación de Valores de Luz y Material OpenGl
Para cada una de las N fuentes de luz especificadas Li, 0 ≤ i ≤ N -1, las intensidades RGB de cada una de
sus componentes ambiente, difuso y especular se pueden establecer entre 0 y 1, para 8 valores en total
por fuente de luz .
OpenGL permite especificar varias fuentes de luz; el número exacto depende de la implementación.
Estos se escriben, típicamente, en una matriz de propiedades de luz 3 × 3:
Propiedades de Luz
Las propiedades de las fuentes de luz se establecen mediante declaraciones de la forma:
Donde:
Luz: Especifica una luz. La cantidad de luces depende de la implementación, pero se admiten al menos
ocho luces. Se identifican por nombres simbólicos de la forma GL_LIGHTi, donde i varía de 0 al valor al 7.
Parameter: Especifica un parámetro de fuente de luz de un solo valor para la luz (GL_AMBIENT,
GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT_CUTOFF, GL_SPOT_DIRECTION, GL_SPOT_EXPONENT,
GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION y GL_QUADRATIC_ATTENUATION).
Value: Especifica el valor en el que se establecerá el parámetro Parameter de la luz de la fuente de luz.
Especificación de Valores de Luz y Material OpenGl
Tenemos que habilitar las fuentes de luz usando la función glEnable (). Por ejemplo, el siguiente código
habilita GL_LIGHT0 : glEnable (GL_LIGHT0);
La primera decisión, y la más básica, es
si habilitar o no la iluminación general
de la aplicación desde el main():
glEnable ( GL_LIGHTING ) ;
Fuente de Luz Ambiental
Esta fuente de luz tiene la misma intensidad en toda la escena. Por lo tanto, matemáticamente, la
intensidad de la luz ambiental es un valor constante, por lo tanto, los objetos se ven opacos en la
escena debido a la fuente de luz ambiental..
Propiedades de Luz
Especificación de Valores de Luz y Material
Por ejemplo:
float ambient_light0 [] = {1.0, 1.0, 1.0, 0.0};
glLightfv (GL_LIGHT0, GL_AMBIENT, ambient_light0);
Los primeros tres elementos de la matriz ambient_light0, se acuerdo a
los valores del ejemplo, especifican una luz BLANCA de baja intensidad
(podemos especificar valores entre 0 y 255, siendo 0 la menos intensa y
255 la más intensa). El cuarto elemento significa el valor de MEZCLA y
se usa cuando están involucradas múltiples interacciones de luz.
glLightfv() se utiliza para especificar los tipos de fuentes de luz. El
código anterior especifica la fuente de luz ambiental para GL_LIGHT0 .
Fuente de Luz Difusa
Se trata como una fuente de luz puntual que emite luz por igual en todas las direcciones. La
intensidad de una fuente de luz puntual es inversamente proporcional al cuadrado de la distancia
entre la fuente y la superficie . Los objetos tienden a tener un alto contraste debido a las luces
difusas. Además, los objetos tienden a verse más oscuros o más brillantes. Por lo tanto, para
compensar el efecto de alto contraste, generalmente agregamos luz ambiental también a una
escena.
Propiedades de Luz
Especificación de Valores de Luz y Material
float diffuse_light0 [] = {50.0, 0.0, 0.0, 0.0};
glLightfv (GL_LIGHT0, GL_DIFFUSE, diffuse_light0);
Fuente de Luz especular
Es un foco y se caracteriza por un rango estrecho de ángulos a través de los cuales se emite la luz.
Las luces especulares especifican cómo brilla el objeto cuando la luz incide sobre el objeto. Pero
para obtener efectos dramáticos, también debemos especificar las propiedades del material para el
objeto de interés.
Propiedades de Luz
Especificación de Valores de Luz y Material
float specular_light0 [] = {50.0, 0.0, 0.0, 0.0};
glLightfv (GL_LIGHT0, GL_SPECULAR, specular_light0);
Colocación de fuentes de luz en OpenGL:
Las fuentes de luz en OpenGL se pueden colocar a lo largo de los ejes X, Y y Z respectivamente.
La posición de la fuente de luz se especifica con una matriz de cuatro elementos.
Los primeros tres elementos especifican la posición de la fuente de luz.
(1, 0, 0) coloca la fuente de luz a lo largo del eje X.
(0, 1, 0) posiciona la fuente de luz a lo largo del eje Y.
(0, 0, 1) coloca la fuente de luz a lo largo del eje Z.
El cuarto elemento especifica si una fuente de luz está infinitamente distante del objeto o no. El valor 0
significa una fuente de luz distante INFINITA y el valor 1 significa una fuente de luz distante FINITA .
Por ejemplo: El siguiente código coloca la fuente de luz distante infinita RED DIFFUSE a lo largo del eje X
float light0_position [] = {1, 0, 0, 0};
float light0_diffuse [] = {50, 0, 0, 0};
glLightfv (GL_LIGHT0, GL_POSITION, light0_position);
glLightfv (GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
Propiedades de Luz
Especificación de Valores de Luz y Material
Propiedades de Material
Las propiedades del material en un vértice se establecen mediante declaraciones de la forma:Donde:
Especificación de Valores de Luz y Material
En el mundo real, los objetos están más o menos iluminados dependiendo de su posición y
orientación respecto a las distintas fuentes de luz que inciden sobre ellos, así como del tipo de material de
que están hechos. Por tanto, si queremos mejorar el realismo, tendremos que modelizar este fenómeno.
Face: Especifica qué cara o caras se están actualizando. Debe ser uno de GL_FRONT, GL_BACK o
GL_FRONT_AND_BACK.
Parameter: Especifica el parámetro de material de valor único de la cara o caras que se están actualizando. 
Debe ser GL_SHININESS (reflexión especular según una versión simplificada del modelo de Phong).
Value: Especifica el valor en el que se establecerá el parámetro GL_SHININESS (brillo).
Propiedades de Material
El siguiente código especifica un valor de Reflexión ambiental de 0.25 para el material: :
float material_ambient[] = {0.25, 0.25, 0.25, 1.0};
glMaterialfv(GL_FRONT, GL_AMBIENT, material_ambient);
Especificación de Valores de Luz y Material
GL_SHININESS: es un valor entero único que especifica el exponente especular RGBA del material.
Los valores enteros se asignan directamente. Solo se aceptan valores en el rango [0, 127]. El
exponente especular predeterminado para los materiales orientados hacia el frente y hacia atrás es 0.
glMaterialf(GL_FRONT, GL_SHININESS, shininess);
float shininess = 50; 
PRACTIQUEMOS
Crear un teapot, aplica luces para que se visualice como se observa en la imagen, utiliza
los elementos de luces ambiental, difuza y especular.
PRACTIQUEMOS
Usando los parámetros de material para obtener el siguiente brillo al teapot:
❑ ¿Qué aprendí?
❑¿Qué necesito reforzar?
¿Preguntas o dudas?
Referencias
Benstead, Luke. (2012) Programación de videojuegos con OpenGL. 
https://upn.vitalsource.com/books/9786074817621.
Bosque, Jose. (2007). Introducción a OpenGL. 
https://elibro-net.eu1.proxy.openathens.net/es/ereader/upnorte/35680?page=2
Donald, Hearn. (2006). Gráficos por computadora con OpenGL: Pearson Educación
https://upn.vitalsource.com/books/9786074817621
https://elibro-net.eu1.proxy.openathens.net/es/ereader/upnorte/35680?page=2

Continuar navegando