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

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

Покупка
Артикул: 712439.01.99
Доступ онлайн
799 ₽
В корзину
Язык шейдеров OpenGL (OpenGL Shading Language, GLSL) является фундаментальной основой программирования с использованием OpenGL. Его применение дает беспрецедентную гибкость и широту возможностей, позволяет использовать мощь графического процессора (GPU) для реализации улучшенных приемов отображения и даже для произвольных вычислений. Версия GLSL Ах несет еще более широкие возможности, благодаря введению новых видов шейдеров: шейдеров тесселяции и вычислительных шейдеров. В этой книге рассматривается весь спектр приемов программирования на GLSL, начиная с базовых видов шейдеров - вершинных и фрагментных, - и заканчивая геометрическими, вычислительными и шейдерами тесселяции. Здесь приводится множество практических примеров - от наложения текстур, воспроизведения теней и обработки изображений до применения искажений и манипуляций системами частиц. Прочтя ее, вы сможете задействовать GPU для решения самых разных задач, даже тех, что никак не связаны с формированием изображений. Издание предназначено для программистов трехмерной графики, желающих задействовать в своих проектах всю мощь современных программных и аппаратных средств.
Вольф, Д. OpenGL 4. Язык шейдеров. Книга рецептов / Д. Вольф ; пер. с англ. А.Н. Киселева. - Москва : ДМК Пресс, 2015. - 368 с. - ISBN 978-5-97060-255-3. - Текст : электронный. - URL: https://znanium.com/catalog/product/1027790 (дата обращения: 29.09.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Дэвид Вольф

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

OpenGL 4
Shading Language 
Cookbook

David Wolff

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

Москва, 2015

Дэвид Вольф

УДК 004.92;004.42GLSL
ББК 32.973
 
В72
 

 
 
Вольф Д.
В72 
OpenGL 4. Язык шейдеров. Книга рецептов / пер. с англ. А. Н. Киселева. – 
М.: ДМК Пресс, 2015. – 368 с.: ил. 

 
ISBN 978-5-97060-255-3

Язык шейдеров OpenGL (OpenGL Shading Language, GLSL) является фундаментальной основой программирования с использованием OpenGL. Его применение дает 
беспрецедентную гибкость и широту возможностей, позволяет использовать мощь 
графического процессора (GPU) для реализации улучшенных приемов отображения 
и даже для произвольных вычислений. Версия GLSL 4.x несет еще более широкие 
возможности, благодаря введению новых видов шейдеров: шейдеров тесселяции и 
вычислительных шейдеров.
В этой книге рассматривается весь спектр приемов программирования на GLSL, 
начиная с базовых видов шейдеров – вершинных и фрагментных, – и заканчивая 
геометрическими, вычислительными и шейдерами тесселяции. Здесь приводится 
множество практических примеров – от наложения текстур, воспроизведения теней 
и обработки изображений до применения искажений и манипуляций системами частиц.  Прочтя ее, вы сможете задействовать GPU для решения самых разных задач, 
даже тех, что никак не связаны с формированием изображений.
Издание предназначено для программистов трехмерной графики, желающих задействовать в своих проектах всю мощь современных программных и аппаратных средств.

 
УДК  004.92;004.42GLSL
 
ББК 32.973

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

ISBN 978-1-78216-702-0 (анг.) 
Copyright © 2013 Packt Publishing
ISBN 978-5-97060-255-3 (рус.) 
©  Оформление, перевод, ДМК Пресс, 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  О рецензентах

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