Logo Studenta

Semana8-texturas (1)

¡Este material tiene más páginas!

Vista previa del material en texto

UNIDAD II
COMPUTACIÓN GRÁFICA II
▪ Texturas
Semana 8
Al término de la sesión, el estudiante aprende a texturizar objetos para generar una aplicación
gráfica que complemente lo aprendido.
Logro de 
Aprendizaje
¿Texturas?
Responder en el foro
Introducción
Las texturas se pueden combinar, también, con color y luz
con buenos resultados.
Las texturas son una parte vital en computación gráfica
para dar mayor realismo a las escenas y a costos
aceptables.
Es una técnica enormemente importante en computación
gráfica moderna.
Introducción
Texturizar una superficie consiste esencialmente en pintar una imagen sobre ella, un proceso que se puede
utilizar con dos grandes ventajas a la hora de programar gráficos:
Autenticidad
• Representación realista de un objeto.
Ilusión de detalles geométricos
• En lugar de recrear fielmente un objeto 
con primitivas geométricas, pintar una 
imagen de ella en una escena puede 
lograr un resultado realista a una 
fracción del costo en el número de 
polígonos.
Introducción
Los píxeles en una textura se llaman texels, cada uno de ellos almacena valores de
color, como RGB de 24 bits o RGBA de 32 bits.
Hay varias formas de aplicar una textura en OpenGl.
La más común: La textura es una matriz rectangular de píxeles y se aplica a una
superficie poligonal.
Introducción
Los píxeles en una textura se llaman texels, cada uno
de ellos almacena valores de color, como RGB de 24
bits o RGBA de 32 bits (Red, Green, Blue y
Alpha/opacidad).
Hay varias formas de aplicar una textura en OpenGl.
La más común: La textura es una matriz rectangular de píxeles y se aplica a una
superficie poligonal.
Introducción
Textura de procedimiento o Sintética: una textura creada en el programa
mismo.
La textura en sí misma puede ser:
Textura Externa: una imagen externa que se importa a un programa OpenGL.
Una vez cargados, no hay diferencia entre las dos.
Texturas en OpenGL
Una textura, desde el punto de vista de su almacenamiento en memoria es un array
de datos.
Podemos rellenar dicho array bien cargando una imagen desde un fichero, o bien
dándole nosotros los valores de color a cada texel.
Cada uno de los valores de este array lo llamamos textel. Este array de datos
representa una imagen, que utilizaremos para mapearla sobre un polígono.
Podemos tener texturas unidimensionales (un solo pixel de alto o de ancho), bidimensionales (imagen de
tamaño m*n) o tridimensional (con volumen), aunque lo habitual será utilizar las bidimensionales.
Texturas en OpenGL
Los pasos necesarios para mapear texturas sobre polígonos son los siguientes:
Cargar el fichero 
de imagen
Indicar los 
parámetros de 
aplicación de la 
textura y activar 
el mapeado de 
texturas
Especificar la 
textura 
Dibujar la escena
Texturas en OpenGL
Para OpenGL las texturas 1D, 2D o 3D son arraysuni, bi o tri - dimensionales
respectivamente.
En los ejemplos de clase utilizaremos unas funciones de la librería RgbImage.h, estas
funciones permiten cargar fichero en formato BMP.
Texturas 1D
Donde:
Son texturas que solo tienen un Texel de altura y/o un Texel de ancho
Texturas 1D
Ejemplo, para activar el mapeo de texturas 1D:
glEnable (GL_TEXTURE_1D)
Para definir los colores de la textura:
#define Violeta_oscuro{ 0x3f, 0x00, 0x3f }
#define Violeta{ 0x7f, 0x00, 0x7f }
#define Malva{ 0xbf, 0x00, 0xbf }
#define Azul{ 0x00, 0x00, 0xff }
#define Verde{ 0x00, 0xff, 0x00 }
#define Amarillo { 0xff, 0xff, 0x00 }
#define Naranja{ 0xff, 0x7f, 0x00 }
#define Rojo{ 0xff, 0x00, 0x00 }
unsigned char ArcoIris[8][3] = {Violeta_oscuro, Violeta,Malva, Azul, Verde, 
Amarillo, Naranja, Rojo};
Coordenadas de la textura
Para hacer corresponder las coordenadas de la textura con las de la superficie del
objeto, se usa:
glBegin(GL_QUADS);
glTexCoord1f (0.0);
glVertex3f (0, 0, 0);
glTexCoord1f (1.0);
glVertex3f (8, 0, 0);
glTexCoord1f (1.0);
glVertex3f (8, 8, 0);
glTexCoord1f (0.0);
glVertex3f (0, 8, 0);
glEnd();
Donde S: las coordenadas de la textura 1D es 0 ó 1
glTexCoord1f (GLfloat S)
Filtrado en una textura 1d
Al mapear la imagen de textura sobre una superficie, los texels no se van a corresponder exactamente con los pixels:
El área del pixel equivale a una región
de la textura mayor que un texel,
cerca del polígono, llamado
MAGnificación
El área del pixel equivale a una
región de la textura menor que
un texel, alejado del polígono,
llamado MINificación.
Filtrado en una textura 1d
Filtrado en una textura 1d
Para indicar el tipo de filtrado en una textura seria con:
Modos de mapeo en una textura 1d
Para establecer el modo de mapeo: glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GLint valor) 
donde valor puede tomar 3 valores:
– GL_DECAL: el valor del texel se copia directamente al pixel.
– GL_MODULATE: el valor del texel se escala por el color del objeto.
– GL_BLEND: el valor del texel se usa para interpolar entre el color del objeto y un color constante definido 
para la textura, mediante la función: 
EJEMPLO 1:
DESARROLLA LA SIGUIENTE 
ESCENA CON TEXTURA 1D 
(PRUEBA EL PARÁMETRO
GL_NEAREST Y GL_LINEAR)
En Resumen los parámetros de filtrado para las texturas son (en este caso 1D):
// Refresca el búfer para dar color a las líneas
glClear (GL_COLOR_BUFFER_BIT); 
// Habilitamos el mapeo de texturas
glEnable(GL_TEXTURE_1D);
// Indicamos el tipo de filtrado
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
// Creamos la textura //8 puede cambiar de 1 a 8 en 1D
glTexImage1D(GL_TEXTURE_1D,0,3,8,0,GL_RGB,GL_UNSIGNED_BYTE,ArcoIris);
// Indicamos el modo de mapeo, volcar los texels directamente sobre los píxeles
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
Texturas 2D
Donde:
Para definir la textura 2D:
Texturas 2D
Coordenadas de la textura
Para hacer corresponder las coordenadas de la textura con las de la superficie:
Texturas 2D
Coordenadas de la textura
En el polígono
Texturas 2D
Para activar el mapeo de texturas 2D:
glEnable (GL_TEXTURE_2D)
GLubyte Colores[4][4][3] = {
{{64,0,0}, {128,0,0}, {192,0,0}, {255,0,0}}, // Rojos
{{0,64,0}, {0,128,0}, {0,192,0}, {0,255,0}}, // Verdes
{{0,0,64}, {0,0,128}, {0,0,192}, {0,0,255}}, // Azules
{{64,64,0}, {128,128,0}, {192,192,0}, {255,255,0}} // Amarillos
};
glTexImage2D (GL_TEXTURE_2D, 0, 3, 4, 4, 0,GL_RGB, GL_UNSIGNED_BYTE, Colores);
Ejemplo:
Texturas 2D
Coordenadas de la textura:
Para hacer corresponder las coordenadas de la
textura con las de la superficie:
void glTexCoord2f (GLfloat s, GLfloat t)
glBegin(GL_QUADS);
glTexCoord2f (0.0, 0.0);
glVertex3f (0, 400, 0);
glTexCoord2f (1.0, 0.0);
glVertex3f (400, 400, 0);
glTexCoord2f (1.0, 1.0);
glVertex3f (400, 0, 0);
glTexCoord2f (0.0, 1.0);
glVertex3f (0, 0, 0);
glEnd();
Ejemplo:
Tipos de filtrado 2D
EJEMPLO 2:
DESARROLLA LA 
SIGUIENTE ESCENA 
CON TEXTURA 2D En Resumen los parámetros de filtrado para las texturas son (en este caso 2D):// Refresca el búfer para dar color a las líneas
glClear (GL_COLOR_BUFFER_BIT); 
// Habilitamos el mapeo de texturas
glEnable(GL_TEXTURE_2D);
// Indicamos el tipo de filtrado
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
// Creamos la textura //8 puede cambiar de 1 a 8 en 1D
glTexImage2D(GL_TEXTURE_2D,0,3,4,4,0,GL_RGB,GL_UNSIGNED_BYTE,Colores);
// Indicamos el modo de mapeo, volcar los texels directamente sobre los píxeles
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_DECAL);
❑ ¿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/9786074817621https://elibro-net.eu1.proxy.openathens.net/es/ereader/upnorte/35680?page=2

Continuar navegando

Materiales relacionados

370 pag.
biblia_vray_by_urrechur

SIN SIGLA

User badge image

Guadalupe Conde

38 pag.
Procesamiento del color

SIN SIGLA

User badge image

Erika Davila