Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

OpenGL 4. Язык шейдеров. Книга рецептов

Покупка
Артикул: 817030.01.99
Доступ онлайн
559 ₽
В корзину
Язык шейдеров OpenGL (OpenGL Shading Language, GLSL) является фундаментальной основой программирования с использованием OpenGL. Его применение дает беспрецедентную гибкость и широту возможностей, позволяет использовать мощь графического процессора (GPU) для реализации улучшенных приемов отображения и даже для произвольных вычислений. Версия GLSL 4.x несет еще более широкие возможности, благодаря введению новых видов шейдеров: шейдеров тесселяции и вычислительных шейдеров. В этой книге рассматривается весь спектр приемов программирования на GLSL, начиная с базовых видов шейдеров — вершинных и фрагментных, — и заканчивая геометрическими, вычислительными и шейдерами тесселяции. Здесь приводится множество практических примеров — от наложения текстур, воспроизведения теней и обработки изображений до применения искажений и манипуляций системами частиц. Прочтя ее, вы сможете задействовать GPU для решения самых разных задач, даже тех, что никак не связаны с формированием изображений. Издание предназначено для программистов трехмерной графики, желающих задействовать в своих проектах всю мощь современных программных и аппаратных средств.
Вольф, Д. OpenGL 4. Язык шейдеров. Книга рецептов : практическое руководство / Д. Вольф ; пер. с англ. А. Н. Киселёва. - 2-е изд. - Москва : ДМК Пресс, 2023. - 370 с. - ISBN 978-5-89818-587-9. - Текст : электронный. - URL: https://znanium.com/catalog/product/2107953 (дата обращения: 28.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Дэвид Вольф

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  О рецензентах

Доступ онлайн
559 ₽
В корзину