windows - Sådan indlæser du et ikon med gennemsigtig baggrund og viser det korrekt med C ++/OpenGL?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger for øjeblikket at indlæse et ikon, der har en gennemsigtig baggrund.


Så opretter jeg en bitmappe fra det og forsøger at vise bitene via glTexImage2D ().


Men ikonets baggrund bliver aldrig gennemsigtig :(


Her er en del af min kode:


DWORD dwBmpSize = 32*32*4;
byte* bmBits = new byte[dwBmpSize];

for(unsigned int i = 0; i <dwBmpSize; i+=4)
{
    bmBits[i] = 255;  // R
    bmBits[i+1] = 0;  // G
    bmBits[i+2] = 0;  // B
    bmBits[i+3] = 255;// A
    // I always get a red square, no matter what value i fill into alpha
}

//create texture from bitmap
glTexImage2D(target, 0,
    GL\_RGBA, 32, 32,
    0, GL\_RGBA, GL\_UNSIGNED\_BYTE, bmBits);

delete bmBits;


Rediger: Jeg har ændret koden for at være sikker på, at mine bits har en alfakanal.
Nu fylder jeg et 32x32 pxl område med brugerdefinerede værdier for at se, hvad der sker, i stedet for at lægge et ikon. Det virker stadig ikke!


Hvad mangler jeg? Eller er det bare ikke muligt?

Bedste reference


Du skal aktivere blanding og indstille den korrekte blandingstilstand.


glEnable (GL\_BLEND);
glBlendFunc (GL\_SRC\_ALPHA, GL\_ONE\_MINUS\_SRC\_ALPHA);


Også hvis du fylder hele alfakanalen med 255, vil den stadig være uigennemsigtig. Prøv 128 eller noget i stedet.