2009-08-18 8 views
4

텍스처로 렌더링 한 다음 동일한 이미지를 그리면 모든 것이 더 어둡게 보입니다.알파 텍스처 문제로 렌더링

http://img24.imageshack.us/img24/8061/87993367.png

그때 마침내 그 후, 다른 질감으로 그 질감, 플러스 중앙 광장 (같은 색)을 렌더링, 텍스처에 색 (1, 1, 1, .8)와 왼쪽 사각형을 렌더링하고있어이 이미지를 얻으려면 텍스처와 오른쪽 아래 정사각형 (동일한 색상)을 화면에 표시합니다.

텍스쳐에 렌더링 할 때마다, 모든 것이 조금 어둡다. (필자는 아이폰의 OpenGL ES를 사용하고 있습니다)

// gen framebuffer 
GLuint framebuffer; 
glGenFramebuffersOES(1, &framebuffer); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

// gen texture 
GLuint texture; 
glGenTextures(1, &texture); 

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, texture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 
glDisable(GL_TEXTURE_2D); 

// hook it up 
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture, 0); 
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)) 
    return false; 

// set up drawing 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 
glViewport(0, 0, Screen::Width, Screen::Height); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, Screen::Width, 0, Screen::Height, -1, 1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glColor4f(1, 1, 1, 1); 

// do whatever drawing we'll do here 
Draw(); 

glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); 

아무것도 내가 잘못 여기하고있어이 있습니까 : 같은

렌더링 - 투 - 텍스처 내 코드가 보인다? 알아 내기 위해 더 많은 코드가 필요합니까? 여기에 무슨 일이 벌어지고 있을까요?

답변

6

난 단지 추측하고있어 :

을 최초의 텍스처를 그리기 당신에게 RGB 및 알파 채널 204 (0.8 * 255)를 제공합니다. 두 번째로 그릴 때 (GL_BLEND가 활성화 된 상태로 가정합니다) 중간 회색을주는 80 %의 알파를 가진 밝은 회색 204 RGB를 얻게됩니다.

해결책 : glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)을 사용하고 색상을 미리 배정하십시오.

+0

고마워요! 나는 그것의 파급 효과에 대해 생각하지 않고'glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)'를 여전히 사용하고 있었다. –

관련 문제