OpenGL 4. Язык шейдеров. Книга рецептов
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Автор:
Вольф Дэвид
Перевод:
Киселев Артём Николаевич
Год издания: 2023
Кол-во страниц: 370
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-89818-587-9
Артикул: 817030.01.99
Язык шейдеров OpenGL (OpenGL Shading Language, GLSL) является фундаментальной основой программирования с использованием OpenGL. Его применение дает беспрецедентную гибкость и широту возможностей, позволяет использовать мощь графического процессора (GPU) для реализации улучшенных приемов отображения и даже для произвольных вычислений. Версия GLSL 4.x несет еще более широкие возможности, благодаря введению новых видов шейдеров: шейдеров тесселяции и вычислительных шейдеров.
В этой книге рассматривается весь спектр приемов программирования на GLSL, начиная с базовых видов шейдеров — вершинных и фрагментных, — и заканчивая геометрическими, вычислительными и шейдерами тесселяции. Здесь приводится множество практических примеров — от наложения текстур, воспроизведения теней и обработки изображений до применения искажений и манипуляций системами частиц. Прочтя ее, вы сможете задействовать GPU для решения самых разных задач, даже тех, что никак не связаны с формированием изображений.
Издание предназначено для программистов трехмерной графики, желающих задействовать в своих проектах всю мощь современных программных и аппаратных средств.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Программирование
- Программирование и алгоритмизация
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Дэвид Вольф OpenGL 4. Язык шейдеров. Книга рецептов
OpenGL 4 Shading Language Cookbook David Wolff
OpenGL 4. Язык шейдеров. Книга рецептов Москва, 2023 Дэвид Вольф 2-е издание, элетронное
УДК 004.92;004.42GLSL ББК 32.973 В72 В72 Вольф, Дэвид. OpenGL 4. Язык шейдеров. Книга рецептов / Д. Вольф ; пер. с англ. А. Н. Киселёва. — 2-е изд., эл. — 1 файл pdf : 370 с. — Москва : ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-587-9 Язык шейдеров OpenGL (OpenGL Shading Language, GLSL) является фундаментальной основой программирования с использованием OpenGL. Его применение дает беспрецедентную гибкость и широту возможностей, позволяет использовать мощь графического процессора (GPU) для реализации улучшенных приемов отображения и даже для произвольных вычислений. Версия GLSL 4.x несет еще более широкие возможности, благодаря введению новых видов шейдеров: шейдеров тесселяции и вычислительных шейдеров. В этой книге рассматривается весь спектр приемов программирования на GLSL, начиная с базовых видов шейдеров — вершинных и фрагментных, — и заканчивая геометрическими, вычислительными и шейдерами тесселяции. Здесь приводится множество практических примеров — от наложения текстур, воспроизведения теней и обработки изображений до применения искажений и манипуляций системами частиц. Прочтя ее, вы сможете задействовать GPU для решения самых разных задач, даже тех, что никак не связаны с формированием изображений. Издание предназначено для программистов трехмерной графики, желающих задействовать в своих проектах всю мощь современных программных и аппаратных средств. УДК 004.92;004.42GLSL ББК 32.973 Электронное издание на основе печатного издания: OpenGL 4. Язык шейдеров. Книга рецептов / Д. Вольф ; пер. с англ. А. Н. Киселёва. — Москва : ДМК Пресс, 2015. — 368 с. — ISBN 978-5-97060-255-3. — Текст : непосредственный. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-587-9 © 2013 Packt Publishing © Оформление, перевод, ДМК Пресс, 2015
Содержание Предисловие .................................................................12 Глава 1 Введение в GLSL ..............................................18 Введение ............................................................................................................................................................18 Использование загрузчика функций для доступа к новейшей функциональности OpenGL ......................................................................................................................................................21 Использование GLM для математических вычислений ..................................................................25 Использование типов GLM для передачи данных в OpenGL ........................................................26 Определение версий GLSL и OpenGL....................................................................................................27 Компиляция шейдера ...................................................................................................................................29 Компоновка шейдерной программы .......................................................................................................33 Передача данных в шейдер с использованием вершинных атрибутов и вершинных буферных объектов ...............................................................................................................................36 Получение списка активных атрибутов и их индексов ...................................................................45 Передача данных в шейдер с использованием uniform-переменных ..........................................48 Получение списка активных uniform-переменных ............................................................................51 Использование uniform-блоков и uniform-буферов ..........................................................................53 Получение отладочных сообщений .........................................................................................................59 Создание класса C++, представляющего шейдерную программу ...............................................62 Рассеянное отражение с единственным точечным источником света ........................................68 Глава 2 Основы шейдеров GLSL ....................................66 Введение ............................................................................................................................................................66 Фоновый, рассеянный и отраженный свет ..........................................................................................73 Использование функций в шейдерах......................................................................................................80 Реализация двустороннего отображения ..............................................................................................83 Реализация модели плоского затенения ................................................................................................87 Использование подпрограмм для выбора функциональности в шейдере ................................89 Отбрасывание фрагментов для получения эффекта решетчатой поверхности .......................94 Глава 3 Освещение, затенение и оптимизация ................98 Введение ............................................................................................................................................................98 Освещение несколькими точечными источниками света ..............................................................98 Освещение источником направленного света ................................................................................. 101 Пофрагментное вычисление освещенности для повышения реализма ................................... 104 Использование вектора полупути для повышения производительности .............................. 107 Имитация узконаправленных источников света ............................................................................. 110 Придание изображению «мультяшного» вида ................................................................................. 113 Имитация тумана ........................................................................................................................................ 116 Настройка проверки глубины ................................................................................................................ 119 Глава 4 Текстуры ......................................................122 Введение ......................................................................................................................................................... 122 Наложение двухмерной текстуры ......................................................................................................... 123 Наложение нескольких текстур ............................................................................................................ 128
Содержание Использование карт прозрачности для удаления пикселей ........................................................ 131 Использование карт нормалей ............................................................................................................... 134 Имитация отражения с помощью кубической текстуры .............................................................. 140 Имитация преломления с помощью кубической текстуры ......................................................... 147 Наложение проецируемой текстуры .................................................................................................... 152 Отображение в текстуру ........................................................................................................................... 157 Использование объектов-семплеров ................................................................................................... 162 Глава 5 Обработка изображений и приемы работы с экранным пространством ............................................165 Введение ......................................................................................................................................................... 165 Применение фильтра выделения границ ........................................................................................... 166 Применение фильтра размытия по Гауссу .........................................................................................172 Преобразование диапазона яркостей HDR с помощью тональной компрессии ................. 179 Эффект размытости на границах ярких участков .......................................................................... 184 Повышение качества изображения с помощью гамма-коррекции ........................................... 189 Сглаживание множественной выборкой ............................................................................................ 192 Отложенное освещение и затенение .................................................................................................... 197 Реализация порядконезависимой прозрачности ............................................................................ 203 Глава 6 Использование геометрических шейдеров и шейдеров тесселяции .................................................215 Введение ......................................................................................................................................................... 215 Отображение точечных спрайтов с помощью геометрического шейдера ............................... 220 Наложение каркаса на освещенную поверхность .......................................................................... 225 Рисование линий силуэта с помощью геометрического шейдера ............................................. 233 Тесселяция кривой ..................................................................................................................................... 242 Тесселяция двухмерного прямоугольника ......................................................................................... 247 Тесселяция трехмерной поверхности .................................................................................................. 252 Тесселяция с учетом глубины ................................................................................................................ 257 Глава 7 Тени ............................................................261 Введение ......................................................................................................................................................... 261 Отображение теней с помощью карты теней ................................................................................... 261 Сглаживание границ теней методом PCF .......................................................................................... 272 Смягчение границ теней методом случайной выборки ................................................................. 275 Создание теней с использованием приема теневых объемов и геометрического шейдера .................................................................................................................................................. 282 Глава 8 Использование шума в шейдерах .....................291 Введение ......................................................................................................................................................... 291 Создание текстуры шума с использованием GLM ......................................................................... 293 Создание бесшовной текстуры шума ................................................................................................... 296 Создание эффекта облаков ...................................................................................................................... 298 Создание эффекта текстуры древесины ............................................................................................. 300 Создание эффекта разрушения .............................................................................................................. 303 Создание эффекта брызг краски............................................................................................................ 305
Содержание 7 Создание эффекта изображения в приборе ночного видения .................................................... 308 Глава 9 Системы частиц и анимация ............................312 Введение ......................................................................................................................................................... 312 Анимация поверхности смещением вершин ..................................................................................... 313 Создание фонтана частиц ........................................................................................................................ 316 Создание системы частиц с использованием трансформации с обратной связью ............. 322 Создание системы частиц клонированием ........................................................................................ 331 Имитация пламени с помощью частиц ............................................................................................... 334 Имитация дыма с помощью частиц ...................................................................................................... 337 Глава 10 Вычислительные шейдеры ............................340 Введение ......................................................................................................................................................... 340 Реализация системы частиц с помощью вычислительного шейдера ....................................... 344 Имитация полотнища ткани с помощью вычислительного шейдера....................................... 348 Определение границ с помощью вычислительного шейдера ..................................................... 355 Создание фракталов с помощью вычислительного шейдера ...................................................... 360 Предметный указатель ..................................................364
Об авторе Дэвид Вольф (David Wolff) – адъюнкт-профессор факультета «Информатика и вычислительная техника» в университете Пасифик Лютеран (Pacific Lutheran University, PLU). Имеет степень кандидата физико-математических наук и магистра информатики, полученную в университете штата Орегон. Преподает компьютерную графику студентам университета Пасифик Лютеран уже более 10 лет.
О рецензентах Варфоломей Филипек (Bartłomiej Filipek) – опытный разработчик программного обеспечения, всеми силами старающийся передать свой опыт другим. Вот уже пять лет ведет курс программирования компьютерной графики с применением OpenGL в Ягеллонском университете (Краков, Польша). Кроме того, читает лекции и проводит семинары на тему современных приемов программирования на языке C++ в местных университетах. Имеет огромный опыт разработки программного обеспечения, в том числе низкоуровневого кода для систем отображения, крупномасштабных программных продуктов, игровых движков, мультимедийных приложений, пользовательских интерфейсов, вычислений на GPU и даже приложений для клинического мониторинга. Он делится своим опытом программирования в своем блоге по адресу: http:// www.bfilipek.com/. Томас Ле Гуэро-Древиллон (Thomas Le Guerroue' -Dre' villon) – инженер-программист, недавно закончивший обучение. Увлекается математикой и рисованием – ему легко удается совмещать эти два увлечения в компьютерной графике. Родился во Франции, но приложил все усилия, чтобы воспользоваться возможностями, данными ему его университетом, чтобы учиться и работать по всему миру. Первый международный опыт получил в Эстонии, затем обучался в престижном Корейском институте перспективных научных исследований и технологий (KAIST) в Южной Корее и, наконец, сейчас живет в Канаде. Даже при том, что математическую базу он получил в университете, опыт владения OpenGL и GLSL приобретался им самостоятельно. Томас уверен, что между документированным API и реализацией шейдеров лежит глубокая пропасть, и без колебаний принялся за рецензирование этого сборника рецептов, который он с радостью приобрел бы, когда только начинал осваивать OpenGL/GLSL. Доктор Мухаммад Мобин Мования (Dr. Muhammad Mobeen Movania) защитил докторскую диссертацию по теме «Перспективы компьютерной графики и визуализации» в Наньянском технологическом университете, Сингапур. После защиты диссертации приступил к работе в научно-исследовательском институте A-Star (Сингапур) по теме «Дополненная реальность на основе систем виртуальной примерки и имитации движения тканей с использованием GPU и OpenGL». Прежде чем поступить в Наньянский университет, работал младшим разработчиком графики в Data Communication and Control (DCC) Pvt. Ltd. (Карачи, Пакистан). Использовал DirectX и OpenGL для создания интерактивных тактических тренажеров реального времени и динамических комплексных тренажеров. В числе его интересов можно назвать: методы объемной визуализации на основе GPU, приемы использования GPU, физика мягких тканей в режиме реального времени, динамическое наложение теней в режиме реального времени, определение столкновений в режиме реального времени и отклик на них, а также иерархические структуры геометрических данных. Является автором проекта OpenCloth (http://code.google. com/p/opencloth), в котором реализовал различные алгоритмы имитации тканей с использованием OpenGL. В его блоге (http://mmmovania.blogspot.com) можно
найти большое число полезных советов и хитростей, связанных с компьютерной графикой. В свободное время любит сочинять музыку и играть в сквош. Доктор Мобин издал несколько статей о компьютерной графике и визуализации в режиме реального времени. Недавно закончил работу над книгой по OpenGL («OpenGL Development Cookbook», изданной в Packt Publishing в 2013 го ду), где описываются практические рецепты программирования графики с использованием современной версии OpenGL. Его перу принадлежит также глава в другой книге («OpenGL Insights», выпущенной издательством AK Peters/CRC Press в 2012 году). В настоящее время доктор Мобин работает адъюнкт-профессором в университете DHA Suffa University (Карачи, Пакистан), где занимается взращиванием юных дарований, которые завтра станут выдающимися программистами и исследователями. В первую очередь я хочу возблагодарить всемогущего Аллаха за то, что он так милостив ко мне и моей семье. Я также очень благодарен моей семье, родителям (мистеру и миссис Абдул Азизу Мования (Abdul Aziz Movania)), моей супруге Танвир Таджи (Tanveer Taji), моим сестрам (миссис Азра Салем (Azra Saleem) и миссис Саджида Шакир (Sajida Shakir)), моим братьям (мистеру Халид Мования (Khalid Movania) и мистеру Абдул Маджид Мования (Abdul Majid Movania)), всем моим племянникам/племянницам и моей дочери (Мунтаха Мования (Muntaha Movania)). Дарио Скарпа (Dario Scarpa) занимается программированием последние 15 лет и не намерен оставлять эту работу. Переходя с одного места на другое, он побывал в шкуре и разработчика, и системного администратора, и создателя видеоигр, и экзаменатора по информатике в университете Салерно (Италия). При этом он осуществлял руководство разработкой проекта Zodiac для компании Adventure Productions, интернет-магазина, специализирующегося на распространении приключенческих игр. В то время когда Дарио занимался рецензированием этой книги, он параллельно готовился получить степень магистра со своей дипломной работой по теме компьютерной графики, где демонстрировал обширные возможности – как нетрудно догадаться – OpenGL. Джавед Раббани Шах (Javed Rabbani Shah) имеет квалификацию инженераэлектромеханика, полученную в инженерно-технологическом университете (Лахор, Пакистан) в 2004 году. Свою профессиональную карьеру он начинал в Delta Indus Systems (ныне Vision Master Inc.), где плотно занимался системами статистического контроля процессов, применяя такие технологии, как обработка изображений, трехмерное машинное зрение и динамически перепрограммируемые микросхемы. Затем в 2007 году перешел в подразделение Embedded Systems компании Mentor Graphics, где получил возможность поработать с системой реального времени Nucleus+, микропрограммами USB 2.0, WebKit и OpenGL ES 2.0. Он стал инициатором внедрения OpenGL ES 2.0 в кросс-платформенный движок пользовательского интерфейса Inflexion 3D компании Mentor. В настоящее время Джавед работает в Saffron Digital, в центре Лондона, где занимается проблемами кросс-платформенной защиты видеофайлов от воспроизведения и технологиями DRM и UltraViolet. В свободное время изучает смежные технологии, такие как OpenGL ES 3.0 и OpenCL. 10 О рецензентах