04 opengl color iluminacion
TRANSCRIPT
![Page 1: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/1.jpg)
Introducción a los gráficos 3D
OpenGL
Transparencias adaptadas y traducidas de
E. Angel and D. Shreiner: Interactive Computer Graphics 6E © Addison-Wesley 2012
![Page 2: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/2.jpg)
Objetivos
• Veamos cómo colorear nuestros modelos para que se perciban en tres dimensiones
• Veamos qué tipos de interacción existen entre la luz y nuestros materiales
• Construiremos un sistema de reflexión básico: El modelo de Phong.
• Veremos cómo utilizar OpenGl
2
![Page 3: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/3.jpg)
• Entendemos por modelo de iluminación el cálculo de la intensidad de cada punto de la escena.
• En el cálculo de la intensidad de un punto intervienen:
– El tipo e intensidad de la fuente de luz tipo e intensidad de la fuente de luz
– El material del objeto
– La orientación del objeto con respecto a la luz
• El modelo más utilizado es el modelo de Phong
Introducción
![Page 4: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/4.jpg)
Necesitamos sombreado (shading)
• Si dibujamos un objeto utilizando únicamente el color glColor. Veríamos algo parecido a:
• Pero a nosotros nos gustaría algo parecido a:
4
![Page 5: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/5.jpg)
Shading
• ¿Qué hace que un objeto real se vea de esta forma?
• La combinación de la luz con un material provoca que cada punto tenga un color diferente. Hablamos que tiene un determinado sombreado o en inglés “shade”.
• Tenemos que tener en cuenta:– Fuentes de luz– Las propiedades de los materiales– Situación de la cámara– Orientación de la superficie– Etc.
5
![Page 6: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/6.jpg)
Dispersión (Scattering)
• Cuando la luz llega a un punto A:– Parte de ella se dispersa
– Y otra parte se absorbe
• Parte de la luz dispersada, llega al punto B– Una parte se dispersa
– Y otra se absorbe
• Y volvemos a repetir
6
![Page 7: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/7.jpg)
¿El cielo tiene color?
7
![Page 8: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/8.jpg)
Dispersión de Rayleigh
8
![Page 9: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/9.jpg)
Ecuaciones de renderizado
• Este proceso infinito de dispersión y absorción se puede describir mediante ecuaciones que forman parte de las ecuaciones de renderizado– Son ecuaciones muy complejas y sin una solución
general– La técnica de “Ray tracing” es un caso especial para
superficies de gran reflexión
• Las ecuaciones de renderizado son globales e incluyen:– Sombras– Dispersiones múltiples de un objeto a otro.
9
![Page 10: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/10.jpg)
Efectos globales
10
Superficies translucidas
Sombras
Reflexiones múltiples
![Page 11: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/11.jpg)
Tratamiento global
11
![Page 12: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/12.jpg)
¿Renderizado local o global?
• Un sombreado correcto requiere un cálculo global que tenga en cuenta todos los objetos y todas las fuentes de luz.– Es incompatible con nuestro sistema de pipeline
que dibuja cada polígono de forma independiente
• Por fortuna, nos solemos conformar cuando la imagen simplemente “parece real”– Existen muchas técnicas para simular ese efecto
12
![Page 13: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/13.jpg)
Interacción luz-material
• La luz cuando choca contra un objeto se absorbe parcialmente, pero otra parte se dispersa (se refleja)
• La cantidad reflejada determina el color y brillo del objeto.– Una superficie se percibe de color rojo bajo un foco
blanco debido a que refleja la componente roja de la luz (frecuencias electromagnéticas en ese espectro)
– El resto de las frecuencias se absorben
• La luz se dispersa según las características de la superficie. Depende del pulido, suavidad, orientación, etc.
13
![Page 14: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/14.jpg)
Fuentes de luz
En general es complejo tratar con fuentes de luz reales. Tendríamos que tener en cuenta todos los puntos:
14
![Page 15: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/15.jpg)
Simplificamos las fuentes de luz
• La fuente es un punto– Se modela mediante una posición y un color– Si la fuente está muy distante asumimos que los rayos
son paralelos
• Spotlight– La luz procede de un punto único ideal
• La luz ambiente– En toda nuestra escena recibe la misma cantidad de
luz, con independencia de la situación de punto– Puede aglutinar la combinación de múltiples fuentes y
tipos de material
15
![Page 16: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/16.jpg)
Tipos de superficie
• Las superficies pulidas reflejan mayor cantidad de luz, creando el efecto de brillo o incluso espejo
• Una superficie rugosa refleja la luz en todas las direcciones.
16
Superficie pulida Superficie rugosa
![Page 17: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/17.jpg)
Sombreados
17
¿Dónde está la diferencia entre estas imágenes?
![Page 18: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/18.jpg)
¿Jugamos a buscar diferencias?
18
![Page 19: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/19.jpg)
Pensemos
• De las transparencias anteriores podemos deducir que:
– La forma del objeto influye en el dibujo,
– Aunque esté formado por triángulos, necesitamos “colorear” la forma,
– Necesitamos tener en cuenta algo que mida esa forma
– Una idea es tener en cuenta el vector normal a la superficie.
19
![Page 20: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/20.jpg)
Modelo de Phong
• Un modelo muy simple que se puede calcular rápidamente. • Ha sido uno de los primeros y sigue siendo muy utilizado.• Tiene tres componentes:
– Luz difusa (Diffuse)– Luz especular (Specular)– Luz ambiente (Ambient)
• Utiliza cuatro vectores
– Hacia la fuente– Hacia el observador– El vector normal– Reflexión perfecta
20
![Page 21: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/21.jpg)
Modelo de Phong
![Page 22: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/22.jpg)
Tipos de luz
Luz difusa
Luz ambienteLuz especular
![Page 23: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/23.jpg)
Tipos de luz
Luz Direccional Luz Focal Luz Puntual
![Page 24: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/24.jpg)
Reflexión ideal
• La normal se determina por la orientación local del polígono.
• El ángulo de incidencia es el ángulo de reflexión
• Los tres vectores son coplanares
24
r = 2 (l · n ) n - l
![Page 25: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/25.jpg)
Superficie ideal
• Refleja la luz de forma perfecta.
• La luz se dispersa idealmente en todas las direcciones.
• La cantidad de luz reflejada es proporcional a la componente vertical de la luz que incide. – La luz reflejada ~cos i
– cos i = l · n si los vectores están normalizados
– Introducimos tres componentes, kr, kg, kb, que indican la cantidad de color reflejada.
25
![Page 26: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/26.jpg)
Superficies especulares
• La mayoría de las superficies no son perfectamente difusas o perfectamente especulares.
• Las superficies pulidas producen una mayor reflexión en direcciones cercanas al ángulo ideal o de refleción perfecta.
26
Reflexión
especular
![Page 27: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/27.jpg)
Modelo de la luz reflejadaPhong propuso un modelo en el que la luz reflejada pierde intensidad según el ángulo formado entre el observador y la dirección de reflexión ideal.
27
Ir ~ ks I cos
Grado de brillo
Coeficiente
de absorción
Intensidad originalIntensidad
reflejada
![Page 28: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/28.jpg)
El coeficiente de brillo(Shininess Coefficient)
• Valores de entre 100 y 200 se corresponden con metales
• Valores de entre 5 y 10 generan aspectos similares al plástico.
28
cos
90-90
![Page 29: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/29.jpg)
29
Luz ambiente
• La luz ambiente es el resultado de aplicar múltiples interacciones entre numerosas fuentes de luz y los objetos del entorno.
• La intensidad y el color dependen tanto del color de la luz como del material del que está hecho el objeto.
• Añade ka Ia a la fórmula
Coef Intensidad de la luz ambiental
![Page 30: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/30.jpg)
30
Distancia
• La luz pierde intensidad conforme viaja en el espacio (inversamente al cuadrado de la distancia)
• Podríamos añadir el factor 1/(ad + bd +cd2)
![Page 31: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/31.jpg)
31
Fuentes de luz
• En el modelo de Phong, sumamos la influencia de cada una de las fuentes de luz
• Cada fuente de luz tiene términos independientes para los tres términos: difusión, especular y ambiente.
• Separamos los componentes RGB: red, green y blue
• Por eso, definimos 9 coeficientes para cada foco de luz– Idr, Idg, Idb, Isr, Isg, Isb, Iar, Iag, Iab
![Page 32: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/32.jpg)
32
Las propiedades del material
• El material tiene propiedades que configuran al modelo
– Nueve parámetros de absorción
• kdr, kdg, kdb, ksr, ksg, ksb, kar, kag, kab
– Un coeficiente de brillo
![Page 33: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/33.jpg)
33
Sumando todo
Para cada fuente de luz y para cada componente de corlor, el modelo Phong puede escribirse según:
I =kd Id l · n + ks Is (v · r )+ ka Ia
Para cada componente decolor, añadimos la influencia de cada fuente de luz
![Page 34: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/34.jpg)
34
Modelo de Phong Modificado
• El término especular de Phong resulta complejo de calcular (requiere el computo de un nuevo vector de reflección y un vector de visión por cada vértice)
• Blinn propone una aproximación más eficiente
![Page 35: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/35.jpg)
35
The Halfway Vector
• h es un vector normaliza a medio camino entre l y v
h = ( l + v )/ | l + v |
![Page 36: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/36.jpg)
36
Utilizando el “halfway vector”
• reemplazando (v · r )por (n · h )
• se elige para que represente el brillo
• EL modelo resultante se conoce como modificado de Phong o de Blinn
– Se incluye en OpenGL
![Page 37: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/37.jpg)
37
Ejemplo
![Page 38: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/38.jpg)
38
Cálculo de vectores
• l y v son dados por la aplicación
• Podemos calcular r dados l y n
• El problema es determinar n
• En general depende del modelo a representar
• OpenGL nos deja a nosotros determinar la normal
![Page 39: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/39.jpg)
La normal en un vértice
Las normales nos permiten aplicar técnicas de iluminación suaves
No tienen que ser la normal de la cara
Se utilizan únicamente para la iluminación
Es una forma (mejor) de aproximar la superficie real.
![Page 40: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/40.jpg)
Normales
Las normales:
Se introducen con el modelo
Se calculan usando principios básicos
Se aproximan interpolando las normales de los vértices
![Page 41: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/41.jpg)
41
La importancia de normalizar
• El término Coseno supone que los vectores están normalizado
• Utilizando vectores normalizados simplifica los cálculos
• Tenemos funciones que nos permiten normalizar nuestros vectores
![Page 42: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/42.jpg)
42
La normal de un triángulo
p0
p
1
p
2
n
plano n ·(p - p0 ) = 0
n = (p2 - p0 ) ×(p1 - p0 )
Normalizado n n/ |n|
p
![Page 43: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/43.jpg)
43
Recordando el concepto de Normal
• Ecuación de un plano: ax+by+cz+d = 0
• Un plano se determina por tres puntos p0, p2, p3 o por un punto n y su normal p0
• La normal se puede obtener
n = (p2-p0) × (p1-p0)
![Page 44: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/44.jpg)
44
La normal en una esfera
• Dada una función f(x,y.z)=0
• La normal viene dada por su gradiente
• En la espera f(p)=p·p-1
• n = [∂f/∂x, ∂f/∂y, ∂f/∂z]T=p
![Page 45: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/45.jpg)
45
Forma paramétrica
• Para la esfera
• El plano tangente viene dado por
• Y la normal por el producto
x=x(u,v)=cos u sin v
y=y(u,v)=cos u cos v
z= z(u,v)=sin u
∂p/∂u = [∂x/∂u, ∂y/∂u, ∂z/∂u]T
∂p/∂v = [∂x/∂v, ∂y/∂v, ∂z/∂v]T
n = ∂p/∂u × ∂p/∂v
![Page 46: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/46.jpg)
46
Cómo funciona OpenGL
• Ahora veremos el funcionamiento de OpenGL
– Cómo elegir entre sombreado por vértice o por fragmento.
• Modelos de sombreado
– Plano (Flat)
– Suave (Smooth)
– Gouraud
![Page 47: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/47.jpg)
Modelos de sombreado
Flat Shading
• Se calcula una única vez para todo el polígono.
Gouraud Shading
• Se calcula para cada vértice y despues interpolamos
Phong Shading
• Interpolamos la normal y para cada pixel se calcula la iluminación
![Page 48: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/48.jpg)
Sombreado de Gouraud
Es el más común de los métodosRealiza la iluminación de Phong en los vértices
Realiza una interpolación linear
A lo largo de los vértices
A lo largo de las líneas C1
C2
C3
c1 + t1(c2-c1)
c1 + t2(c3-c1)c1 + t1(c2-c1) + t3(c1 + t2(c3-c1)- c1 + t1(c2-c1))
![Page 49: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/49.jpg)
Sombreado de Gouraud
Ventajas e inconvenientes:
• Es rápido y sencillo en calcular
• Es un modelo inexacto y puede generar efectos extraños
![Page 50: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/50.jpg)
Sombreado de Phong
• Utiliza el modelo de iluminación de Phong (no confundir uno con otro) pero realiza una interpolación lineal entre las normales de los vértices.
• Aplica el modelo de iluminación de Phong en cada pixel.
Utiliza los mismos parámetros que el modelo de Gouraud
En general genera resultados más
Suaves pero es más lento.
![Page 51: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/51.jpg)
Sombreado de Phong
Interpola las normales (en lugar del color)
Calcula la iluminación en cada pixel
N1
N2
N3
N4
lights
i
n
isidiambientatotal
shiny
RVkLNkIIkI#
1
ˆˆˆˆ
Recuerda que las normales
se utilizan para los
términos de luz difusa y
especular.
![Page 52: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/52.jpg)
52
Sombreado en OpenGL
• Necesitamos especificar
– Normales
– Propiedades del material
– Luces
![Page 53: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/53.jpg)
53
Definiendo un foco de luz
• Por cada punto de luz, podemos definir el RGBA de los componentes difuso, especular y ambiente
• Además damos la posición.
vec4 diffuse0 =vec4(1.0, 0.0, 0.0, 1.0);
vec4 ambient0 = vec4(1.0, 0.0, 0.0, 1.0);
vec4 specular0 = vec4(1.0, 0.0, 0.0, 1.0);
vec4 light0_pos =vec4(1.0, 2.0, 3,0, 1.0);
![Page 54: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/54.jpg)
54
Spotlights
• Funcionan parecido a los puntos de luz pero damos:
– Dirección
– Umbral de corte (Cutoff)
– Atenuación Proporcional a cos
![Page 55: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/55.jpg)
55
Luz ambiente
• Depende del color de la luz
– Una luz roja tiñe de color rojo todo lo que ilumina
• Suele sernos útil al principio para probar
![Page 56: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/56.jpg)
56
Propiedades del material
• Tienen que estar conforme con el modelo de iluminación
• La componente w nos puede indicar el grado de transparencia (opacidad)
vec4 ambient = vec4(0.2, 0.2, 0.2, 1.0);
vec4 diffuse = vec4(1.0, 0.8, 0.0, 1.0);
vec4 specular = vec4(1.0, 1.0, 1.0, 1.0);
GLfloat shine = 100.0
![Page 57: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/57.jpg)
Fuentes de luz
GLfloat light_ambient[]={0.0, 0.0, 0.0, 1.0};
GLfloat light_diffuse[]={1.0, 1.0, 1.0, 1.0};
GLfloat light_specular[]={1.0, 1.0, 1.0, 1.0};
GLfloat light_position[]={1.0, 1.0, 1.0, 0.0};
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
![Page 58: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/58.jpg)
“spotlight” blanca atenuada
GLfloat light1_ambient[ ]={0.2, 0.2, 0.2, 1.0};
GLfloat light1_diffuse[ ]={1.0, 1.0, 1.0, 1.0};
GLfloat light1_specular[ ]={1.0, 1.0, 1.0, 1.0};
GLfloat light1_position[ ]={-2.0, 2.0, 1.0, 1.0};
GLfloat spot_direction[ ]={-1.0, -1.0, 0.0};
glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);
glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5);
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2);
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0);
glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direction);
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);
glEnable(GL_LIGHT1);
![Page 59: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/59.jpg)
Jugando
![Page 60: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/60.jpg)
Jugando
![Page 61: 04 OpenGL Color Iluminacion](https://reader035.vdocuments.pub/reader035/viewer/2022081800/55725c21497959da6be8a2d2/html5/thumbnails/61.jpg)
Jugando