Texturas en bmp

Solo disponible en BuenasTareas
  • Páginas : 7 (1524 palabras )
  • Descarga(s) : 0
  • Publicado : 15 de octubre de 2010
Leer documento completo
Vista previa del texto
10. EL MAPEADO DE TEXTURAS Hasta ahora las primitivas se han dibujado en OpenGL con un solo color o interpolando varios colores entre los vértices de una primitiva. OpenGL dispone de funciones específicas para el mapeado de texturas (pegar imágenes en la superficie de las primitivas dibujadas), añadiendo realismo a la escena. En este capitulo se explica el proceso de mapeado de texturas a travésde un sencillo ejemplo, para posteriormente emplear las texturas en la aplicación tecnunLogo. 10.1 CARGANDO Y PEGANDO UNA TEXTURA

En este capitulo se va a utilizar la función LoadDIBitmap (de Michael Sweet, OpenGL SuperBible) para cargar archivos gráficos de tipo bmp. Para esto se deben incluir al directorio del proyecto los archivos bitmap.c y bitmap.h y añadirlos al proyecto (Project / Add toProject / Files...). También es necesario incluir el archivo “escudo.bmp”. Los archivos se encuentran en la dirección: http://www.tecnun.es/asignaturas/grafcomp/practicas/textures/escudo.bmp http://www.tecnun.es/asignaturas/grafcomp/practicas/textures/bitmap.c http://www.tecnun.es/asignaturas/grafcomp/practicas/textures/bitmap.h El código del ejemplo es el siguiente:
#include #include"bitmap.h" BITMAPINFO *TexInfo; /* Texture bitmap information */ GLubyte *TexBits; /* Texture bitmap pixel bits */ void display(void) { glClearColor (1.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); TexBits = LoadDIBitmap("escudo.bmp", &TexInfo); glTexImage2D(GL_TEXTURE_2D, 0, 3, TexInfo->bmiHeader.biWidth, TexInfo->bmiHeader.biHeight, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, TexBits);glTexParameteri(GL_TEXTURE_2D, glTexParameteri(GL_TEXTURE_2D, glTexParameteri(GL_TEXTURE_2D, glTexParameteri(GL_TEXTURE_2D, glColor3f(1.0, 1.0, 1.0); //se activa el mapeado de texturas glEnable(GL_TEXTURE_2D); glBegin(GL_POLYGON); glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, -1.0); glTexCoord2f(1.0, 0.0); glVertex2f(1.0, -1.0); GL_TEXTURE_WRAP_S, GL_REPEAT); GL_TEXTURE_WRAP_T, GL_REPEAT);GL_TEXTURE_MAG_FILTER, GL_LINEAR); GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0); glTexCoord2f(0.0, 1.0); glVertex2f(-1.0, 1.0); glEnd(); glDisable(GL_TEXTURE_2D); glutSwapBuffers() ; } void reshape(int width, int height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat)height / (GLfloat)width, 1.0, 128.0);glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(400, 400); glutInitWindowPosition(100, 100); glutCreateWindow("tecnunLogo"); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMainLoop(); return 0; }

Comopuede observarse, la función main() y reshape() son muy similares a las ya vistas en prácticas anteriores. Para entender el proceso de mapeado de texturas se va a explicar únicamente la función display(). Las texturas en OpenGL pueden ser 1D, 2D o 3D. Las 1D tienen anchura pero no altura; las 2D son imágenes que tienen una anchura y una altura de más de 1 píxel, y son generalmente cargadas a partirde un archivo .bmp (aunque puede ser en principio cualquier formato). En este capitulo no se hablará de las texturas 3D (volumen). Un aspecto muy importante a tener en cuenta es que en OpenGL las dimensiones de las imágenes deben ser potencia de 2 (2, 4, 8, 16, 32...) Antes de definir la textura, se carga una imagen a partir de un archivo (.bmp en este caso). Para esto es necesario incluir dospunteros, TexInfo y TexBits, para almacenar la información de la imagen (header) y los bits que componen la imagen respectivamente. Se carga la imagen con la función LoadDIBitmap() y se le pasa como argumentos el nombre de la imagen (“escudo.bmp” en este caso) y el puntero que guardará la información de dicha imagen (header). Para definir las texturas, OpenGL pone a disposición las funciones...
tracking img