OpenGL创建纹理

大学时候的工程,要清理电脑,陆续把有用的代码贴出来

GLuint mytexture[4];                                    //存储纹理
AUX_RGBImageRec *LoadBMP(char *Filename)			    //载入位图图象
{
	FILE *File=NULL;							        // 文件句柄
	// 确保文件名已提供
	if (!Filename)								        
	{
		return NULL;							      
	}
	// 尝试打开文件
	File=fopen(Filename,"r");						    
	if (File)								            // 文件存在么?
	{     
		 // 关闭句柄
		fclose(File);				
		// 载入位图并返回指针
		return auxDIBImageLoad(Filename);			    
	}

	MessageBox(NULL,"载入位图失败!",NULL,MB_OK);
	return NULL;							
}
 /********************* 载入位图(调用上面的代码)并转换成纹理*******************/
int LoadGLTextures()								    
{
	int Status=FALSE;
	int i=0,j=0;
	AUX_RGBImageRec *TextureImage[4];					// 创建纹理存储空间
	memset(TextureImage,0,sizeof(void *)*4);		    // 载入位图,检查有无错误,如果位图没找到则退出
	
	if((TextureImage[0]=LoadBMP("Image/1.bmp"))&&(TextureImage[1]=LoadBMP("Image/2.bmp"))&&(TextureImage[2]=LoadBMP("Image/3.bmp"))
		&&(TextureImage[3]=LoadBMP("Image/4.bmp")))
	{
		Status=TRUE;
		//创建纹理
		glGenTextures(4, &mytexture[0]);			   
		//创建贴图
		while(i<4)                                     
		{
		   glBindTexture(GL_TEXTURE_2D, mytexture[i]);
	       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
		   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
		   glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[j]->sizeX, TextureImage[j]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[j]->data);
		   i++;
		   j++;
		}
	}
                                     
	for(i=0;i<4;i++)
	{
	  //纹理是否存在
	  if(TextureImage[i])							  
	  {
		// 纹理图像是否存在
		if(TextureImage[i]->data)			 
		   free(TextureImage[i]->data);	
		// 释放图像结构
		free(TextureImage[i]);				
	  }							
	}
    return Status;	                // 返回 Status
}

你可能感兴趣的:(OpenGL,纹理)