2014-05-20 3 views
1

framebuffer 객체에 2 패스 흐림 효과를 적용하고 있습니다. FBO에서 전체 장면이 흐려 지려고하는 이미지로 덮여 있는지 확인하십시오. 여기에 과정이 있습니다.OpenGL : 렌더링 된 텍스처를 Framebuffer 객체에서로드

  1. 내가 흐리게 처리해야하는 이미지의 크기로 FBO을 설정했습니다.
  2. 내가 (setupOrtho(FBO's dimensions)로 불리는) 다음과 같은 기능을 사용하여 Orthographic Projection을 설정하고 있습니다 :

    glViewport (W, 0, 0, H) glMatrixMode (GL_PROJECTION) glLoadIdentity 함수() glOrtho (0, 1,

  3. 0,1, -1,1)가 glMatrixMode (GL_MODELVIEW) glLoadIdentity 함수()이 투영을 사용 FBO 그릴. FBO의 바인딩을 해제합니다 (화면으로 돌아 가기).
  4. setupPerspective(window's dimensions)을 호출하고 위의 glOrthoglFrustum으로 바꾸어 Perspective View으로 전환하십시오.

간단한 흰색 사각형을 그릴 경우보기 전환이 예상대로 작동합니다. 하나의 쿼드는 Orthographic Projection에 그리고 다른 하나는 Perspective View에 그려집니다. 이제 렌더링 된 텍스처를 FBO (RENDEREDTEXTURE)으로 가져옵니다.

메인 장면의 Orthographic ProjectionRENDEREDTEXTURE을 바인딩하면 흐린 이미지가 표시됩니다. 내 메인 장면의 Perspective View에 그것을 바인딩하면 이전에 보이는 흰색 쿼드 (Perspective View에 그려져 있음)가 사라집니다.

해답 : 답변으로 게시 됨.

참고 : 텍스처를 사용할 때 MIPMAP 생성을 잊지 마십시오.

여기에 어떤 문제가있을 수 있습니까?

FBO에서 처리하고 싶은 이미지 만 볼 수 있습니다 (내가 직각 투영을 한 경우). 메인 장면에서 처리 된 이미지는 다른 텍스처와 같습니다. 이미지 파일에서로드됩니다.

+0

"작동하지 않음"을 정의하십시오. GPU에 화재가 발생합니까? 그것은 추락합니까? 결과가 잘못 되었습니까? –

+0

@BartekBanachewicz 정보를 업데이트했습니다. – activatedgeek

+0

위의 코드 블록도'setupPerspective'와 같은 함수로 묶여 있다고 가정합니다.어쨌든 프로그램을 실행하여 gDEBugger를 실행하고 원근감으로 다시 렌더링하기 전에 필요한 모든 상태 (행렬, FBO)가 원하는 값으로 다시 설정되었는지 확인할 수 있습니다. –

답변

0

framebuffer 텍스처의 경우 텍스처에 대해 Mipmaps이 자동으로 생성되지 않습니다. framebuffer이 원하는 장면을 렌더링 한 후에는 수동으로 트리거해야합니다.

기본 프레임 버퍼로 다시 전환 한 직후 다음 스 니펫을 사용하십시오.

glBindTexture(GL_TEXTURE_2D, YOUR_FINAL_RENDERED_TEXTURE_ID) 
    glGenerateMipmap(GL_TEXTURE_2D) 
    glBindTexture(GL_TEXTURE_2D, 0) 

그런 다음 일반적으로이 텍스처를 아무 데나 바인딩 할 때와 마찬가지로 YOUR_FINAL_RENDERED_TEXTURE_ID을 사용할 수 있습니다.

+1

사물의 소리 (프레임 버퍼를 흐리게 함)에서 처음에는 밉맵이 필요하지 않습니다. 저장 용량의 1/3을 더하고 생성하는 데 불필요한 처리 시간이 필요합니다. 더 간단한 해결책은 기본값 인'GL_NEAREST_MIPMAP_LINEAR' 대신'GL_NEAREST' 나'GL_LINEAR'와 같은보다 합리적인 축소 필터를 사용하는 것입니다. –

+0

@ AndonM.Coleman 좋아요! 고마워! – activatedgeek