OPENGL

Color, Iluminación y Materiales (Color, Lighting and Materials)

Eduardo Rivera (eriveraa@gmail.com) http://eriveraa.wordpress.com

COLOR

El fin de todos los cálculos (tomando en cuenta comandos, estado, parámetros) de OpenGL es determinar el color final de cada pixel que se dibuja en la pantalla.

Eduardo Rivera (eriveraa@gmail.com) http://eriveraa.wordpress.com

PERCEPCIÓN DEL COLOR
 

La luz está compuesta de fotones (photons). Los fotones son pequeñas partículas de luz  Tienen su propio camino (onda)  Vibran en su propia frecuencia  Tiene su propia longitud de onda (wavelength)  Tiene su propia posición y dirección El espectro visible de fotones  De 390 nanómetros (nm) que es el violeta  Hasta 720 nm que es el rojo  Forman un arcoiris (violeta, indigo, azul, verde, amarillo, naranja y rojo)

Eduardo Rivera (eriveraa@gmail.com) http://eriveraa.wordpress.com

com) http://eriveraa.PERCEPCIÓN DEL COLOR Nuestros ojos ven una mixtura de fotones de diferentes frecuencias.wordpress.  El ojo humano percibe el color cuando las celdas de la retina (cone cells) son impactadas por los fotones!!  Hay 3 tipos de celdas que responden a 3 diferentes longitudes de onda:  Una celda responde a la luz ROJA  Una celda responde a la luz VERDE  Una celda responde a la luz AZUL  Eduardo Rivera (eriveraa@gmail.  La fuentes de luz reales se caracterizan por la distribución de las frecuencias de los fotones que emiten.com .

PERCEPCIÓN DEL COLOR  Los fotones que impactan la retina.  De esta manera se generan un cantidad inmensa de colores (además de los colores del espectro visible).wordpress.com .com) http://eriveraa. generan excitación en ella La mixtura excita las 3 celdas en diferentes magnitudes generando diferentes colores.  Eduardo Rivera (eriveraa@gmail.

com) http://eriveraa.COLOR GENERADO POR COMPUTADOR Los monitores emiten fotones (disparan rayos de fotones). verde y azul.wordpress.  Eduardo Rivera (eriveraa@gmail.  El monitor emula los colores visibles iluminando los píxeles  Usa una combinación de rojo.  Los monitores emiten 3 tipos de luz (rojo. verde y azul).  Excita las celdas de la retina de una manera que perciban el color.com .

com .  Solo podía mostrar 4 de 16 colores en la pantalla (4 bits). tarjetas EGA (enhanced graphics adapter) Resolución de 640 x 350 píxeles.HISTORIA   1982.  Comenzaron a existir los juegos en 3D y aplicaciones gráficas interesantes.  256 colores en resolución de 320 x 200 píxeles (8 bits). 1983.  Podía mostrar 16 colores en pantalla   1987. tarjetas VGA (video graphics array) 16 colores en resolución de 640 x 480 píxeles.wordpress. tarjetas Hercules: cada pixel solo podía tener 2 colores (monocromáticos) o 1 bit. tarjetas CGA (computer graphics adapter) Resolución de 320 x 200 píxeles.com) http://eriveraa.  Eduardo Rivera (eriveraa@gmail.   1984.  Se acercaba a lo foto-realista.

 256 colores.wordpress.com) http://eriveraa. luego 32000 y luego 65000.  Tarjetas de video externas: Nvidia.  Resoluciones mayores a 1024 x 768 píxeles.com .   Monitores actuales 16 millones de colores (32 bits). ATI. tarjetas SVGA (Super-VGA) Resoluciones de 800 x 600 y luego 1024 x 768.  Eduardo Rivera (eriveraa@gmail.HISTORIA  1988.

com) http://eriveraa. como una combinación RGB y Alpha para cada color de un píxel. y será el que utilicemos.com .  Los colores pueden ser expresados:  RGBA Mode.wordpress. un número identifica cada color de un píxel. verde y azul (RGB).  Los monitores actuales soportan cualquier combinación RGB.  Color-index Mode. Eduardo Rivera (eriveraa@gmail.COLOR EN OPENGL OpenGL especifica un color por sus intensidades de rojo.   El mas utilizado es el RGBA Mode.

COLOR EN OPENGL  RGB Mode Eduardo Rivera (eriveraa@gmail.com .wordpress.com) http://eriveraa.

com .wordpress.COLOR EN OPENGL  Color-index Mode: Eduardo Rivera (eriveraa@gmail.com) http://eriveraa.

G y B van de 0 (cero).1) es el color blanco. Eduardo Rivera (eriveraa@gmail. máxima intensidad o mayor brillo.  En algunos comandos OpenGL (glColor3ub.  RGB (0.  RGB (1.1.wordpress.com .0.com) http://eriveraa. glColor4ub) se puede utiliza el rango de 0 a 255.0) es el color negro (ausencia de color).COLOR EN OPENGL  Los valores de R. mínima intensidad  Hasta 1.  Utiliza 8 bits para cada color       8 bits para el rojo 8 bits para el verde 8 bits para azul Total = 24 bits Adicionalmente se utilizan 8 bits para el valor Alpha (transparencia).

wordpress. (RGB colorspace) Eduardo Rivera (eriveraa@gmail.com .com) http://eriveraa.COLOR EN OPENGL  El espacio de colores RGB.

alpha). Puede ser:         b (byte) d (double) f (float) i (integer) s (short) ub (unsigned byte) ui (unsigned int) us (unsigned short) Eduardo Rivera (eriveraa@gmail.COLOR EN OPENGL  Establecer el color en OpenGL: void glColor<x><t>(red. <t>: tipo de dato.wordpress.com) http://eriveraa.   <x> : número de argumentos. Pueden ser 3 o 4 (para el componente Alpha). green. blue.com .

Si especificamos el color de cada vértice de una línea.COLOR EN OPENGL  Shading (Sombreado)      La función glColor establece el color utilizado para los vértices dibujados (dependiendo del comando utilizado).com .com) http://eriveraa. Cualquier par de puntos dentro del espacio de colores RGB puede ser conectado mediante una línea. OpenGL hace el trabajo de la transición de colores por nosotros! Eduardo Rivera (eriveraa@gmail.wordpress. cual es el color del punto medio? Shading nos permite realizar una transición suave entre un color y otro.

wordpress.com) http://eriveraa.com .COLOR EN OPENGL  Como se aplica el sombreado en una línea: Eduardo Rivera (eriveraa@gmail.

com .  Flat shading (plano): no hay transición entre colores.COLOR EN OPENGL  Hay 2 tipos de modelo de sombreado (Shading Model) Smooth shading (suave): transición suave entre colores.com) http://eriveraa.wordpress.   Se aplica mediante la función glShadeModel() glShadeModel(GL_SMOOTH) ó  glShadeModel(GL_FLAT)  Eduardo Rivera (eriveraa@gmail.

-70.0.0f).COLOR EN OPENGL  Ejemplo de sombreado // Enable smooth shading glShadeModel(GL_SMOOTH). glVertex3f(-200.wordpress.0f).(GLubyte)0.0f. http://eriveraa.(GLubyte)0).(GLubyte)255).com .(GLubyte)0. // Blue on the left bottom corner glColor3ub((GLubyte)0. // Green on the right bottom corner glColor3ub((GLubyte)0.(GLubyte)0).com) glEnd().0f.200.0f. 0. // Draw the triangle glBegin(GL_TRIANGLES).0f. glVertex3f(200.(GLubyte)255.0f). glVertex3f(0. -70.0f.0. Eduardo Rivera (eriveraa@gmail. // Red Apex glColor3ub((GLubyte)255.0f.

COLOR EN OPENGL  Ejemplo de sombreado Eduardo Rivera (eriveraa@gmail.com .wordpress.com) http://eriveraa.

0f. glVertex3f(-10.0f.COLOR EN OPENGL  Otro ejemplo: glBegin(GL_POLYGON).0f.0f). glVertex3f(10.0f.1. glVertex3f(-10.1.wordpress.0).-5.0f. glVertex3f(0.0f. glColor3f(0. glColor3f(0.1.0.-10.0).-5.0f). glColor3f(0.0f.5. glColor3f(1.0.0).0.0f. glVertex3f(10.0f.0).0.0.15.com) http://eriveraa.0f. Eduardo Rivera (eriveraa@gmail. glEnd().1.0f).com . glColor3f(1.0f).0).0.0f).

com .  El color percibido también depende de cómo los objetos reflejan o absorben la luz.com) http://eriveraa.  Los colores que percibimos dependen del color del objeto y de la iluminación aplicada.ILUMINACIÓN  El ojo humano percibe los colores mediante los fotones que llegan a la retina.wordpress. Eduardo Rivera (eriveraa@gmail.

Eduardo Rivera (eriveraa@gmail.com El color del océano depende de la iluminación del día.com) http://eriveraa.  Inclusive los objetos no se perciben tridimensionales hasta que son iluminados !!  .ILUMINACIÓN  Ejemplo:  Es importante comprender la interacción entre los objetos y la luz (iluminación que reciben).wordpress. Es decir se ve diferente si es un día soleado y despejado o si es un día oscuro y nublado.  OpenGL aproxima el mundo real en términos de iluminación (no es exacto).

wordpress.ILUMINACIÓN  Ambiente sin iluminación Eduardo Rivera (eriveraa@gmail.com) http://eriveraa.com .

com .com) http://eriveraa.wordpress.ILUMINACIÓN  Ambiente con iluminación Eduardo Rivera (eriveraa@gmail.

wordpress.   Iluminación OpenGL El color de una fuente de luz está caracterizado por las cantidades RGB que ella emite.)  Las superficies de los objetos pueden absorber y/o reflejar la luz.com . etc.com) http://eriveraa. lámparas.ILUMINACIÓN  Iluminación Real Existen múltiples fuentes que emiten luz (focos.  Eduardo Rivera (eriveraa@gmail. así como la luz reflejada por los objetos. sol.  Nosotros percibimos la luz emitida por las fuentes de luz.  El material de la superficie (del objeto) está caracterizado por los porcentajes RGB que refleja de la luz aplicada sobre el mismo.

 Algunas luces son dispersadas alrededor de la escena.com) http://eriveraa.wordpress.  Algunas luces vienen de una posición específica y con una dirección determinada. las cuales pueden ser encendidas/apagadas.com . las fuentes de luz solo tienen efecto si es que existen superficies que las absorban y/o las reflejen!  Eduardo Rivera (eriveraa@gmail.ILUMINACIÓN  Iluminación OpenGL La luz puede venir de diferentes fuentes.  En OpenGL.

 Eduardo Rivera (eriveraa@gmail.  dispersar la luz que recibe.  Un material puede…  emitir su propia luz.wordpress.com .  Y puede reflejar un porcentaje de la luz recibida en una dirección particular.ILUMINACIÓN  Iluminación OpenGL Se asume que las superficies están compuestas de un material con sus propiedades particulares.com) http://eriveraa.

wordpress.ILUMINACIÓN  Iluminación OpenGL La luz real es compleja de modelar.com .com) http://eriveraa.  El modelo de iluminación OpenGL está dividido en:  Iluminación AMBIENTAL (Ambient)  Iluminación DIFUSA (Diffuse)  Iluminación ESPECULAR (Specular)  Iluminación EMISIVA (Emissive)  Eduardo Rivera (eriveraa@gmail. sin embargo OpenGL sigue un modelo simplificado.

com .wordpress. Su dirección es imposible de determinar. Los objetos son siempre visibles y coloreados (o sombreados) independientes de su rotación o ángulo de visualización. Se puede interpretar como un “factor de brillo global” aplicado por una fuente de luz.com) http://eriveraa.ILUMINACIÓN  Iluminación Ambiental (Ambient)       Es luz que se ha dispersado totalmente en el ambiente. La luz ambiental ilumina los objetos en todas las superficies y en todas las direcciones. Parece que viniera en todas las direcciones. Eduardo Rivera (eriveraa@gmail.

wordpress. 0. 0.com) http://eriveraa.1 }.1. globala ). Eduardo Rivera (eriveraa@gmail.ILUMINACIÓN  Iluminación Ambiental (Ambient) GLfloat globala[] = { 0. glLightModelfv( GL_LIGHT_MODEL_AMBIENT.com .1.

Al impactar la superficie de un objeto.ILUMINACIÓN  Iluminación Difusa(Diffuse)        Es la luz que viene en una determinada dirección desde un punto muy lejano (El Sol) Los rayos de luz son considerados paralelos. se dispersa por igual en todas las direcciones.com . Eduardo Rivera (eriveraa@gmail.com) http://eriveraa. Se refleja con una intensidad proporcional al ángulo entre el rayo de luz y la superficie (utiliza la normal de la superficie) No es afectada por la posición del observador. Es llamada comúnmente “iluminación suave”. la luz difusa es la que genera el sombreado (cambio de color) en la superficie alumbrada. En esencia.wordpress.

light0_pos ).0. glLightfv( GL_LIGHT0.0.0.wordpress. GL_POSITION.0) or a directional source (0. 2.0 }.com) http://eriveraa.com NOTE: 4th component of vector indicates either a positional source (1.ILUMINACIÓN  Iluminación Difusa(Diffuse) GLfloat light0_pos[] = { 1. Eduardo Rivera (eriveraa@gmail.0) . 3. 0.

Está muy relacionada con el brillo de la superficie. desde el cual es emitido en todas las direcciones. Es llamada comúnmente “iluminación fuerte”.ILUMINACIÓN  Iluminación Especular (Specular)         Es parecida a la difusa pero es altamente direccional. Tiende a generar una mancha brillosa (bright spot) en la superficie que alumbra. Tiene como origen un punto en el espacio. Se refleja en una dirección determinada. Es afectada por la posición de la luz y la posición del observador.wordpress. Eduardo Rivera (eriveraa@gmail.com . Interactúa profundamente con la superficie impactada.com) http://eriveraa.

Eduardo Rivera (eriveraa@gmail. GL_POSITION.ILUMINACIÓN  Iluminación Especular (Specular) GLfloat light0_pos[] = { 1. http://eriveraa. 3.0 }.com) glLightfv( GL_LIGHT0. 1.0.com .0.wordpress. 2.0. light0_pos ).

 Los objetos tienen un color emisivo que simula luz que brota de ellos. no es afectado por ninguna fuente de luz.wordpress. Eduardo Rivera (eriveraa@gmail.com . tampoco introduce una luz adicional al ambiente.com) http://eriveraa.  El color emisivo…     simplemente agrega intensidad al objeto.ILUMINACIÓN  Iluminación Emisiva (Emissive) Es una manera de emular los objetos que “emiten” luz. es decir NO alumbra ni afecta a los objetos de los alrededores.

wordpress.  Ejemplo de un rayo láser rojo (mayormente especular):  Eduardo Rivera (eriveraa@gmail.  Cada uno de los tipos de iluminación tiene un color RGB determinado.ILUMINACIÓN  Uniendo todo! Una fuente de luz está compuesta por los 3 tipos de iluminación (ambiental.com) http://eriveraa.com . difusa y especular) en diferentes magnitudes.

com/tutorials/gl/gl8.com/general/superfices-e-iluminacion-enopengl/ http://pgrafica.shtml http://nehe.gamedev.wordpress.REFERENCIAS      OpenGL Programming Guide : Capítulos 4.net/  Tutoriales Programación Gráfica:   Tutoriales Flipcode:   NeHe Productions:  Eduardo Rivera (eriveraa@gmail.htm Tutoriales BlackByte:  http://black-byte.com) http://eriveraa.com/archives/Light_Mapping_Theory_and _Implementation.5 OpenGL SuperBible: Capítulos 5.com/Contenido.html http://www.falloutsoftware.6 Beginning OpenGL Game Programming: Capítulo 5 Tutoriales Fallout Software:  http://www.webideas4all.com .flipcode.

Sign up to vote on this title
UsefulNot useful