У меня есть BMP, сохраненный в 32bit через Photoshop. Первый 24 бит должен представлять RGB, а последний 8 бит должен представлять альфа-канал. я загружаю мои растровый:C++ opengl bmp и альфа-канал
Bitmap* bStart = new Bitmap("starten.bmp");
Я загрузка файла и установку значений для альфа-канала
Bitmap::Bitmap(const char* filename) {
FILE* file;
file = fopen(filename, "rb");
if(file != NULL) { // file opened
BITMAPFILEHEADER h;
fread(&h, sizeof(BITMAPFILEHEADER), 1, file); //reading the FILEHEADER
fread(&this->ih, sizeof(BITMAPINFOHEADER), 1, file);
this->pixels = new GLbyte[this->ih.biHeight * this->ih.biWidth * this->ih.biBitCount/8];
fread(this->pixels, this->ih.biBitCount/8 * this->ih.biHeight * this->ih.biWidth, 1, file);
fclose(file);
for (int i = 3; i < this->ih.biHeight * this->ih.biWidth * this->ih.biBitCount/8; i+=4) {
this->pixels[i] = 255;
}
}
}
Установки текстуры:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bStart->ih.biWidth, bStart->ih.biHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, bStart->pixels);
в инициализацию вещи :
glutInit(argcp, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
//not necessary because we using fullscreen
//glutInitWindowSize(550, 550);
//glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]); //creating the window
glutFullScreen(); //go into fullscreen mode
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //art und weise wie texturen gespeicehrt werden
glClearColor (1.0, 0.6, 0.4, 0.0);
//setting the glut functions
glutDisplayFunc(displayCallback);
glutKeyboardFunc(keyboardCallback);
glutMainLoop(); //starting the opengl mainloop... and there we go
Я могу видеть свои текстуры в своем приложении, но их фон не прозрачен ... это своего рода светло-голубой. Что я делаю неправильно?
да 4-й канал объявлен как X и я красный, это следует хранить некоторая информация о заполнении ... вот почему я сам переписываю байт. – soupdiver
@skelle: так, как вы думаете, тогда альфа хранится? также это противоречит первому предложению вашего вопроса. –
@TomWhittock Альфа-канал должен храниться в 4-м канале, который я переписываю с 255 для каждого пикселя. Также я говорю, что моя текстура использует RGBA, но я не получаю прозрачный фон. – soupdiver