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

OpenGL ES 3.0 : руководство разработчика

Покупка
Артикул: 816349.01.99
Доступ онлайн
719 ₽
В корзину
OpenGL ES — это ведущий интерфейс и графическая библиотека для рендеринга сложной трехмерной графики на мобильных устройствах. Последняя версия, OpenGL ES 3.0, делает возможным создания потрясающей графики для новых игр и приложений, не влияя на производительность устройства и время работы аккумулятора. В данной книге авторы рассматривает весь API и язык для написания шейдеров. Они внимательно рассматривают возможности OpenGL ES такие как теневые карты, дублирование геометрии, рендеринг в несколько текстур, uniform-буферы, сжатие текстур, бинарное представление программ и преобразование обратной связи. Шаг за шагом вы перейдете от вводных примеров к продвинутому попиксельному освещению и системам частиц. Также вы найдете содержательные советы по оптимизации быстродействия, максимизации эффективности работы API и GPU и полном использовании OpenGL ES в широком спектре приложений. На сайте издательства выложены примеры к книге на языке С. Издание предназначено программистам мобильных приложений, желающих максимально использовать графические возможности своих устройств.
Гинсбург, Д. OpenGL ES 3.0 : руководство разработчика : практическое руководство / Д. Гинсбург, Б. Пурномо ; пер. с англ. А. Борескова. - 2-е изд - Москва : ДМК Пресс, 2023. - 449 с. - ISBN 978-5-89818-312-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/2102599 (дата обращения: 22.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
OpenGL ES 3.0 
Руководство разработчика

With Earlier 
Contributions From
Dave Shreiner
Aaftab Munshi

OpenGL ES 3.0 
Programming Guide

Dan Ginsburg, Budirijanto Purnomo

Upper Saddle River, NJ • Boston • Indianapolis • San Francisco
New York • Toronto • Montreal • London • Munich • Paris • Madrid
Capetown • Sydney • Tokyo • Singapore • Mexico City

Addison-Wesley

Совместно 
с  Дейвом Шрейнером 
и Аафтабом Мунши

OpenGL ES 3.0 
Руководство разработчика

Москва, 2023

Дэн Гинсбург, Будирижанто Пурномо

2-издание, электронное

УДК 004’27OpenGL ES 3
ББК 32.972.121
Г49

Г49
Гинсбург, Дэн.
OpenGL ES 3.0 : руководство разработчика / Д. Гинсбург, Б. Пурномо ; пер. с англ. 
А. Борескова. — 2-е изд., эл. — 1 файл pdf : 449 с. — Москва : ДМК Пресс, 2023. — Систем. 
требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный.
ISBN 978-5-89818-312-7

OpenGL ES — это ведущий интерфейс и графическая библиотека для рендеринга сложной 
трехмерной графики на мобильных устройствах. Последняя версия, OpenGL ES 3.0, делает возможным создания потрясающей графики для новых игр и приложений, не влияя на производительность устройства и время работы аккумулятора.
В данной книге авторы рассматривает весь API и язык для написания шейдеров. Они внимательно рассматривают возможности OpenGL ES такие как теневые карты, дублирование геометрии, 
рендеринг в несколько текстур, uniform-буферы, сжатие текстур, бинарное представление программ 
и преобразование обратной связи. Шаг за шагом вы перейдете от вводных примеров к продвинутому попиксельному освещению и системам частиц. Также вы найдете содержательные советы по 
оптимизации быстродействия, максимизации эффективности работы API и GPU и полном использовании OpenGL ES в широком спектре приложений.
На сайте издательства выложены примеры к книге на языке С.
Издание предназначено программистам мобильных приложений, желающих максимально 
использовать графические возможности своих устройств.

УДК 004’27OpenGL ES 3 
ББК 32.972.121

Электронное издание на основе печатного издания: OpenGL ES 3.0 : руководство разработчика / Д. Гинсбург, 
Б. Пурномо ; пер. с англ. А. Борескова. — Москва : ДМК Пресс, 2015. — 448 с. — ISBN 978-5-97060-256-0. — 
Текст : непосредственный.

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

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских 
прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.

ISBN 978-5-89818-312-7
© 2014 Pearson Education, Inc.
© Оформление, перевод, ДМК Пресс, 2015

Содержание

Предисловие ......................................................... 14

Введение .............................................................. 15

Благодарности ....................................................... 20

Об авторах ............................................................ 22

Глава 1. Введение в OpenGL ES 3.0 ............................ 23

OpenGL ES 3.0 ...............................................................................................................................25
Вершинный шейдер .............................................................................................................26
Сборка примитивов .............................................................................................................28
Растеризация ..........................................................................................................................28
Фрагментный шейдер .........................................................................................................29
Пофрагментные операции .................................................................................................30
Что нового в OpenGL ES 3.0? ..................................................................................................32
Текстурирование ...................................................................................................................32
Шейдеры ..................................................................................................................................34
Геометрия .................................................................................................................................35
Буферные объекты ...............................................................................................................36
Фреймбуфер ...........................................................................................................................37
OpenGL ES 3.0 и обратная совместимость ..........................................................................37
EGL  ...................................................................................................................................................38
Программирование с OpenGL ES 3.0 ............................................................................39
Библиотеки и заголовочные файлы ...............................................................................39
Синтаксис EGL .............................................................................................................................40
Синтаксис команд OpenGL ES ...............................................................................................40
Обработка ошибок .......................................................................................................................42
Основы управления состоянием ............................................................................................43
Дальнейшее чтение ......................................................................................................................44

Глава 2. Hello Triangle: пример использования 
OpenGL ES 3.0 ........................................................ 45

Используемая библиотека ........................................................................................................45
Где можно скачать примеры .....................................................................................................46
Пример Hello Triangle.................................................................................................................46
Использование библиотеки утилит для OpenGL ES 3.0................................................50

 Содержание

Создание простого вершинного и фрагментного шейдеров .........................................51
Компиляция и загрузка шейдеров .........................................................................................53
Создание объекта-программы и сборка шейдеров ...........................................................54
Задание области вывода и очистка буфера цвета .............................................................55
Загрузка геометрии и вывод примитива ..............................................................................56
Отображение буфера ..................................................................................................................56
Резюме .............................................................................................................................................57

Глава 3. Введение в EGL ........................................... 58

Взаимодействие с оконной системой ....................................................................................58
Проверка на ошибки ...................................................................................................................59
Инициализация EGL ..................................................................................................................60
Определение допустимых конфигураций поверхностей ...............................................60
Получение атрибутов EGLConfig ...........................................................................................61
Позволяем EGL выбрать конфигурацию ............................................................................64
Создание видимой области для рендеринга: окна EGL .................................................66
Создание внеэкранных областей для рендеринга: п-буферы EGL .............................68
Создание контекста для рендеринга .....................................................................................71
Делаем EGLContext текущим ..................................................................................................73
Собираем все вместе ...................................................................................................................73
Синхронизация рендеринга .....................................................................................................75
Резюме .............................................................................................................................................76

Глава 4. Шейдеры и программы ................................ 77

Шейдеры и программы ..............................................................................................................77
Создание и компилирование шейдера ..........................................................................78
Создание и сборка программы .........................................................................................81
Uniform-переменные и атрибуты ...........................................................................................85
Получение информации и задание значений для uniform-переменных ...........86
Uniform-буферы ....................................................................................................................92
Получение  и задание атрибутов .....................................................................................96
Компилятор шейдеров ...............................................................................................................97
Бинарные программы .................................................................................................................97
Резюме .............................................................................................................................................98

Глава 5. Шейдерный язык OpenGL ES ......................... 99

Основы шейдерного языка OpenGL ES ...............................................................................99
Задание версии шейдера ......................................................................................................... 100
Переменные и типы переменных ........................................................................................ 100

Содержание  7

Конструкторы переменных ................................................................................................... 101
Векторные и матричные компоненты ................................................................................ 102
Константы .................................................................................................................................... 103
Структуры ................................................................................................................................... 104
Массивы ....................................................................................................................................... 104
Операторы ................................................................................................................................... 105
Функции....................................................................................................................................... 106
Встроенные функции............................................................................................................... 107
Управляющие операторы ....................................................................................................... 107
Uniform-переменные ................................................................................................................ 108
Uniform-блоки ............................................................................................................................ 109
Входные и выходные значения вершинного/фрагментного шейдера ................... 111
Описатели интерполяции ...................................................................................................... 113
Препроцессор и его команды ................................................................................................ 114
Упаковка uniform-переменных и интерполяторов ........................................................ 116
Описатели точности ................................................................................................................. 117
Инвариантность......................................................................................................................... 118
Резюме .......................................................................................................................................... 121

Глава 6. Атрибуты вершины, вершинные массивы 
и объекты-буферы .................................................122

Задание данных для вершинных атрибутов .................................................................... 123
Постоянный вершинный атрибут ................................................................................ 123
Вершинные массивы ........................................................................................................ 123
Советы по оптимизации .................................................................................................. 127
Объявление переменных для вершинного атрибута в вершинном шейдере ....... 131
Привязка вершинного атрибута к переменной в шейдере .................................. 133
Вершинные объекты-буферы ............................................................................................... 136
Объект состояния вершинных буферов (Vertex Array Object) ................................ 145
Отображение буферов в память приложения ................................................................. 149
Сбрасывание отображенного буфера ......................................................................... 152
Копирование данных между буферами ............................................................................. 152
Резюме .......................................................................................................................................... 153

Глава 7. Сборка примитивов и растеризация ..............155

Примитивы .................................................................................................................................. 155
Треугольники ...................................................................................................................... 155
Отрезки ................................................................................................................................. 156
Точечные спрайты ............................................................................................................. 157

 Введение

Вывод примитивов ................................................................................................................... 159
Перезапуск примитива .................................................................................................... 161
Провоцирующая вершина (provoking vertex) ......................................................... 162
Дублирование геометрии (geometry instancing) ..................................................... 162
Советы по оптимизации .................................................................................................. 165
Сборка примитивов .................................................................................................................. 167
Системы координат .......................................................................................................... 168
Отсечение ............................................................................................................................. 168
Перспективное деление ................................................................................................... 170
Преобразование в область видимости ........................................................................ 170
Растеризация .............................................................................................................................. 171
Отсечение ............................................................................................................................. 171
Смещение полигона .......................................................................................................... 173
Запросы видимости .................................................................................................................. 175
Резюме .......................................................................................................................................... 177

Глава 8. Вершинные шейдеры .................................178

Обзор вершинного шейдера .................................................................................................. 179
Встроенные переменные вершинного шейдера ...................................................... 180
Встроенные специальные переменные ...................................................................... 180
Встроенные uniform-переменные, хранящие состояние ...................................... 181
Встроенные константы .................................................................................................... 181
Описатели точности ......................................................................................................... 182
Ограничения на использование uniform-переменных в вершинном 
шейдере ................................................................................................................................. 183
Примеры вершинных шейдеров .......................................................................................... 186
Матричные преобразования .......................................................................................... 186
Модельно-видовая матрица ........................................................................................... 187
Матрица проектирования ............................................................................................... 188
Расчет освещения в вершинном шейдере ................................................................. 188
Генерация текстурных координат ....................................................................................... 194
Вершинный скиннинг ............................................................................................................. 195
Преобразование обратной связи (transform feedback) ................................................. 200
Вершинные текстуры............................................................................................................... 202
Вершинный конвейер OpenGL ES 1.1 как вершинный шейдер 
OpenGL ES 3.0 ............................................................................................................................ 203
Резюме .......................................................................................................................................... 210

Глава 9. Текстурирование ........................................211

Основы текстурирования ....................................................................................................... 211

Содержание  9

Двухмерные текстуры ...................................................................................................... 211
Кубические текстурные карты ...................................................................................... 213
Трехмерные текстуры ....................................................................................................... 214
Массив двухмерных текстур ......................................................................................... 214
Текстурные объекты и загрузка текстур .................................................................... 215
Фильтрование текстуры и пирамидальное фильтрование ................................. 220
Бесшовная фильтрация кубических текстур ........................................................... 224
Автоматическое построение пирамиды изображений ......................................... 224
Отсечение текстурных координат ............................................................................... 225
Перестановки каналов ..................................................................................................... 227
Текстурный уровень детализации ............................................................................... 227
Сравнение для текстуры глубины (Percentage Closest Filtering, PCF) .......... 228
Форматы текстур ............................................................................................................... 228
Нормализованные текстурные форматы .................................................................. 229
Форматы текстур с плавающей точкой ..................................................................... 230
Целочисленные текстурные форматы ........................................................................ 231
Форматы текстур с общей экспонентой .................................................................... 232
Текстурные форматы sRGB ........................................................................................... 233
Форматы для текстур глубины ..................................................................................... 234
Использование текстур в шейдере .............................................................................. 234
Пример использования кубической текстуры ........................................................ 237
Загрузка трехмерных текстур и массивов двухмерных текстур ....................... 239
Сжатые текстуры....................................................................................................................... 240
Задание части изображения текстуры ............................................................................... 243
Копирование текстурных данных из буфера цвета ...................................................... 246
Объекты-сэмплеры ................................................................................................................... 249
Неизменяемые текстуры ........................................................................................................ 252
Распаковка объектов-буферов.............................................................................................. 253
Резюме .......................................................................................................................................... 254

Глава 10. Фрагментные шейдеры .............................255

Пример реализации фиксированного конвейера .......................................................... 256
Обзор фрагментного шейдера .............................................................................................. 257
Встроенные специальные переменные ...................................................................... 258
Встроенные константы .................................................................................................... 259
Описатели точности ......................................................................................................... 260
Реализация алгоритмов из фиксированного конвейера при помощи 
шейдеров ...................................................................................................................................... 260
Мультитекстурирование ................................................................................................. 261
Туман ...................................................................................................................................... 262

 Содержание

Альфа-тест (с использованием discard) ..................................................................... 265
Задаваемые пользователем плоскости отсечения .................................................. 267
Резюме .......................................................................................................................................... 269

Глава 11. Операции с фрагментами ..........................270

Буферы ......................................................................................................................................... 270
Запрос дополнительных буферов  ............................................................................... 271
Очистка буферов ............................................................................................................... 272
Использование масок для управления записью во фреймбуферы .................. 273
Тесты фрагментов и операции .............................................................................................. 275
Использование теста попадания в прямоугольник (scissor test) ...................... 275
Тесты трафарета ................................................................................................................. 276
Тесты глубины .................................................................................................................... 281
Смешение цветов (альфа-блендинг) .................................................................................. 282
Растрирование ............................................................................................................................ 284
Антиалиасинг с использованием мультисэмплинга ..................................................... 284
Использование спецификатора centroid ................................................................... 285
Чтение и запись пикселов во фреймбуфер ...................................................................... 286
Объекты-буферы для упаковки пикселов ................................................................ 289
Рендеринг в несколько буферов цвета (MRT) ............................................................... 290
Резюме .......................................................................................................................................... 293

Глава 12. Объекты-фреймбуферы ............................294

Зачем нужны объекты-фреймбуферы? ............................................................................. 294
Объекты-фреймбуферы и  рендербуферы ....................................................................... 296
Выбор между рендербуфером и текстурой в качестве подключения 
к фреймбуферу ................................................................................................................... 296
Сравнение объектов-фреймбуферов с поверхностями EGL .............................. 297
Создание объектов-фреймбуферов и рендербуферов.................................................. 298
Использование рендербуферов ............................................................................................ 298
Рендербуферы с мультисэмплингом........................................................................... 300
Форматы рендербуфера .................................................................................................. 301
Использование объектов-фреймбуферов ......................................................................... 302
Подключение рендербуфера к точке подключения фреймбуфера .................. 303
Подключение двухмерной текстуры к фреймбуферу........................................... 304
Подключение слоя трехмерной текстуры к фреймбуферу ................................. 305
Проверка полноты фреймбуфера ................................................................................ 306
Копирование между фреймбуферами ............................................................................... 307
Сообщение о том, что содержимое фреймбуфера больше не нужно ...................... 309

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