Используя WebGL или OpenGL ES 2, как я могу отобразить содержимое RBO на экране? - PullRequest
3 голосов
/ 29 декабря 2011

Используя WebGL (который ограничен OpenGL ES 2 API), я успешно отрисовываю текстуру и затем отображаю эту текстуру на экране. Поскольку это текстура, она не сглаживается. Если бы я выполнял рендеринг в RBO, а затем отображал это на экране, я мог бы воспользоваться AA.

Моя настройка цели рендеринга выглядит следующим образом:

  1. Создать FBO
  2. Bind FBO
  3. Создание текстуры (для визуализации)
  4. Создание и привязка буфера глубины как RBO
  5. Прикрепить текстуру и RBO к FBO

И мой цикл обновления рендеринга выглядит так:

  1. Рендеринг сцены в FBO, созданный на шаге 2 выше
  2. Визуализация квадрата с выравниванием по экрану с текстурой, созданной на шаге 3 выше

С настольным OpenGL я бы назвал glBlitFramebuffer() вместо того, чтобы рисовать квадрант с выравниванием по экрану.

Как мне отрендерить мою сцену с помощью сглаживания? Нужно ли заменить текстуру на RBO? Если да, то какие вызовы я использую, чтобы связать RBO, чтобы нарисовать выровненный по экрану квад?

1 Ответ

4 голосов
/ 05 января 2012

Вы не можете скопировать содержимое RBO на экран в WebGL, если не выполните обратное чтение и повторно загрузите в текстуру для блитирования, что довольно медленно.

WebGL не поддерживает MSAA на FBO в любой форме (ни как RBO, ни как RTT).

Вы можете реализовать собственное сглаживание различными способами.

  • Рендеринг в формате 2: 2 с уменьшением (это делает карта Google с webgl)
  • Выполните рендеринг с размером 1: 1, запустите определение края sobel или laplace по цвету и глубине и запустите двустороннее гауссово размытие, используя силу края в качестве веса (я использовал эту технику в некоторых моих демонстрациях, она работает хорошо, http://codeflow.org/entries/2011/apr/11/advanced-webgl-part-1/)
  • Используйте рецепт морфологического сглаживания из GPU Pro 2 (я еще не пробовал)
...