2016-06-28 8 views
3

OpenGL rendered screen ~ PNG 이미지를 투명한 배경으로 저장하려고합니다. 그러나 제 4 채널에 들어가는 것은 모두 255 값입니다.OpenGL + SDL2에서 알파 채널을 0으로 설정할 수 없습니다.

화면에 무엇이든 그리기 전에 지우기 만해도 도움이되지 않습니다. 사전에

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); 

감사 : 나는 투명한 배경을 얻을 초기화는 OpenGL에서 수행 한 어떤

는 다음과 같은 약이다.

답변

3

기본적으로 SDL은 알파 채널이있는 프레임 버퍼를 명시 적으로 요청하지 않습니다. 실제로 알파 버퍼를 얻기 위해 창을 만들기 전에

SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 1); 

으로 전화해야합니다. 이 개념적으로 적어도 1 비트 알파를 요청합니다. 일반적으로 GL 구현은 픽셀 당 0 또는 8 비트의 알파를 가진 픽셀 형식/비주얼을 제공합니다. 최소 8 비트를 확보하려면 명시 적으로 요청할 수도 있습니다.

+0

반드시 맞습니다. –