繁体   English   中英

在OpenGL + SDL2中无法将Alpha通道设置为0

[英]Cannot set Alpha channel to 0 in OpenGL + SDL2

我试图将OpenGL rendered screen保存为具有透明背景的PNG图像。 但是我在第四个频道获得的全部是255值。

甚至在屏幕上绘制任何东西之前,只是清除无济于事。

我在OpenGL中进行初始化以获得透明背景的内容大致如下:

gWindow = SDL_CreateWindow("View", SDL_WINDOWPOS_UNDEFINED, 
         SDL_WINDOWPOS_UNDEFINED, width, height,
         SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN|SDL_WINDOW_RESIZABLE);
gContext = SDL_GL_CreateContext(gWindow);
GLfloat clear_col[4] = {0.0, 0.0, 0.0, 0.0};

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(fov, width/(float)height, nearplane, farplane);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(clear_col[0], clear_col[1], clear_col[2], clear_col[3]);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glShadeModel(GL_FLAT);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
pixels = (unsigned char*) malloc(width*height*4);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
// checking the values
FILE*ffp = fopen("saved.bin", "wb");
fwrite(pixels, width*height*4, 1, ffp);
fclose(ffp);

提前致谢。

默认情况下,SDL不会明确请求具有Alpha通道的帧缓冲区。 你必须打电话

SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 1);

在创建窗口之前,确保实际获得alpha缓冲区。 请注意,这在概念上要求至少1位alpha。 通常,GL实现提供每像素0或8位alpha的像素格式/视觉效果。 如果你想确保至少获得8位,你也可以明确地要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM