Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Программирование графики > как загрузить bmp с альфа


Автор: E.A. 26.01.19, 21:21
При отображении текстуры с альфа каналом изображение искажается, похоже что не хватает данных именно с альфа.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    AUX_RGBImageRec *FormLoadBMP(char filename[256])
    {
        FILE *file = NULL;
        if (!filename)
        {
            return NULL;
        }
        file = fopen(filename, "r");
        if (file)
        {
            fclose(file);
            return auxDIBImageLoad(filename);
        }
        return NULL;
    }
     
    // ...
     
        AUX_RGBImageRec *TextureImage[1];
        memset(TextureImage, 0, sizeof(void *)*1);
        for (i=0; i<1; i++)
        {
        glGenTextures(1, &e::texture[i]);
        glBindTexture(GL_TEXTURE_2D, e::texture[i]);
        glTexImage2D(GL_TEXTURE_2D, 0, 4, TextureImage[i]->sizeX, TextureImage[i]->sizeY, 0, GL_RGBA, GL_UNSIGNED_BYTE, TextureImage[i]->data);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        }
     
    // для RGB все работает нормально
    // glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[i]->sizeX, TextureImage[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[i]->data);


Как правильно загрузить текстуру с альфа каналом ?

Автор: E.A. 27.01.19, 15:41
Нашел как загружается файл, но становится прозрачным не только фон(где альфа черное) но и рисунок.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    data = (unsigned char*) malloc(64 * 64 * 4);
    fread(data, 54, 1, file);
    fread(data, 64 * 64 * 4, 1, file);
     
    glGenTextures(1, &e::texture[i]);
    glBindTexture(GL_TEXTURE_2D, e::texture[i]);
    glTexImage2D(GL_TEXTURE_2D, 0, 4, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
     
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
     
    // ...
     
    glEnable(GL_ALPHA_TEST);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // если менять в этой функции аргументы, то появляется картинка но прозрачная картинка а не фон...

Автор: E.A. 27.01.19, 15:51
Уважаемые коллеги, можете проверить правильный ли альфа канал в рисунке bmp ?
pic.rar (, : 155)

Автор: Mikle 28.01.19, 06:24
В твоём bmp альфаканал есть, но он чистый - нули.
Вот как-то так должно быть:
pic1.zip (, : 164)

Автор: E.A. 28.01.19, 08:07
Mikle Спасибо ! получилось, работает как надо.
А как сделать такой рисунок, вот как я делал в фотошопе:
photoshopgif.GIF (, : 523)
Что нужно включить или как это делается ?

Автор: E.A. 28.01.19, 08:08
рисунок в архиве с большим разрешением
photoshop.rar (, : 157)

Автор: E.A. 28.01.19, 08:40
Разобрался, нужно было перейти на вкладку Channels и добавить канал Альфа 1
pichelp.GIF (, : 556)

Спасибо. Вопрос решен.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)