texture colours opengl
- by user1324894
Hi I am making a simple 2D game in c++ and for the map I am doing texture mapping by using tiles and assigning textures to those tiles. However, when I run the programme the textures become black and white when I want them to be the colour they are in the .png image. This is my code:
int worldMap[10][10] = {
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
};
void background()
{
glClearColor(0.0,0.0,0.0,0.0);
/**********************************************************************************************/
// Texture loading object
nv::Image img;
// Return true on success
if(img.loadImageFromFile("Image_Loading/field.png"))
{
glGenTextures(1, &myTexture);
glBindTexture(GL_TEXTURE_2D, myTexture);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexImage2D(GL_TEXTURE_2D, 0, img.getInternalFormat(), img.getWidth(), img.getHeight(), 0, img.getFormat(), img.getType(), img.getLevel(0));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16.0f);
}
else
MessageBox(NULL, "Failed to load texture", "End of the world", MB_OK | MB_ICONINFORMATION);
/**********************************************************************************************/
}
void drawTiles (void) { //our function to draw the tiles
for (int i = 0; i < 10; i++) //loop through the height of the map
{
for (int j = 0; j < 10; j++) //loop through the width of the map
{
if (worldMap[i][j] == 0) //if the map at this position contains a 0
{
glBindTexture( GL_TEXTURE_2D, myTexture ); //bind our grass texture to our shape
}
glPushMatrix(); //push the matrix so that our translations only affect this tile
glTranslatef(j, -i, 0); //translate the tile to where it should belong
glBegin (GL_QUADS); //begin drawing our quads
glTexCoord2d(10, 0);
glVertex2f((-10 + mapX),(-10 + mapY)); //with our vertices we have to assign a texcoord
glTexCoord2d(10, 0);
glVertex2f((10 + mapX),(-10 + mapY)); //so that our texture has some points to draw to
glTexCoord2d(10, 10);
glVertex2f((10 + mapX),(10 + mapY));
glTexCoord2d(0, 10);
glVertex2f((-10 + mapX),(10 + mapY));
glEnd();
glPopMatrix(); //pop the matrix
} //end first loop
} //end second loop
}
void display()
{
glClearColor (0.0,0.0,0.0,1.0);
glClear(GL_COLOR_BUFFER_BIT);
/**********************************************************************************************/
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluOrtho2D( -5, 5, -5, 5);
glMatrixMode( GL_MODELVIEW );
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, myTexture);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
drawTiles();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
/**********************************************************************************************/
}
void character ()
{
glBegin(GL_POLYGON);
glVertex2f((-0.5+characterX),(-0.5 +characterY));
glVertex2f((-0.5+characterX),(0.5+characterY));
glVertex2f((0.5+characterX),(0.5+characterY));
glVertex2f((0.5+characterX),(-0.5+characterY));
glTranslatef(characterX, characterY, 0.0f);
glEnd();
}
Can anybody help please?