2011-01-17 10 views
0

OpenGL ES 2.0을 사용하여 iPhone에서 사후 처리 (흐림, 블룸 등)를 구현하려고합니다. 나는 약간 문제점으로 달리고있다. 두 번째 렌더링 단계에서 렌더링 할 때 장면 대신 화면에 완전히 검은 색 쿼드를 그려서 결국 텍스처 데이터가 누락 된 것처럼 보입니다. 그래서 원인이 단일 FBO를 사용하는지 궁금합니다. 다음과 같은 방식으로 단일 FBO를 사용하는 것은 올바르지 않습니까? 첫 번째 패스 (일반 장면 렌더링)에 대한 OpenGL ES 2.0을 사용하는 단일 FBO로 iPhone 후 처리가 가능합니까?

,

  • 나는 COLOR_ATTACHMENT_0으로 텍스처를 첨부하여 텍스처를 렌더링합니다. glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texturebuffer, 0)으로 제 2 패스에 대한

(사후 처리)

  • 난 COLOR_ATTACHMENT_0 glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0에 컬러 renderbuffer 첨부 , GL_RENDERBUFFER, colorRenderbuffer)
  • 그런 다음 첫 번째 패스의 텍스처를 사용하여 화면에서 쿼드로 렌더링합니다.

답변

1

아니요, FBO 사용이 좋습니다. 그 원인은 텍스처의 MIN/MAG 필터 (texturebuffer)를 설정하지 않았거나, 바인딩 후, glTexParameter를 사용하여 GL_MIN_FILTER 및 GL_MAG_FILTER를 GL_NEAREST 또는 GL_LINEAR로 설정하면 텍스처가 작동해야하는 것입니다.

+0

답변 해 주셔서 감사합니다. 그런 사용법을 확인해 줄 수있는 리소스가 있습니까? (나는 당신을 믿지 않지만, 훌륭한 참고 자료가 될 것입니다.) 또한 MIN/MAG 필터를 이미 설정 했으므로 다른 것으로해야합니다. 생각할 수있는 다른 일반적인 함정이 있습니까? – Jing

+0

아래에서 설명했듯이 문제는 비슷했습니다. 내 질감이 2의 거듭 제곱으로 조정되지 않았습니다. 귀하의 답변을 통해 올바른 곳을 찾고있었습니다. 감사합니다. – Jing

1

Matias가 말했듯이 디자인이 멋지게 보입니다. 나는 나 자신과 비슷한 것을했고 잘 작동했다.

다운로드 할 수있는 here 카메라 이미지를 처리하기 위해 셰이더를 사용하는 샘플 응용 프로그램을 작성했지만 glReadPixels()을 사용하면 화면에 텍스처를 직접 매핑하지 않고 화면 루틴 값을 처리 루틴으로 가져옵니다. 이를 위해 수정할 수 있습니다.

그렇지 않은 경우보다 복잡한 쉐이더 샘플 응용 프로그램 here을 만들었습니다. 한 부분에서 장면을 큐브 매핑 텍스처로 렌더링 한 다음 해당 텍스처를 두 번째 처리 단계로 공급합니다. 이것은 OpenGL ES 2.0 쉐이더로 텍스쳐를 렌더링하고 사용하는 것을 보여줍니다.

구현이 실패한 부분에 이러한 문제가있을 수 있습니다.

+0

문제는 텍스처가 2 x 512x512가 아닌 320x480 크기로 조정되었습니다. 고마워, 코드는 매우 도움이되었다. – Jing