TUTORIAL #4: Iluminación y texturas. Iluminación

Documentos relacionados
Iluminación. Gráfica. Informática. David Vallejo Fernández Carlos González Morcillo

Tema 3. Color, material e iluminación

El color es una longitud de onda de luz, visible para el ojo humano

EJERCICIO 26 DE EXCEL

APLICACIÓN DXF_TO_CTE PARA LA CONVERSIÓN DE ARCHIVOS DXF A CTE

Alfredo Weitzenfeld Gráfica: Illuminación y Sombreado 1

CREACION DE UN PROYECTO EN UNITY

TUTORIAL 02: DIBUJO BÁSICO (TRAMADOS)

COBHTTPD-CGILIB. Librería para creación de Paginas web Dinámicas con COBOL. Manual de Templates. COBHTTPD Manual de Templates

Método 1: Usando las plantillas de Cubase 6/7

Tutorial 6: Qué es una función? y como utilizarla

Introducción a la programación del robot moway

Introducción a la programación en OpenGL (2)

CREACIÓN Y MANEJO DE TABLAS Instructivo N 1

Visualización y Realismo: Problemas Capítulo 2

BOTON DE OPCION Controles de Formulario

1 Representación por superficies de polígonos

Superficies visibles Modelos de iluminación y sombreado

Posición de los Jumpers Zona D 0 D 1 D 2 D 3

Materia: Matemática de Séptimo Tema: Las Fracciones y los Decimales

C =[x 1,y 1,x 2,y 2,...,x n,y n ]

Las operaciones aritméticas básicas en MATLAB son las más sencillas que se pueden

GUIA DE TRABAJO CON EL EDITOR DE VISUAL BASIC DE LA FICHA PROGRAMADOR

Crear Tareas. Crear Tareas. 1 de 8. En este tutorial vamos a revisar el comportamiento de la herramienta "Tarea".

Proyecto: técnicas aplicadas en el dibujo

LISTA PARA VALIDACIÓN DE DATOS EN EXCEL

Hoja de Cálculo. Práctica Coeficiente de correlación y recta de

Aplicación de texturas al tablero de ajedrez

Textos 3D con Inkscape

Bajar videos de Internet y grabarlos en un DVD

-TUTORIAL DE ILUMINACION Y COMPOSICION PARA FOTOS DE ESTUDIO- Por José Florencio Slimo

Lección 10: División de Polinomios. Dra. Noemí L. Ruiz Limardo 2009

Laboratorio #1. Actividad 1

Tratamiento básico de imágenes con Paint

Manual de OpenOffice Impress

Configuración y manejo de los descuentos.

PRÁCTICA 3 Color e Iluminación.

CIRCUITOS COMBINACIONALES CON isplever

Clase 3: Repaso POO. DSIW1:Ing. Tomás Eduardo Urbina 1

Guía para factura con moneda extranjera

Diseño, Simulación e Implementación de Circuitos con ORCAD RELEASE 9.1

FUNCIONES EN EXCEL III

Administración de Infraestructuras

Tutorial para bajar la salida de alimentación de un cartucho fumígeno con una CS2.

07 Variables. 7.1 Variables globales Definición

Solución del cubo de Rubik

Materia: Matemática de 5to Tema: Ecuación de la Recta. Marco Teórico

Computación Gráfica Modelado de la Iluminación y el Color

Manual Power Point Patrones

OPENOFFICE IMPRESS. Creación básica de presentaciones digitales

Manual Word Plantillas y Formularios

Manual de software. MDSA Tools. Fecha: 11/04/2014 MSoft-MDSATools_ v1.0

Formato para prácticas de laboratorio

Tutorial Susano o. 1.- líneas. Usando los colores de las lienas. Como en el anime y los colores. Más oscuros del hexa quedaran más. Sobresalientes.

ARCHIVOS DE LA APLICACIÓN DE TRATAMIENTOS DE TEXTOS, UBICACIÓN, TIPO Y OPERACIONES CON ELLOS

Construcción de gráficos:

1 BARRA de NAVEGACIÓN VERTICAL con BOTONES rollovers ver 2.

Lcdo. Manuel Mujica 1

La corrección del color en nuestras imágenes es muy importante a la hora de poder realizar selecciones y Máscaras.

TUTORIAL 01B: CÁMARAS Y ESTILOS VISUALES

CREAR UNA COLINA USANDO LOS GRADIENTES DE ADOBE ILLUSTRATOR

TEMA 3: DIBUJO VECTORIAL. Realización de dibujos vectoriales con la herramienta OpenOffice Draw

CAMPUS VIRTUAL ENTORNO VIRTUAL ANGELINO

Creación y manejo de la base de datos y tablas

Vicerrectoría de Pregrado 1 Universidad de Talca

UNIDAD 4. MODIFICAR TABLAS DE DATOS

Tutorial EDpuzzle. Profesor: Nino, Santiago Fabricio ETR TIC Región 18

Manual de Fireworks] Julio César Hernández Hernández

MICROSOFT WORD COM PUTACI ÓN

PowerPoint 2010 Edición del contenido

UNIDAD 2 IMAGEN DIGITAL

Juego 5: DESTRUIR LADRILLOS ( El Breakout )

RESUMEN TEORIA MATEMATICAS 5

Suma y resta de ángulos. Multiplicación de un ángulo por un entero. División de un ángulo entre un entero. Conversión de Grados a radianes y viceversa

COMO CREAR UNA RED LOCAL ENTRE EQUIPOS CON WINDOWS

Manejo de Bases de Datos Mysql en Lenguaje C

DISEÑO DE PRESENTACIONES EN LA ENSEÑANZA. Diapositivas de diagrama

Tipos de datos estructurados

DISEÑO DE MÁQUINAS PRÁCTICA 1

El pipeline de visualización es el conjunto de

img.1 Comenzar a crear nuestro player

Crear el cartel de la película "El Legado de Bourne

UNIDAD 1. writer PRIMEROS PASOS. CURSO: LibreOffice

Tutorial Instalación Debían.

1. Activar la herramienta Texto y digitar lo que se muestra en el Grafico.

EL LENGUAJE ALGEBRAICO

Ecuaciones Lineales en Dos Variables

Guía Rápida de Configuración Modem Zyxel P660HW T1 V3 Telefónica del Sur

1. Introducción PAG 1

Transcripción:

TUTORIAL #4: Iluminación y texturas El contenido de este tutorial es explicar y entender como OpenGL trabaja con el sistema de iluminación, el cual es una pieza fundamental en el color de los objetos; Y del sistema de texturas, que nos permite colocar imágenes en superficies para crear efectos de realismo que no serian posibles con las técnicas ya vistas en clases anteriores. Iluminación La iluminación es un elemento fundamental en la computación grafica, ya que nos permite dar realismo a las escenas que estamos haciendo. OpenGL puede manejar hasta 8 luces con sus diversas propiedades simultáneamente. Primero que nada para prender la iluminación aplicamos el comando glenable(gl_lighting); y para prender cada luz individualmente aplicamos glenable(gl_light0); donde 0 puede ser cualquiera de las 8 luces que se desea prender(del 0 al 7). Por defecto OpenGL tiene desactivadas todas las luces. Luces y colores: Primero veamos como asignar una luz ambiental Global, la cual afectara a todos los objetos de la escena: Glfloat global_ambient[] = { 0.5f, 0.5f, 0.5f, 1.0f }; gllightmodelfv(gl_light_model_ambient, global_ambient); Esto nos da un ambiente grisáceo cuando tengamos la iluminación prendida pero ninguna luz activada. Ahora veamos que propiedades podemos agregar a nuestras luces: Ambiental: Este valor indica cuanta luz ambiental se debe agregar al sistema cuando está encendida, no hay que confundirla con la luz ambiental global ya que esta solo afecta cuando esta luz está encendida, en cambio la global afecta aunque todas las luces estén apagadas. Difusa: Es el valor que indica que color de luz estamos mostrando de manera direccional, esta luz está afectada por el vector que se está usando(a diferencia de la luz ambiental) Especular: Igual que la luz difusa, esta es direccional, pero la luz especular muestra el valor de luz que se refleja al golpear la superficie y está afectada por el brillo de la superficie que golpee (más información adelante en Materiales). Posición: Es un vector que indica que dirección tiene la luz, este vector solo aplica para la luz Difusa y Especular, ya que la ambiental afecta toda la escena.

Para colocarle estas propiedades a alguna luz (nuestro ejemplo a GL_LIGHT0) seguimos estas instrucciones: //Creamos una luz roja un poco a la derecha de la esfera const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; const GLfloat light_diffuse[] = { 1.0f, 0.0f, 0.0f, 1.0f }; const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_position[] = { 5.0f, 0.0f, 5.0f, 0.0f }; //Asignamos estos valores a la luz 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); //Activamos la luz 0 glenable(gl_light0); Colores y Materiales: Cuando activamos el sistema de luces, los colores asignados por el glcolor no se comportan correctamente. Al tener una luz activa, solo se verá el color de esta. Si queremos que nuestros objetos tengan colores particulares, debemos utilizar una nueva instrucción llamada glenable(gl_color_material); la cual permite que los colores especificados interactúen con las luces. Generalizando esto, cuando una luz esta prendida, se deben asignar cualidades al material (objeto) para que este se pueda ver en la luz, esto es, características que quieres que el objeto posea: Ambiental: Es el color que muestra el objeto cuando es afectado por luz ambiental. Difusa: Color que posee el objeto al estar enfrente de un haz de luz. Especular: es el color que refleja el objeto cuando se le aplica luz Brillo: es un coeficiente que indica cuanto brillo refleja el objeto.

Cuando asignamos las propiedades del material, todas las operaciones siguientes serán afectadas por este cambio, así que debemos asignar estos componentes por cada objeto que se desplegara antes de dibujarlos. Veamoslo con un ejemplo: //Definimos un material const GLfloat mat_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; const GLfloat mat_diffuse[] = { 0.0f, 1.0f, 0.0f, 1.0f }; const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat high_shininess[] = { 10.0f }; //Asignamos estos valores a los componentes del material glmaterialfv(gl_front, GL_AMBIENT, mat_ambient); glmaterialfv(gl_front, GL_DIFFUSE, mat_diffuse); glmaterialfv(gl_front, GL_SPECULAR, mat_specular); glmaterialfv(gl_front, GL_SHININESS, high_shininess); Algo que hay que recalcar es que el color final de un objeto viene después de operar los colores de las luces con los colores del material, si aplicamos el código anterior de la luz roja y le agregamos este código de un material, veremos solo la parte especular de la iluminación, ya que el componente ambiental de ambos es 0 y en el componente difuso los colores no corresponden, es una luz roja en un objeto verde, así que no se verá el objeto, solo se verá su brillo (especular) que será una luz blanca (ya que tanto en la luz como en el material el componente especular esta en (1,1,1) ). Texturas En muchas oportunidades, asignar colores y materiales no es suficiente para crear el realismo necesario, si deseamos dibujar un avión tendríamos que cambiar colores y por cada zona del avión y además, tendríamos un objeto demasiado complejo para representar todo el avión, una solución a este problema son las texturas. Las texturas son imágenes de mapas de bits que se colocan en un polígono, como si forráramos un cuaderno con papel adhesivo, el cual envolverá toda la cara del cuaderno. Nombre de las texturas: Las texturas deben tener un identificador, que internamente para OpenGL es un número (pero no nos preocupemos por eso). Para asignar un nombre a nuestra textura usaremos: GLuint textura;

glgentexture(1,&textura); //Para utilizart la textura utilizamos glbindtexture(gl_texture_2d,textura); Luego de que leamos la información de la textura (leer el archivo y convertirlo en bytes, por lo que se recomienda utilizar archivos BMP, ya que son los más sencillos de leer) le decimos a OpenGl que cree una textura a partir de esos datos: /*El primer parámetro indica que es una textura 2D,luego viene el nivel de detalle de la textura, dejémosla en 0 por ahora, el 3er parámetro son las componentes que posee la data(rgb),luego es el borde, que usualmente es 0, GL_RGB le dice a OpenGL que los datos que usamos están en ese orden RGB, GL_UNSIGNED_BYTE es el tipo de dato que estamos usando en la textura y finalmente textura es de donde estamos tomando toda esta información*/ glteximage2d(gl_texture_2d, 0, 3, Width, ImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE,textura); Ya tenemos nuestra textura cargada y lista, ahora le diremos a OpenGL algunos parámetros de cómo debe usar nuestra textura: gltexparameterf(gl_texture_2d, GL_TEXTURE_MAG_FILTER,GL_NEAREST); gltexparameterf(gl_texture_2d, GL_TEXTURE_MIN_FILTER,GL_NEAREST); En el cuadro anterior le dijimos a OpenGL que las texturas 2D se aproximen al polígono cuando la textura es muy grande o muy pequeña,esto hará que la textura se vea un poco cuadriculada si queremos ver más natural este ajuste cambiamos la instrucción GL_NEAREST a GL_LINEAR, aunque GL_LINEAR requiere más computo. Ahora para utilizar nuestra textura ya cargada solo colocamos antes de cara vértice gltexcoord2f(x,y); donde x e y son las coordenadas de la textura que serán asignados al próximo glvertex que haya, esto es básicamente decir de donde a donde usaremos la textura. Estos valores van de 0.0 a 1.0, pero en algunos casos puede que necesitemos ir más allá de estos valores. Para saber el comportamiento de OpenGL debemos asignar este parámetro: gltexparameterf(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_CLAMP); gltexparameterf(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_CLAMP); Si colocamos GL_CLAMP lo que haremos será convertir las coordenadas de textura y adaptarlas a la textura, es decir, valores mayores que 1.0 se volverán 1.0 y valores menores de 0.0 se volverán 0.0. Otra opción es en vez de colocar GL_CLAMP es usar GL_REPEAT que hace es repetir la textura como sea necesario, así si colocamos una coordenada mayor OpenGL repetirá la textura lo necesario para que exista esa coordenada de textura y utilizarla

Referencias OpenGL @ Lighthouse 3D http://www.lighthouse3d.com/opengl/glut/index.php NeHe Productions http://nehe.gamedev.net OpenGL Texture Tutorial: http://www.nullterminator.net/gltexture.html The Red Book OpenGL Programming Guide (Addison Wesley Publishing Company):