mapeo de exturast -...

42

Upload: nguyenque

Post on 20-Oct-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Mapeo de Texturas

Facultad de Cs. de la Computación

Juan Carlos Conde Ramírez

Computer Graphics

Introducción Texturizado Condiciones de Aplicación Mipmapping

Contenido

1 Introducción

2 Texturizado

3 Condiciones de Aplicación

4 Mipmapping

1 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Contenido

1 Introducción

2 Texturizado

3 Condiciones de Aplicación

4 Mipmapping

2 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Fin o Propósito

Las texturas permiten personalizar aún más el material de un objeto, y nospermiten obtener imágenes mucho más realistas en nuestras escenas.

3 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Ejemplos

Por ejemplo, si queremos dibujar una pared de ladrillo, tenemos dos opciones:

1. dibujar cada ladrillo, de�niendo su material con colores, y dibujar elcemento entre los ladrillos, a base de polígonos, de�niendo también sumaterial, o

2. dibujar un único cuadrado con la extensión de la pared, y hacer que sumaterial, sea, por ejemplo, la foto de una pared de ladrillo.

4 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Conceptos I

I Un texel (contracción del inglés texture element, o también texture pixel) esla unidad mínima de una textura aplicada a una super�cie, usada en grá�caspor computadora.

I De la misma forma que una imagen digital se representa mediante unamatriz de pixeles, una textura se puede representar mediante un matriz detexeles.

I Cuando se aplica una textura a una super�cie 3D, en el proceso conocidocomo mapeado de texturas, se asignan texeles a los pixeles correspondientesque aparecerán en la imagen �nal.

5 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Conceptos II

I Un texel puede corresponder a varios pixeles, o bien ser de tamaño inferiora uno, en cuyo caso podría no ser visible.

I El hecho de que un texel corresponda a varios pixeles no quiere decir queéstos vayan a tener un color uniforme.

I En las computadoras modernas, este proceso se lleva a cabo en la tarjetagrá�ca.

6 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Ejemplos de Texturizado

7 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Contenido

1 Introducción

2 Texturizado

3 Condiciones de Aplicación

4 Mipmapping

8 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Coordenadas de textura I

Para saber qué partes de una imagen se dibujan en un polígono (por ejemplo untriángulo), utilizamos lo que se denominan coordenadas de textura, o coorde-

nadas UV.

Estas coordenadas están representadas por números reales entre 0 y 1, de lasiguiente manera:

9 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Coordenadas de textura II

De esta manera, si queremos dibujar un triángulo con una textura, y aplicamosa cada vértice las coordenadas de textura indicadas en la �gura, tenemos elsiguiente resultado:

10 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Proceso

Para aplicar una textura tenemos que seguir una serie de pasos muy de�nidos:

1. Creamos la textura.

2. De�nimos las condiciones en que se va a aplicar la textura.

3. Habilitar la aplicación de texturas.

4. Dibujar las escenas, proporcionando las coordenadas de textura.

11 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Creación de la Textura

I Primero hemos de obtener un identi�cador para la textura. Para ellopedimos a OpenGL que nos devuelva un identi�cador de textura libre:

int texture;

glGenTextures(1, &texture);

I Con�guramos la textura como textura activa:

glBindTexture(GL_TEXTURE_2D, texture);

12 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Creación de la Textura

Creamos la textura. El modo más sencillo de hacerlo es a través de otra funciónGL que crea la textura y sus variaciones a aplicar según la distancia a la que seencuentre:

glTexImage2D( GLenum target,

GLint level,

GLint internalFormat,

GLsizei width,

GLsizei height,

GLint border,

GLenum format,

GLenum type,

const GLvoid *data);

13 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

glTexImage2DParámetros

target

Especi�ca el tipo de textura (consultar documentación de OpenGL).

level

Especi�ca el nivel de detalle. El nivel 0 es el nivel base de la imagen. El nivel nes el n-ésimo mipmap de resolución de la imagen.

internalFormat

Especi�ca el numero de componentes de color en la textura. Puede ser 1, 2, 3o 4, o alguna de las constantes simbólicas de OpenGL relacionadas.

14 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

glTexImage2DParámetros

width

Especi�ca el ancho de la imagen incluyendo el borde si lo hubiere. Si la versiónde OpenGL no sopota tamaños que no sean potencias de 2 el valor debe sermúltiplo de 2.

height

Especi�ca el ancho de la imagen incluyendo el borde si lo hubiere. Si la versiónde OpenGL no sopota tamaños que no sean potencias de 2 el valor debe sermúltiplo de 2.

border

Especi�ca la proporción del borde de la textura. Debe estar entre 0 y 1.

15 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

glTexImage2DParámetros

format

Especi�ca el formato de los datos que describen los pixeles. Los valores quepuede tomar son: GL_RED, GL_GREEN, GL_BLUE, GL_RGB, GL_RGBA,etc.

type

Especi�ca el tipo de dato de los datos que describen los pixeles.

data

Especi�ca un apuntador a los datos de la imagen en memoria.

16 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

glTexImage2DParámetros

Por ejemplo:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Width, Height, 0, GL_RGB,

GL_UNSIGNED_BYTE, image);

Finalmente, se habilita mediante la siguiente función:

glEnable(GL_TEXTURE_2D);

17 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Ejemplo

glBegin(GL_TRIANGLES);glTexCoord2d(0.0,1.0);glVertex3f(-0.5,-0.5,0.5);glTexCoord2d(1.0,1.0);glVertex3f(0.5,-0.5,0.5);glTexCoord2d(0.5,0.0);glVertex3f(0.0,0.5,0.5);

glEnd();

Si en algún momento queremos cambiar la textura activa, tan sólo debemos deindicar qué textura queremos activar mediante la llamada:

glBindTexture(GL_TEXTURE_2D, texture);

donde texture es el identi�cador de la textura que queremos activar.

18 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Contenido

1 Introducción

2 Texturizado

3 Condiciones de Aplicación

4 Mipmapping

19 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

función glTexEnvf

Estas condiciones se establecen a través de la función glTexEnvf().

glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

En nuestro caso, hemos especi�cado que la textura se va a fundir con el colorde fondo del polígono (GL_MODULATE), aunque bien podría sustituirlo (usandoGL_REPLACE).

20 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

función glTexEnvf

La fusión con el color de fondo se utiliza para aplicar la iluminación a un objetocon textura.

En el ejemplo vemos cómo se visualiza un objeto iluminado, con la texturaaplicada mediante GL_MODULATE, y mediante GL_REPLACE:

21 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Repetición de Texturas I

I Cuando renderizamos la primitiva, debemos asignar una coordenada detextura a cada vértice.

I Podemos especi�car la coordenada o dejar a OpenGL que la genereautomáticamente a partir de un método seleccionado.

I Para especi�carla nosotros mismos lo hacemos con la funciónglTexCoord*().

22 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Repetición de Texturas II

I A cada pixel se le asigna un texel interpolando las coordenadas textura delos vértices de la misma forma que se hacia para el color.

I Recordemos que la coordenada de la textura al igual que el color, lanormal u otros parámetros se especi�can antes de indicar el vértice, unavez indicado no se puede modi�car.

I Las coordenadas de la textura (s, t) varían de 0 a 1.

23 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Repetición de Texturas III

I Por ejemplo, una textura de 128 x 64 su rango viene dado por [0,1] x [0,1],los números mayores a 1 representan que la textura se repite.

I Veamos un ejemplo sencillo:

24 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Repetición de Texturas III

glBegin(GL_QUADS);glColor3f(1.0, 1.0, 1.0);glTexCoord2f(0.0, 0.0); // s = 0 t = 0glVertex3f(-1.0, -2.0, 0.0);glTexCoord2f(0.0, 3.0); // s = 0 t = 3glVertex3f(-1.0, 2.0, 0.0);glTexCoord2f(2.0, 3.0); // s = 2 t = 3glVertex3f(1.0, 2.0, 0.0);glTexCoord2f(2.0, 0.0); // s = 2 t = 0glVertex3f(1.0, -2.0, 0.0);

glEnd();

25 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Repetición de Texturas IV

Este ejemplo extiende la textura en el cuadrado repitiéndola 3 veces verticalmentey 2 veces horizontalmente.

26 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Filtrado de Texturas I

Al usar texturas asignamos una coordenada textura (s, t) a cada vértice, pero nohemos hablado de como se calculan los texeles que se asignan al resto de píxeles(o fragmentos) renderizados.

Para ello, se calcula la coordenada (s, t) de la textura como la interpolación delas coordenadas de textura asignadas a los vértices con los que se ha generadoel pixel.

Una vez que se tiene la coordenada de la textura (s', t') existen dos formasde asignar el color, seleccionando el texel que este mas cerca de la coordenada(GL_NEAREST) o mediante �ltrado linear (GL_LINEAR), interpolando entre loscuatro texeles más cercanos a la coordenada (s', t').

27 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Filtrado de Texturas II

La asignación de un texel a un pixel se puede realizar en dos casos diferenciados:

1. El área del pixel equivale a una región de la textura mayor que un texel,cerca del polígono, llamado MAGNI�cación.

2. El área del pixel equivale a una región de la textura menor que un texel,alejado del polígono, llamado MINI�cación.

28 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Filtrado de Texturas III

Para cada uno de estos casos se puede aplicar un �ltrado diferente.

Ejemplos de �ltrado:

I glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,

GL_LINEAR);

I glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,

GL_NEAREST);

29 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Filtrado de Texturas IV

En el �ltrado GL_NEAREST el texel seleccionado es el mas cercano a la coordenada(s,t) calculada, esto provoca que la textura aparezca �pixelada�, esto no sucedesi el tamaño del polígono en pixeles equivale al tamaño, en texeles, de la textura.

El �ltrado GL_LINEAR prácticamente todas las tarjetas grá�cas lo aplican porhardware, y el aspecto visual mejora mucho, por lo que se recomienda su uso.

30 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Filtrado de Texturas V

En este �ltrado, el color resultante es la interpolación de los cuatro texeles querodean a la coordenada (s,t).

Este proceso se calcula para cada pixel, esto puede provocar que si aplicamostexturas de gran detalle (32x32) a polígonos alejados (por ejemplo una pared)cuyo renderizado son sólo 4 pixeles (2x2) el color resultante no tenga el aspectodeseado.

Esto es porque solo tenemos cuatro pixeles, el color de cada uno se ha extraídode 4 texeles (total 16 texeles) de los 32*32 texeles que tiene la textura.

31 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Contenido

1 Introducción

2 Texturizado

3 Condiciones de Aplicación

4 Mipmapping

32 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

¾Para qué sirve?

Para evitar el problema mencionado anteriormente existe un método adicional de�ltrado llamado mipmapping, en el cual, en lugar de aplicar la interpolación delos cuatro texeles más cercanos al centro del pixel, se calcula el área ocupada porel pixel sobre la textura y se calcula como la media de todos los texeles dentrode este área.

Con esta técnica se evita el efecto de aliasing que se produce en texturas degran tamaño aplicadas a polígonos que pueden variar su tamaño (renderizado)considerablemente (antiliasing).

En la técnica mipmapping realmente no se calcula el color resultante como lamedia del área que proyecta el pixel sobre la textura, como sería de esperar.

33 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Procedimiento I

Lo que se aplica es otra técnica que aunque menos realista es más e�ciente:

I Consiste en tener texturas con diferente nivel de detalle, si tenemos unatextura inicial de 32x32 tendremos texturas más y más pequeñas hastaalcanzar la más pequeñas posible 1x1 (32x32, 16x16, 8x8, 4x4, 2x2, 1x1)

I Cada una de estas texturas representa un nivel de detalle, que irá desde elnivel 0, máximo nivel de detalle y en nuestro caso hasta el nivel 5, mínimodetalle.

34 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Procedimiento II

I Esto supone un mayor costo de memoria por lo que se aconseja usartexturas lo más pequeño posible, máximo 32x32.

I Para una textura de tres componentes RGB de tamaño 32x32 y un bytepor componente, ocupa 32x32x3 bytes, mipmapeada es necesario 32x32x4bytes, es decir incrementa la ocupación de memoria un 33.33%.

I A cada textura de diferente tamaño se le asigna un nivel siendo el nivel 0la textura de más detalle (32x32), el nivel es el segundo parámetroindicado en la función glTexImage2D.

35 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Procedimiento III

I Deberemos realizar tantas llamadas a esta función como niveles de detalletengamos.

I Entonces el objeto textura no contendrá una sola textura, contendrá ntexturas con diferente nivel de detalle.

I Al utilizar esta técnica tenemos nuevos métodos de �ltrado en el caso demini�cación (el area del pixel corresponde a una área mayor que un texel,el polígono más pequeño que la textura).

36 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Procedimiento IV

Métodos de Filtrado Descripción

GL_NEAREST_MIPMAP_NEAREST selecciona la textura de nivel más próximo, dentrode esta textura selecciona el texel más cercano

GL_LINEAR_MIPMAP_NEAREST selecciona la textura de nivel más próximo, dentrode esta textura interpola entre los texeles máscercanos al centro

GL_NEAREST_MIPMAP_LINEAR selecciona el texel mas cercano en los dos nivelesmás apropiados e interpola entre estos dos valores

GL_LINEAR_MIPMAP_LINEAR interpola entre 8 texeles, 4 y 4 de los dos nivelesmás próximos

En el caso de magni�cación no se puede mejorar la imagen resultante, habríaque de�nir un textura de mayor tamaño, 64x64 en nuestro caso para evitar lamagni�cación.

37 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Ejemplo Mipmapping

38 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Ejemplo Texturizado

39 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

Actividad

1. Descargar y probar los 3 ejemplos de texturas adjuntos a estas notas, quetienen por nombre:

I 09_texturas1.rar

I 09_texturas2.rar

I 09_texturas3.rar

2. Buscar y cambiar las texturas de los 2 primeros ejemplos.

3. Reutilizar las funciones de OpenGL y los bloques de código necesarios paraasignar textura a la silla creada con la función miCubo() de la actividadanterior.

TAREA: Con el �n de obtener un comodín, investigar como es posible compilary ejecutar el ejemplo de texturas número tres (09_texturas3.rar) el cual utilizala librería glaux.h

40 / 41

Introducción Texturizado Condiciones de Aplicación Mipmapping

�Las metas son sueños con fecha de vencimiento�

[Anónimo]

Juan Carlos Conde Ramí[email protected]

41 / 41