Descarga la aplicación para disfrutar aún más
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
Compartir