主要代码如下:
GLuint loadBMP(char* fname)
//加载BMP文件并生成一个纹理,返回其标识
{
GLuint tex; //纹理的标识
AUX_RGBImageRec *img=0; //存放图像的数据结构
/*
在glaux.h中定义如下
typedef struct _AUX_RGBImageRec {
GLint sizeX, sizeY; //图像的大小
unsigned char *data; //像素数据
} AUX_RGBImageRec;
*/
img=auxDIBImageLoad(fname); //把BMP文件调入img所指的内存
assert(img); //成功?
glGenTextures( //为纹理分配内存
1, //多少个纹理?
&tex); //把其标识赋值于tex
glBindTexture( //设置当前纹理
GL_TEXTURE_2D, //是二维纹理还是一维纹理?
tex); //使用用哪个纹理?
glTexImage2D( //为当前纹理设置像素数据
GL_TEXTURE_2D, //是二维纹理还是一维纹理?
0, //纹理的细节等级(level of detail)
3, //纹理的每个像素包含几种颜色成份
img->sizeX, //图像的宽度
img->sizeY, //图像的高度
0, //纹理的边界宽度(只能是0或1)
GL_RGB, //图像的格式
GL_UNSIGNED_BYTE, //图像的数据类型
img->data); //图像的像素数组
//if(img && img->data)free(img->data); //释放img所占用的内存
//纹理像素已被调用OpenGL
//的内部数据结构,img
//不再需要
//if(img)free(img);
return tex; //返回生成纹理的标识
}
博客给出了加载BMP文件并生成纹理的代码。定义了存放图像的数据结构,将BMP文件调入内存,为纹理分配内存、设置当前纹理,最后为纹理设置像素数据,返回生成纹理的标识。
5481

被折叠的 条评论
为什么被折叠?



