05 Opengl Texturas
gráficos 3D
OpenGL
Texturas
• Tenemos una capacidad limitada de
generar superficies complejas usando
simplemente geometría
• Las imágenes nos dan la ilusión de
geometría
• Cuando pintamos imágenes en los
polígonos hablamos de “texture
mapping ”.
Texture Mapping
• La textura (Texture map) es una imagen en dos dimensiones. Los
colores de un pixel en la textura se sueledenominar texels.
• Los texels se especifican mediante coordenadas de texturas (u,v)
• Para cada pixel de la pantalla se substituye su color por el texel
asociado
• Hacemos corresponder una coordenada (u,v) al espacio de
coordenadas del polígono (s, t)
T
V
U
S
Texture Mapping
• La conversión de (u,v) a (s,t) se realiza dando una
coordenada de textura por cada vértice.
• Podemos interpolar laconversión de (u,v) a (s,t) para
los puntos entre vértices.
Ejemplo de Texture Map
Applied to tilted polygon
Ejemplo de Texture Map
glVertex3d (s, s, s)
glTexCoord2d(1,1);
glVertex3d (-s, -s, -s)
glTexCoord2d(0, 0);
Ejemplo de Texture Map
glVertex3d (s, s, s)
glTexCoord2d(5, 5);
glVertex3d (s, s, s)
glTexCoord2d(1, 1);
Coordenadas
The Art of 3D Computer
Animation and Effects
Isaac KerlowCoordenadas de texturas
• Cada polígono puede tener coordenadas de objeto y
coordenadas de textura
– Las coordenadas del objeto dicen donde está éste en el
espacio.
– Las coordenadas de textura describen le posición de un
vertice dentro de la textura (texel). Normalmente en el
rango 0-1
– Las coordenadas de texturas se interpolan entre vértices
• glTexCoord{1234}{sifd}(TYPE coords)
Textures• Un objeto Textura (Texture)
– Es un objeto o tipo de datos en OpenGL que guarda la textura en
memoria y que nos permite identificarlo facilmente.
– Suministra una forma eficiente de manejo que evita la carga continuada
de texturas
– Podemos especificar la prioridad de las texturas. Nos permite determinar
que texturas permanecen en memoria.
– OpenGL utiliza la política “least recently used (LRU)”si no asignamos una
prioridad.
Ejemplos de utilización
• Leemos un .bmp desde fichero
– Utilizamos el tipo de datos Image
• getc() y fseek() para leer el tamaño de la imagen
• fread() lee los datos
Paso 2 – Creamos los objetos Texture
• glGenTextures(1, &texture[texture_num]);
– El primer argumento le dice a GL cuantas textura crear
– El segundo argumento es un puntero que le dice a
OpenGLdonde situar los identificadores de las texturas
a crear
• texture[ ] es de tipo GLuint
Paso 3 – Determina la textura
• Le indica a OpenGL que deseas trabajar con una
determinada textura (se le dice el identificador de la
misma)
– glBindTexture(GL_TEXTURE_2D,
texture[texture_num]);
• Las texturas pueden ser de 1D a 3D
Paso 4 – Definiendo la textura
• glTexParameter()
– Pone varios de losparámetros que controlan cómo tratar la textura
cuando se aplica en el renderizado
– // scale linearly when image bigger than texture
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILT
ER,GL_LINEAR);
– // scale linearly when image smaller than texture
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILT
ER,GL_LINEAR);
Paso 5 – Los datos de la imagen
– glTexImage2D();
GL_TEXTURE_2D
(2D Texture)
0
(levelof detail 0)
3
(3 components, RGB)
image1->sizeX
(size)
image1->sizeY
(size)
0
(no border pixel)
GL_RGB
(RGB color order)
GL_UNSIGNED_BYTE
(unsigned byte data)
image1->data
(pointer to the data))
Paso 6 – Aplicando la textura
• Antes de definir la geometría
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
GL_REPLACE);glTexEnv()
El primer argumento es siempre GL_TEXTURE_ENV
GL_TEXTURE_ENV_MODE
GL_DECAL
GL_DECAL (alpha blends texture with
poly
poly color)
GL_REPLACE
GL_REPLACE (straight up
replacement)
replacement)
GL_MODULATE
GL_MODULATE (texture application is
a function of poly lighting)
function
GL_BLEND
GL_BLEND (texture controls blending
with
with another color)
If
If GL_BLEND selected, second...
Regístrate para leer el documento completo.