Объект Framebuffer - Framebuffer object

В объект кадрового буфера архитектура (FBO) является расширением OpenGL для гибкой визуализации вне экрана, включая рендеринг в текстура. Захватывая изображения, которые обычно выводятся на экран, его можно использовать для реализации большого количества различных фильтров изображений и эффектов постобработки. FBO аналогичен модель целей рендеринга в DirectX. Он используется в OpenGL из-за его эффективности и простоты использования. Использование FBO не страдает от накладных расходов, связанных с переключением контекста рисования OpenGL, и в значительной степени заменило pbuffer и другие методы, включающие переключение контекста.

Использует

FBO имеет два основных применения: пост-обработка визуализированных изображений и композиция между различными сценами. Вот некоторые примеры:

  1. Визуализированное изображение захватывается и подвергается Фрагментные шейдеры или другие манипуляции. Это позволяет реализовать многие из популярных сегодня эффектов компьютерной графики, включая добавление эффекта размытия или цветения.
  2. Может использоваться для создания видов других сцен, например: телевизор в доме, показывающий вид со дополнительной камеры. Сцена может быть визуализирована через FBO в текстуру, а затем эта текстура может быть применена к поверхности телевизора. Иногда это называется «Рендеринг в текстуру» или RTT.

Преимущества перед другими методами

Методы с использованием FBO считаются лучшими, потому что:

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

Архитектура

Чтобы использовать FBO, нужно просто создать его экземпляр. Вместе с FBO идет несколько насадок. Затем можно прикрепить их к выбранному приемнику: либо текстура, или буфер рендеринга.

Например:

  • Создайте FBO и привяжите его.
  • Присоедините буфер цвета (либо как RenderBuffer, либо как текстуру) к FBO.
  • Присоедините буфер глубины (либо как RenderBuffer, либо как текстуру) к FBO.
  • Свяжите собственное окно FrameBuffer (id = 0)
  • Визуализируйте текстуру на экран с помощью пиксельного шейдера в зависимости от информации о цвете и информации о глубине.

внешняя ссылка