#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
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 }
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);
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