Заредих PNG изображение в моята сцена. Докато самото изображение се зарежда правилно (това, което искам да се показва), проблемът, който имам, е с прозрачността около изображението. Там, където трябва да има прозрачност, има бели и черни петна, изпълващи това пространство.
void Renderer::loadTexture()
{
const char textName[64] = ".\\foo.png";
FIBITMAP *dib = FreeImage_Load(FIF_PNG, textName, PNG_DEFAULT);
dib = FreeImage_ConvertTo24Bits(dib);
if (FreeImage_GetBPP(dib) != 32)
{
FIBITMAP* tempImage = dib;
dib = FreeImage_ConvertTo32Bits(tempImage);
}
if (dib != NULL)
{
glGenTextures(1, &g_textureID);
glBindTexture(GL_TEXTURE_2D, g_textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
BYTE *bits = new BYTE[FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib) * 4];
BYTE *pixels = (BYTE*) FreeImage_GetBits(dib);
for (int pix = 0; pix<FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib); pix++)
{
bits[pix * 4 + 0] = pixels[pix * 4 + 2];
bits[pix * 4 + 1] = pixels[pix * 4 + 1];
bits[pix * 4 + 2] = pixels[pix * 4 + 0];
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FreeImage_GetWidth(dib), FreeImage_GetHeight(dib), 0,
GL_RGBA, GL_UNSIGNED_BYTE, bits);
cout << textName << " loaded." << endl;
FreeImage_Unload(dib);
delete bits;
}
}
for
цикъл? Вярно ли е? Не трябва ли да копирате и алфата? - person acfrancis   schedule 09.11.2013