постобработка iPhone с одним FBO с Opengl ES 2.0? - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь реализовать постобработку (размытие, цветение и т. Д.) На iPhone с помощью OpenGL ES 2.0. Я сталкиваюсь с некоторыми проблемами. При рендеринге во время моего второго шага рендеринга я заканчиваю тем, что рисую полностью черный квад на экране вместо сцены (кажется, что данные текстуры отсутствуют), поэтому мне интересно, если причина заключается в использовании одного FBO. Неправильно ли использовать один FBO следующим образом?

Для первого прохода (обычный рендеринг сцены),

  • Я прикрепляю текстуру как COLOR_ATTACHMENT_0 и отрисовываю текстуру. glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, текстурный буфер, 0)

Для второго прохода (постобработка),

  • Я присоединяю цветной буфер визуализации к COLOR_ATTACHMENT_0 glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer)
  • Затем используйте текстуру с первого прохода для рендеринга на экране в качестве четырехугольника.

Ответы [ 2 ]

1 голос
/ 17 января 2011

Как утверждает Матиас, ваш дизайн выглядит хорошо. Я сам сделал что-то подобное, и у меня все получилось.

Я написал пример приложения, в котором используются шейдеры для обработки изображений с камеры, которые можно загрузить здесь , но в котором используется glReadPixels() для извлечения значений за кадром в процедуру обработки, а не для непосредственного отображения результата Текстура на экране. Вы можете изменить его, чтобы сделать это.

В противном случае я создал более сложное приложение-пример шейдера здесь , которое в одной части визуализирует сцену в текстуру с кубом, а затем передает эту текстуру на второй этап обработки. Это должно иллюстрировать рендеринг и использование текстуры с шейдерами OpenGL ES 2.0.

Может быть, они могли бы пролить свет на то, где ваша реализация терпит неудачу.

1 голос
/ 17 января 2011

Нет, использование FBO в порядке. Вероятно, причина в том, что вы не установили фильтры MIN / MAG вашей текстуры (texturebuffer), после связывания установите GL_MIN_FILTER и GL_MAG_FILTER в GL_NEAREST или GL_LINEAR с помощью glTexParameter, и ваша текстура должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...