Include para carregar bitmaps

#include<GL/glaux.h>
#pragma comment (lib, "glaux.lib")    // alternativa a inserir glaux.lib nas definições do projecto (linker)

GLuint texs[3]; // vector para guardar 3 identificadores de texturas

Carregar texturas

AUX_RGBImageRec *LoadBMP(char *Filename) // Loads A Bitmap Image
{
  FILE *File=NULL; // File Handle

  if (!Filename) // Make Sure A Filename Was Given  
  {
    return NULL; // If Not Return NULL
  }

  File=fopen(Filename,"r"); // Check To See If The File Exists

  if (File) // Does The File Exist?
  {
    fclose(File); // Close The Handle
    return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
  }
  return NULL; // If Load Failed Return NULL
}

 

int LoadAllTextures() // Load Bitmaps And Convert To Textures
{
  int Status=FALSE; // Status Indicator

  AUX_RGBImageRec *TextureImage[1]; // Create Storage Space For The Texture
 
  memset(TextureImage,0,sizeof(void *)*1); // Set The Pointer To NULL
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

  // Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
  if (TextureImage[0]=LoadBMP("can_top.bmp"))
  {
    Status=TRUE; // Set The Status To TRUE

    // Create MipMapped Texture
    glBindTexture(GL_TEXTURE_2D, texs[0]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
  }

  if (TextureImage[0]) // If Texture Exists
  {
    if (TextureImage[0]->data) // If Texture Image Exists
    {
       free(TextureImage[0]->data); // Free The Texture Image Memory
    }

    free(TextureImage[0]); // Free The Image Structure 
  }
  if (TextureImage[0]=LoadBMP("coca_cola.bmp"))
  {
    Status=TRUE; // Set The Status To TRUE

    // Create MipMapped Texture 
    glBindTexture(GL_TEXTURE_2D, texs[1]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
  }

  if (TextureImage[0]) // If Texture Exists 
  {
    if (TextureImage[0]->data) // If Texture Image Exists
    {
      free(TextureImage[0]->data); // Free The Texture Image Memory
    }

    free(TextureImage[0]); // Free The Image Structure
  }

  if (TextureImage[0]=LoadBMP("can_bottom.bmp"))
  { 
    Status=TRUE; // Set The Status To TRUE

    // Create MipMapped Texture
    glBindTexture(GL_TEXTURE_2D, texs[2]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
  }

  if (TextureImage[0]) // If Texture Exists
  {
    if (TextureImage[0]->data) // If Texture Image Exists
    {
      free(TextureImage[0]->data); // Free The Texture Image Memory
    }

    free(TextureImage[0]); // Free The Image Structure
  }

  glBindTexture(GL_TEXTURE_2D, 0);  // desligar a textura


  return Status; // Return The Status
}

Init

glGenTextures(3,texs);
LoadAllTextures();
glEnable(GL_TEXTURE_2D);

// para alterar modo de aplicação de texturas
glBindTexture(GL_TEXTURE_2D,tex[0]);  // pode ser tex[0], tex[1] ou tex[2]
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);  // GL_MODULATE, GL_DECAL, GL_BLEND, e GL_REPLACE 
glBindTexture(GL_TEXTURE_2D,0);

// para alterar filtros de aplicação de texturas
glBindTexture(GL_TEXTURE_2D,tex[0]);  // pode ser tex[0], tex[1] ou tex[2]
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTERGL_NEAREST); 
// GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_LOD, 
// GL_TEXTURE_MAX_LOD, GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_MAX_LEVEL, 
// GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, GL_TEXTURE_WRAP_R, ou GL_TEXTURE_PRIORITY
glBindTexture(GL_TEXTURE_2D,0);



Aplicar Texturas

glBindTexture(GL_TEXTURE_2D,texs[1]);  // ligar texturas
glBegin(GL_POLYGON);

	glNormal3f(0.0,0.0,1.0);
	glTexCoord2f(0.0,0.0);
	glVertex3f(-10,-10,0.0);
	glTexCoord2f(0.0,1.0);
	glVertex3f(-10,10,0.0);
	glTexCoord2f(1.0,1.0);
	glVertex3f(10,10,0.0);
	glTexCoord2f(1.0,0.0);
	glVertex3f(10,-10,0.0);
glEnd();
glBindTexture(GL_TEXTURE_2D,0); // desligar texturas