Объект фреймбуфера
Архитектура объектов буфера кадра (FBO) — это расширение OpenGL для выполнения гибкого внеэкранного рендеринга, включая рендеринг в текстуру . Захватывая изображения, которые обычно выводятся на экран, его можно использовать для реализации большого количества фильтров изображений и эффектов постобработки. FBO аналогичен модели целей рендеринга в DirectX . Он используется в OpenGL из-за его эффективности и простоты использования. Использование FBO не связано с накладными расходами, связанными с переключением контекста рисования OpenGL, и в значительной степени заменило pbuffer и другие методы, включающие переключение контекста.
Использование
[ редактировать ]FBO имеет два основных применения: постобработка визуализированных изображений и композиция между различными сценами. Некоторые примеры:
- Визуализированное изображение захватывается и подвергается фрагментарным шейдерам или другим манипуляциям. Это позволяет реализовать многие популярные сегодня эффекты компьютерной графики, включая добавление эффекта размытия или цветения.
- Может использоваться для создания видов других сцен, например: телевизор в доме, показывающий вид со второй камеры. Сцену можно визуализировать через FBO в текстуру, а затем эту текстуру можно применить к поверхности телевизора. Иногда это называют «рендерингом в текстуру» или RTT.
Преимущества перед другими методами
[ редактировать ]Методы, включающие FBO, считаются лучшими, потому что:
- Его проще настроить, чем большинство других методов.
- Не требует переключения контекста.
- Более эффективен, поскольку ресурсы используются в одном контексте.
- Более гибок, поскольку все данные из буфера глубины , буфера трафарета и т. д. можно получить
Архитектура
[ редактировать ]Чтобы использовать FBO, нужно просто создать его экземпляр. Вместе с FBO поставляется несколько насадок. Затем их можно прикрепить к выбранному приемнику: либо текстуру , либо буфер рендеринга .
Например:
- Создайте FBO и привяжите его.
- Прикрепите буфер цвета (в виде RenderBuffer или текстуры) к FBO.
- Прикрепите буфер глубины (в виде RenderBuffer или текстуры) к FBO.
- Привяжите собственное окно FrameBuffer (id=0)
- Отобразите текстуру на экране с помощью пиксельного шейдера в зависимости как от информации о цвете, так и от информации о глубине.