Deklaruje dwie zmienne do przechowywania tekstury:
// deklaracja zmiennej na obraz
ILuint Grass = NULL;
ILuint Tower = NULL;
Potem ładuje tą funkcją:
ILuint LoadImage(ILuint & Texture, char *Path)
{
// generowanie nazwy obrazu
ilGenImages(1, &Texture);
// wybranie biezacego obrazu
ilBindImage(Texture);
// ladowanie obrazu z pliku
ilLoadImage(Path);
// konwertowanie tekstury
if (ilGetInteger(IL_IMAGE_BITS_PER_PIXEL) == 24)ilConvertImage(IL_RGB, IL_UNSIGNED_BYTE);
else if (ilGetInteger(IL_IMAGE_BITS_PER_PIXEL) == 32)ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
// obsluga bledow
if(ilGetError() != IL_NO_ERROR)return ilGetError();
}
o tak:
void LoadTextures()
{
LoadImage(Tower,".\\Graphics\\Tower.png");
LoadImage(Grass,".\\Graphics\\Grass_01.png");
}
I na koniec wyświetlam:
DrawImage2D(64,64,960,540,Tower);
Funkcją:
void DrawImage2D(int x, int y, int WidthImage, int HeightImage, ILuint ImgID)
{
// kasowanie tekstury
glDeleteTextures(1, & ImgID);
// generowanie nazwy tekstury
glGenTextures( 1, & ImgID );
// wybranie biezacej tekstury
glBindTexture( GL_TEXTURE_2D, ImgID );
// tworzenie tekstury
glTexImage2D( GL_TEXTURE_2D, 0, ilGetInteger( IL_IMAGE_BPP ), ilGetInteger( IL_IMAGE_WIDTH ),
ilGetInteger( IL_IMAGE_HEIGHT ), 0, ilGetInteger( IL_IMAGE_FORMAT ), GL_UNSIGNED_BYTE, ilGetData() );
// ustalenie parametrów tekstury
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
// ustalenie trybu teksturowania
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
// ustalenie koloru kwadratu
glColor3f( 0.0, 0.0, 0.0 );
// rysowanie kwadratu pod teksture
glBegin( GL_QUADS );
glTexCoord2f( 0, 0 );
glVertex2f( x, y );
glTexCoord2f( 1, 0 );
glVertex2f( x + WidthImage, y );
glTexCoord2f( 1, 1 );
glVertex2f( x + WidthImage, y + HeightImage );
glTexCoord2f( 0, 1 );
glVertex2f( x, y + HeightImage );
glEnd();
}
Problem w tym że jeśli załadowałem teksturę Tower a potem Grass to zamiast wieży mam trawę mimo, że chciałem wyświetlić wieżę.
Przed.png załadowaniem tekstury trawy a po jej załadowaniu otrzymuje Po.png mimo, że ciągle wyświetlam wieże.
Wniosek taki, że wyświetlam ostatnio załadowany obraz ale nie wiem czemu.