void baiscobj::LoadT16(char *filename, GLuint &texture)//调帖图 { glGenTextures(1, &texture); //获取1个未使用的贴图名称 glBindTexture(GL_TEXTURE_2D, texture); //选择要绑定的贴图(纹理) BITMAPINFOHEADER bitHeader; //定义位图结构 unsigned char *buffer; //定义位图指针 buffer=LoadBitmapFileWithAlpha(filename,&bitHeader); //调入位图 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,bitHeader.biWidth,bitHeader.biHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,buffer); //gluBuild2DMipmaps ( GL_TEXTURE_2D, // 创建一个 2D贴图(纹理) // 4, // 使用3种颜色(RGB)+ 颜色深度 // bitHeader.biWidth, // 图像宽 // bitHeader.biHeight,// 图像高 // GL_RGBA, // 红绿蓝顺序 // GL_UNSIGNED_BYTE, // 图像的数据类型是字节 // buffer // 指定贴图(纹理)数据 // ); // 创建贴图(纹理) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR); //缩小采用三线性滤波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//放大采用线性滤波 //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); free(buffer); // 释放位图数据 }
bool LoadBmp(int image_id,char *name,int lim,...) { unsigned char r = 0,g = 0,b = 0; unsigned char *buffer; BITMAPINFOHEADER bitmapInfoHeader; glGenTextures(1, &texture[image_id]); // Typical Texture Generation Using Data From The Bitmap glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glBindTexture(GL_TEXTURE_2D, texture[image_id]); if(lim == 0) { buffer= LoadBitmapFile(name, &bitmapInfoHeader); if(buffer == NULL) return false; glTexImage2D(GL_TEXTURE_2D, 0, 3, bitmapInfoHeader.biWidth, bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, buffer); } else { va_list ap; va_start(ap, lim); r =va_arg(ap, unsigned char); g =va_arg(ap, unsigned char); b =va_arg(ap, unsigned char); va_end(ap); buffer= LoadBitmapFileWithAlpha(name, &bitmapInfoHeader,r,g,b); if(buffer == NULL) return false; glTexImage2D(GL_TEXTURE_2D, 0, 4, bitmapInfoHeader.biWidth, bitmapInfoHeader.biHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer); } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); free(buffer); return true; }