Hi, that’s quite easy, you know
you can check the NeHe lesson about that
in example you can do that:
AUX_RGBImageRec *LoadBMP(char *Filename) // Load a BMP
{
FILE *File=NULL; // create a file Handle
if(!Filename) // Verify if the file was given
{
return NULL; // if not, quits
}
File=fopen(Filename,"r"); // Verify the BMP existence
if(File)
{
fclose(File); // close the file handle created
return auxDIBImageLoad(Filename); // load Bmp and return a pointer
}
return NULL;
}
int LoadGLTexture() // load BMP and convert texture
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[4];// image record, store width,height and data
memset(TextureImage,0,sizeof(void *) *4);// image record cleared now (make sure it's empty)
if((TextureImage[0]=LoadBMP("myTexture_1.bmp")) && (TextureImage[1]=LoadBMP("myTexture_2.bmp")) && (TextureImage[2]=LoadBMP("myTexture_3.bmp")) && (TextureImage[3]=LoadBMP("myTexture_4.bmp")))
{
Status=TRUE;
glGenTextures(4, &texture[0]);// Create the texture
for (loop=0; loop<4; loop++)
{
glBindTexture(GL_TEXTURE_2D, texture[loop]); // texture generation using data
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // linear filtering (GL_NEAREST for slowest Cpu/Gfxcard)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 4, TextureImage[loop]->sizeX,TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data); // generate the texture
}
}
/*******************************************#
* ---Free()--- *
* Il ne faut surtout pas oublier de liberer *
* l'espace utilisé, donc les deux bmp et *
* aussi Textureimage[loop] qui la stockait *
********************************************/
for (loop=0; loop<4; loop++)
{
if(TextureImage[loop])
{
if(TextureImage[loop]->data)
{
free(TextureImage[loop]->data);
}
free(TextureImage[loop]);
}
}
return Status;
}
int InitGL(GLvoid) // Setup needed by OpenGL
{
if(!LoadGLTexture())
{
return FALSE;
}
BuildFont(); // our fonts builded here
glShadeModel(GL_SMOOTH);// Smooth shading enabled
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Set background as black
glClearDepth(1.0f); // Setup of Depth buffer
// Depth buffer test enabled
glDepthFunc(GL_LEQUAL);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Correction for Perspective view(nice view, bad performance)
quadratic=gluNewQuadric();
gluQuadricNormals(quadratic, GLU_SMOOTH);
gluQuadricTexture(quadratic, GL_TRUE);
return TRUE; // In this case all Inits are OK, if they're not it return FALSE then the program quits
}
int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the Scene and the Depth buffer
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glHint(GL_POLYGON_SMOOTH,GL_NICEST);
glBindTexture(GL_TEXTURE_2D, texture[2]);
glTranslatef(0.6f,0.57f,-10.0f); // tube position
glRotatef(xrot, 0.0f,0.0f,1.0f);
gluCylinder(quadratic,1.0f,1.0f,10.0f,64,64);
return TRUE; // In this case all operations are OK, if they're not it return FALSE then the program quits
}
ok, this is not a perfect method, and when you compile that it doesn’t work, and this is quite slow and and and…
hey, cool guys
anyway my method is developped from NeHe’s method (which is developped from MR. OpenGL method i guess )
I use it on a little OpenGL example
http://navilinux.free.fr/download/prod/sampleGL.zip
hope that helps juste a little