Framebuffer Object
Frame buffer object (FBO) — расширение архитектуры OpenGL для гибкой закадровой отрисовки, включая отрисовку в текстуру. Замена цели вывода с экранного буфера на FBO, может быть использована для применения всевозможных фильтров и эффектов пост-обработки. Это аналог render targets model в DirectX. Оно используется в OpenGL для большей эффективности и простоты использования. FBO не требует создания и переключения контекстов отрисовки, которые зависят от платформы, а также это более быстрая операция по времени, по сравнению с pbuffer[1].
ИспользованиеПравить
Оно имеет два основных направления использования: пост-обработка полученного изображения и объединение различных сцен. К примеру:
- Отрисованное изображение захватывается и передается на обработку к фрагментным шейдерам или подвергается другим манипуляциям. Это позволяет осуществлять множество популярных сейчас графических эффектов, включая размытие и bloom.
- Может использоваться для просмотра других сцен. К примеру, телевизор в доме показывает вид из второй камеры. Сцена в телевизоре может быть выведена через FBO в текстуру, которая потом будет наложена на поверхность телевизора. Это называется отрисовкой в текстуру (Render to Texture, RTT)[1].
Преимущества по сравнению с другими методамиПравить
- Проще, чем остальные методы.
- Не требует смены контекстов.
- Более эффективный, потому что все ресурсы находятся в том же контексте.
- Более гибкий, так как буферы глубины, трафарета и прочие могут быть подключены.
АрхитектураПравить
Для использования FBO, создается его экземпляр. После этого идет несколько подключений, одно из них это выбор получателя, либо текстуры, либо render buffer.
Пример:
- Создаётся FBO.
- Подключается буфер цвета к текстуре.
- Подключается буфер глубины к текстуре.
- Визуализация текстуры на экран с помощью фрагментного шейдера, в зависимости от информации в цвета и глубины.
ПримечанияПравить
- ↑ 1 2 Боресков, 2006.
ЛитератураПравить
- Боресков Алексей. Разработка и отладка шейдеров. — БХВ-Петербург, 2006. — 488 с. — ISBN 5-94157-712-5.