Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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) Спасибо. Вопрос решен. |