Как загрузить значок с прозрачным фоном и правильно отобразить его с помощью C ++ / OpenGL? - PullRequest
0 голосов
/ 15 марта 2012

Я сейчас пытаюсь загрузить значок с прозрачным фоном.

Затем я создаю из него растровое изображение и пытаюсь отобразить биты с помощью glTexImage2D ().

Но фонзначок никогда не становится прозрачным: (*

Вот мой код:

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;

Редактировать: я изменил код, чтобы быть уверенным, что мои биты имеют альфа-канал. ТеперьЯ заполняю область pxl размером 32x32 пользовательскими значениями, чтобы увидеть, что происходит, вместо загрузки значка. Он по-прежнему не работает!

Чего мне не хватает? Или это просто невозможно?

1 Ответ

1 голос
/ 15 марта 2012

Вы должны включить смешивание и установить правильный режим смешивания.

glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Также, если вы заполните весь альфа-канал 255, он все равно будет непрозрачным. Попробуйте 128 или что-то вместо этого.

...