Так. Урок я прочитал, но ничего нового там не нашел. Проект я немогу выложить по ряду причин. Могу лишь привести подробней проблему:
1. Загружаю текстуру 32x32, прозрачные участки в ней (0xFF, 0x00, 0xFF), текстура 24 бита на пиксель.
2. Преобразую текстуру в 32 битный формат (добавляю альфу), и сразу где пиксель (0xFF, 0x00, 0xFF) ставлю альфу в 0x00(полностью прозрачна).
3. Cоздаю мипмап текстуру (gluBuild2DMipmaps).
4. Ставлю в ней параметры:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
---------------------------------------------------------
5. Рисую текстуру
Вот отрывки из кода:
Код:
unsigned char *ret = new unsigned char[32*32*4];
for(int p = 0; p != 32*32; p++)
{
ret[p*4] = uncompressedData[p*3+2];
ret[p*4+1] = uncompressedData[p*3+1];
ret[p*4+2] = uncompressedData[p*3];
if(ret[p*4]==0xFF && ret[p*4+1]==0x00 && ret[p*4+2]==0xFF)
{
ret[p*4+3]= 0x00;
}
else
{
ret[p*4+3] = 0xFF;
}
}
Код:
glGenTextures(1, &newTexture.texture);
glBindTexture(GL_TEXTURE_2D, newTexture.texture);
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA,32,32,GL_RGBA,GL_UNSIGNED_BYTE,pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
Код:
glBindTexture(GL_TEXTURE_2D, TexManager->GetTexture(texnum, 0,0,0,0,false));
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 1.0f); glVertex2f((nx-cx-itype->xOffset/32)*wi/15.0f, he-(ny-cy-itype->yOffset/32+1)*he/11.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f((nx-cx+1-itype->xOffset/32)*wi/15.0f, he-(ny-cy-itype->yOffset/32+1)*he/11.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f((nx-cx+1-itype->xOffset/32)*wi/15.0f, he-(ny-cy-1-itype->yOffset/32+1)*he/11.0f);
glTexCoord2f(0.0f, 0.0f); glVertex2f((nx-cx-itype->xOffset/32)*wi/15.0f, he-(ny-cy-1-itype->yOffset/32+1)*he/11.0f);
glEnd();
Розовые края проявляются на границе непрозрачной и прозрачной области текстуры.
Могу если что кинуть спрайт и скриншот того как он отображается на экране.