OpenGL加载BMP文件

以下代码来自NeHe,基于第一课框架之上:

http://download.csdn.net/source/1907052

 

 

1,定义一个全局变量来存储BMP文件:

GLuint texture[1]; // 存储一个纹理

 

2,定义两个函数加载BMP文件:

/* * LoadBMP * 载入位图图像 */ AUX_RGBImageRec *LoadBMP(char *filename) { FILE *file = NULL; if (!filename) { return NULL; } // 尝试打开文件 file = fopen(filename, "r"); if (file) { fclose(file); return auxDIBImageLoad(filename); // 载入位图并返回指针 } return NULL; } /* * LoadGLTextures * 载入位图(调用上面的代码)并转换成纹理 */ int LoadGLTextures() { int status = false; // 状态指示器 AUX_RGBImageRec *textureImage[1]; // 创建纹理的存储空间 memset(textureImage, 0, sizeof(void *)*1); // 载入位图,检查有无错误,如果位图没找到则退出 if (textureImage[0] = LoadBMP("xiaoshe.bmp")) { status = true; // 创建纹理 glGenTextures(1, &texture[0]); // 使用来自位图数据生成 的典型纹理 glBindTexture(GL_TEXTURE_2D, texture[0]); // 生成纹理 glTexImage2D(GL_TEXTURE_2D, 0, 3, textureImage[0]->sizeX, textureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, textureImage[0]->data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 线性滤波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } // 释放位图数据 if (textureImage[0]) // 纹理是否存在 { if (textureImage[0]->data) // 纹理图像是否存在 { free(textureImage[0]->data); // 释放纹理图像占用的内存 } free(textureImage[0]); // 释放图像结构 } return status; }

3,在InitGL(GLvoid)中加载BMP并启用纹理映射:

// 调用纹理载入子例程 if (!LoadGLTextures()) { return 0; } glEnable(GL_TEXTURE_2D); // 启用纹理映射

4,在DrawGLScence(GLvoid)绘制四边形显示BMP文件:

  glBindTexture(GL_TEXTURE_2D, texture[0]); // 选择纹理 glBegin(GL_QUADS); glTexCoord2f(0.0f, 1.0f); // 左上 glVertex3f(-1.0f, 1.0f, 0.0f); // 左上 glTexCoord2f(1.0f, 1.0f); // 右上 glVertex3f( 1.0f, 1.0f, 0.0f); // 右上 glTexCoord2f(1.0f, 0.0f); // 右下 glVertex3f( 1.0f, -1.0f, 0.0f); // 右下 glTexCoord2f(0.0f, 0.0f); // 左下 glVertex3f(-1.0f, -1.0f, 0.0f); // 左下 glEnd();

 

你可能感兴趣的:(框架,File,filter,null,存储,byte)