Original Post
Hi,
I''m dealing with a problem - I have a rotating cube and I want to apply a different texture for every side (face) of it.
The problem is with glBindTexture() - if I bind only one texture in my init function, everything works ok; but if I use more glBindTexture() functions it doesn''t work - if I use them in my init function (which''s called only once) a last binded texture is applied to a cube (that''s normal, but ->). But if I use glBindTexture() in my render function, everything goes wrong - it doesn''t work; the cube isn''t textured at all (it has currently selected color).
Here''s the code, can anyone help and tell what''s wrong, please?
----------------------------------------------------------------
BITMAPINFOHEADER BMP1_Info;
BITMAPINFOHEADER BMP2_Info;
unsigned char *BMP1_Data;
unsigned char *BMP2_Data;
unsigned int Tex_Object [2];
float rot;
void InitGL ()
{
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth (1.0f);
glShadeModel (GL_SMOOTH);
glEnable (GL_DEPTH_TEST);
glDepthFunc (GL_LEQUAL);
glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable (GL_CULL_FACE);
glFrontFace (GL_CCW);
BMP1_Data = LoadBMP ("Data/tex1.bmp", &BMP1_Info);
BMP2_Data = LoadBMP ("Data/tex2.bmp", &BMP2_Info);
glEnable (GL_TEXTURE_2D);
glGenTextures (2, Tex_Object);
glBindTexture (GL_TEXTURE_2D, Tex_Object [0]);
glBindTexture (GL_TEXTURE_2D, Tex_Object [1]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, BMP1_Info.biWidth, BMP1_Info.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, BMP1_Data);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, BMP2_Info.biWidth, BMP2_Info.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, BMP2_Data);
}
void RenderGL ()
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity ();
glTranslatef (0.0f, 0.0f, -10.0f);
glScalef (2.0f, 2.0f, 2.0f);
glRotatef (rot, 1.0f, 0.0f, 0.0f);
glRotatef (rot, 0.0f, 1.0f, 0.0f);
glRotatef (rot, 0.0f, 0.0f, 1.0f);
// front face
/// if I write glBindTexture in render function, cube isn''t textured
glBindTexture (GL_TEXTURE_2D, Tex_Object [0]);
glBegin (GL_QUADS);
glTexCoord2f (1.0f, 0.0f); glVertex3f (1.0f, -1.0f, 1.0f);
glTexCoord2f (1.0f, 1.0f); glVertex3f (1.0f, 1.0f, 1.0f);
glTexCoord2f (0.0f, 1.0f); glVertex3f (-1.0f, 1.0f, 1.0f);
glTexCoord2f (0.0f, 0.0f); glVertex3f (-1.0f, -1.0f, 1.0f);
glEnd ();
// back face
glBindTexture (GL_TEXTURE_2D, Tex_Object [1]);
glBegin (GL_QUADS);
glTexCoord2f (0.0f, 1.0f); glVertex3f (1.0f, 1.0f, -1.0f);
glTexCoord2f (0.0f, 0.0f); glVertex3f (1.0f, -1.0f, -1.0f);
glTexCoord2f (1.0f, 0.0f); glVertex3f (-1.0f, -1.0f, -1.0f);
glTexCoord2f (1.0f, 1.0f); glVertex3f (-1.0f, 1.0f, -1.0f);
glEnd ();
// left face
glBindTexture (GL_TEXTURE_2D, Tex_Object [0]);
glBegin (GL_QUADS);
glTexCoord2f (1.0f, 0.0f); glVertex3f (-1.0f, -1.0f, 1.0f);
glTexCoord2f (1.0f, 1.0f); glVertex3f (-1.0f, 1.0f, 1.0f);
glTexCoord2f (0.0f, 1.0f); glVertex3f (-1.0f, 1.0f, -1.0f);
glTexCoord2f (0.0f, 0.0f); glVertex3f (-1.0f, -1.0f, -1.0f);
glEnd ();
// right face
glBindTexture (GL_TEXTURE_2D, Tex_Object [1]);
glBegin (GL_QUADS);
glTexCoord2f (1.0f, 0.0f); glVertex3f (1.0f, -1.0f, -1.0f);
glTexCoord2f (1.0f, 1.0f); glVertex3f (1.0f, 1.0f, -1.0f);
glTexCoord2f (0.0f, 1.0f); glVertex3f (1.0f, 1.0f, 1.0f);
glTexCoord2f (0.0f, 0.0f); glVertex3f (1.0f, -1.0f, 1.0f);
glEnd ();
// bottom face
glBindTexture (GL_TEXTURE_2D, Tex_Object [0]);
glBegin (GL_QUADS);
glTexCoord2f (1.0f, 0.0f); glVertex3f (1.0f, -1.0f, -1.0f);
glTexCoord2f (1.0f, 1.0f); glVertex3f (1.0f, -1.0f, 1.0f);
glTexCoord2f (0.0f, 1.0f); glVertex3f (-1.0f, -1.0f, 1.0f);
glTexCoord2f (0.0f, 0.0f); glVertex3f (-1.0f, -1.0f, -1.0f);
glEnd ();
// top face
glBindTexture (GL_TEXTURE_2D, Tex_Object [1]);
glBegin (GL_QUADS);
glTexCoord2f (1.0f, 0.0f); glVertex3f (1.0f, 1.0f, 1.0f);
glTexCoord2f (1.0f, 1.0f); glVertex3f (1.0f, 1.0f, -1.0f);
glTexCoord2f (0.0f, 1.0f); glVertex3f (-1.0f, 1.0f, -1.0f);
glTexCoord2f (0.0f, 0.0f); glVertex3f (-1.0f, 1.0f, 1.0f);
glEnd ();
rot += 0.2f;
if (rot >= 360.0f)
{
rot = 0.0f;
}
}