ES 2.0 Multi-Pass & Render to Texture реализацию - PullRequest
7 голосов
/ 06 декабря 2010

Мне нужна помощь в настройке многопроходного рендеринга с помощью OpenGL ES 2.0 на iPhone. Мне не удалось найти пример, который реализует как рендеринг в текстуру, так и многопроходное затенение.

Я ищу некоторые инструкции и пример кода, которые реализуют:

  • Первый этап: рендеринг в текстуру
  • Второй этап: введите текстуру и отобразите на экране

Я ссылаюсь на Apple Руководство по программированию OpenGL ES , Язык затенения OpenGL (Оранжевая книга) и Книгу 3D-программирования О'Рейли для iPhone.

Оранжевая книга обсуждает отложенное затенение и предоставляет две шейдерные программы для рендеринга первого прохода и второго прохода, но не предоставляет пример кода для настройки этого приложения или показывает, как передавать данные между обоими шейдерами.

Вопросы:

  • Как сделать рендеринг на текстуру?
    • Использование glDrawElements
    • Как ввести эту текстуру для следующего прохода?
  • Как реализовать две программы затенения?
  • Как чередовать программы шейдинга первого и второго прохода?
    • Нужно прикрепить, отсоединить и вызвать 'use' для каждого прохода?
  • Как реализовать многопроходное затенение?

Ответы [ 2 ]

4 голосов
/ 12 июля 2011

Несколько недель назад я написал короткий пример выполнения этого (несколько проходов рендеринга в текстуру на iPhone с использованием OpenGL ES 2.0): http://www.mat.ucsb.edu/a.forbes/blog/?p=245

**

Редактировать, это сообщение немного старое, и оно переместилось сюда: http://blog.angusforbes.com/openglglsl-render-to-texture/

**

3 голосов
/ 13 мая 2011

Хорошо, прежде всего: я не эксперт по OpenGL ES 2.0.Я был как бы в той же ситуации, когда хотел выполнить настройку многопроходного рендеринга в одном из моих первых приложений OpenGL ES.

Я также использовал Оранжевую книгу.Проверьте главу 12.Framebuffer Objects> Примеры .Первый пример демонстрирует, как использовать кадровый буфер для рендеринга в текстуру, а затем рисует эту текстуру на экране.

В основном, используя этот пример, я создал приложение, которое рендерит некоторую геометрию в текстуру с помощью шейдера эффектов, а затем рендерит эту текстуру на экран, наложенный слой с другим содержимым, используя другой шейдер.

Я не уверен, что это лучший подход, но он работает для моих целей.Моя настройка:

  • Я создаю два кадровых буфера, по умолчанию и закадровый.То же самое для рендеринга буфера
  • Я создаю текстуру, которую приложение будет отображать на
  • Я привязываю закадровый кадровый буфер и присоединяю к нему текстуру, используя glFramebufferTexture2D

Myрендеринг:

  • привязка закадрового кадрового буфера.
  • использование моей первой программы шейдера
  • рисование моей геометрии
  • связывание буфера кадров по умолчанию
  • используйте мою вторую шейдерную программу
  • нарисуйте полноэкранный квад с прикрепленной к нему текстурой.
...