2011-04-26 3 views
0

프레임 버퍼의 내용을 텍스처에 넣은 다음 다시 버퍼에 넣으려고합니다. 흰색 회전 된 사각형이 생깁니다. 나는 명백한 것을 간과하고 있다고 생각한다. 다음은 내가 사용하고있는 코드입니다 :프레임 버퍼의 내용을 수정하는 중 문제가 발생했습니다.

glReadBuffer(GL_AUX1); 
    glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D, textures[1]); 
    glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, rect.width(), 
     rect.height(), 0); 
    glDrawBuffer(GL_AUX1); 
    glPushMatrix(); 
    glRotatef(head - new_head, 0, 0, -1); 
    glBegin(GL_POLYGON); 
    glTexCoord2f(0, 0); 
    glVertex2f(-1, -1); 
    glTexCoord2f(0, 1); 
    glVertex2f(-1, 1); 
    glTexCoord2f(1, 1); 
    glVertex2f(1, 1); 
    glTexCoord2f(1, 0); 
    glVertex2f(1, -1); 
    glEnd(); 
    glPopMatrix(); 
    glDisable(GL_TEXTURE_2D); 

나는이 문제를 해결했다. 이 라인을 추가하면 작동하도록 :

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
+0

텍스처 생성 코드를 게시하십시오. –

+0

glCopyTexImage2d는 텍스처 생성 코드입니다 (맨 페이지를 올바르게 읽는 경우). AUX1 버퍼는 벡터 및 텍스처 조합 기술을 사용하여 일정 기간 동안 구축됩니다. 이 코드 세그먼트에서 AUX1 버퍼 내용을 회전시킨 다음 다시 넣기 위해 임시 텍스처를 만듭니다. – Bob

답변

1

당신은 glCopyTexImage2D가 가진 질감을 만들 수 없습니다, 당신은 단지 텍스처 데이터를 복사,하지만 당신은 검은 색/흰색 질감을 ​​얻을 수 있도록 질감이 단계에서 완전하지 않습니다 (불완전한 상태의 표시).

해결 방법 : 당신은 텍스처 백업 그래서 마지막 parameteres에 대해 NULL을 전달이 텍스처에 렌더링 원하는대로,

glGenTextures(....) 
glBindTexture(...) 
glTexParameter(...) //Set MIN/MAG filter 
glTexImage2D(....., NULL) 

glTexImage2D는 텍스처 이미지를 정의 (또는 복사)와 텍스처를 생성 저장소가 만들어 지지만 내용이 정의되지 않은 상태로 남습니다. 또 다른 제안은 Framebuffer Objects (FBO)를 사용하여 텍스쳐에 직접 그려 넣는 것입니다 (복사하지 않고)

관련 문제