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

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

Покупка
Артикул: 634676.02.99
Доступ онлайн
899 ₽
В корзину
OpenGL ES — это ведущий интерфейс и графическая библиотека для рендеринга сложной трехмерной графики на мобильных устройствах. Последняя версия, OpenGL ES 3.0, делает возможным создания потрясающей графики для новых игр и приложений, не влияя на производительность устройства и время работы аккумулятора. В данной книге авторы рассматривает весь API и язык для написания шейдеров. Они внимательно рассматривают возможности OpenGL ES такие как теневые карты, дублирование геометрии, рендеринг в несколько текстур, uniform-буферы, сжатие текстур, бинарное представление программ и преобразование обратной связи. Шаг за шагом вы перейдете от вводных примеров к продвинутому попиксельному освещению и системам частиц. Также вы найдете содержательные советы по оптимизации быстродействия, максимизации эффективности работы API и GPU и полном использовании OpenGL ES в широком спектре приложений. На сайте издательства www.dmkpress.com выложены примеры к книге на языке С. Издание предназначено программистам мобильных приложений, желающих максимально использовать графические возможности своих устройств.
Гинсбург, Д. OpenGL ES 3.0. Руководство разработчика / Д. Гинсбург, Б. Пурномо ; пер. с англ. А. Борескова. - Москва : ДМК Пресс, 2015. - 448 с. - ISBN 978-5-97060-256-0. - Текст : электронный. - URL: https://znanium.com/catalog/product/1027820 (дата обращения: 19.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
OpenGL ES 3.0 
Руководство разработчика

Second Edition

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 
Руководство разработчика

Москва, 2015

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

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

 
 
Гинсбург Д., Пурномо Б.
Г49
OpenGL ES 3.0. Руководство разработчика / пер. с англ. А. Борескова. – М.: 
ДМК Пресс, 2015. – 448 с.: ил.

ISBN 978-5-97060-256-0

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

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

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any 
means, electronic or mechanical, including photocopying, recording or by any information storage 
retrieval system, without permission from Pearson Education, Inc. RUSSIAN language edition 
published by DMK PUBLISHERS. Copyright © 2015. 

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

ISBN 978-0-321-93388-1 (анг.)
Copyright © 2014 Pearson Education, Inc.
ISBN 978-5-97060-256-0 (рус.               
© Оформление, перевод, ДМК Пресс, 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

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

Уничтожение фреймбуферов и рендербуферов ............................................................. 310
Уничтожение рендербуферов, которые используются как подключение 
к фреймбуферу ................................................................................................................... 311
Чтение пикселов и объекты-фреймбуферы ............................................................. 311
Примеры ....................................................................................................................................... 312
Подсказки по оптимизации ................................................................................................... 318
Резюме .......................................................................................................................................... 318

Глава 13. Объекты синхронизации и барьеры .............320

Команды glFlush и glFinish .................................................................................................... 320
Зачем использовать объект синхронизации .................................................................... 321
Создание и уничтожение объекта синхронизации........................................................ 321
Ожидание объекта синхронизации..................................................................................... 322
Пример .......................................................................................................................................... 323
Резюме .......................................................................................................................................... 324

Глава 14. Продвинутое программирование 
с OpenGL ES 3.0 .....................................................325

Пофрагментное освещение .................................................................................................... 325
Освещение с использованием карты нормалей ...................................................... 326
Шейдеры для освещения ................................................................................................ 327
Уравнения освещения  ..................................................................................................... 331
Имитация отражения окружающей среды (environment mapping) ........................ 331
Система частиц при помощи точечных спрайтов .................................................. 335
Настройка системы частиц ............................................................................................ 335
Вершинный шейдер для системы частиц .................................................................. 336
Фрагментный шейдер для  системы частиц ............................................................. 338
Системы частиц с использованием преобразования обратной связи .................... 340
Алгоритм рендеринга системы частиц ....................................................................... 341
Создание частиц при помощи преобразования обратной связи ....................... 342
Рендеринг частиц ............................................................................................................... 346
Постобработка изображений ................................................................................................ 347
Настройка рендеринга в текстуру ............................................................................... 348
Фрагментный шейдер размытия .................................................................................. 348
Эффект свечения ............................................................................................................... 349
Проективное текстурирование ............................................................................................. 351
Основы проективного текстурирования ................................................................... 351
Матрицы для проективного текстурирования ........................................................ 352
Шейдеры проективного источника света ................................................................. 354

 Содержание

Шум при помощи трехмерной текстуры .......................................................................... 357
Получение шума ................................................................................................................ 357
Использование шума ........................................................................................................ 361
Процедурное текстурирование ............................................................................................ 363
Пример процедурной текстуры .................................................................................... 364
Антиалиасинг процедурных текстур .......................................................................... 367
Дополнительная литература по процедурным текстурам .................................. 369
Рендеринг ландшафта при помощи чтения из текстуры в вершинном 
шейдере ......................................................................................................................................... 370
Вычисление нормали в вершине и чтение значения высоты 
в вершинном шейдере ...................................................................................................... 371
Дополнительное чтение по рендерингу больших ландшафтов ......................... 372
Рендеринг теней при помощи карты глубины ................................................................ 373
Рендеринг из положения источника света в текстуру глубины ....................... 373
Рендеринг из положения наблюдателя с использованием текстуры 
глубины ................................................................................................................................. 376
Резюме .......................................................................................................................................... 378

Глава 15. Получение состояния ................................379

Запросы строковых значений о реализации OpenGL ES 3.0 ..................................... 379
Получение информации о зависящих от реализации ограничениях ..................... 380
Запрос состояния OpenGL ES .............................................................................................. 383
Пожелания (hints) .................................................................................................................... 387
Запросы по идентификаторам .............................................................................................. 387
Управление непрограммируемыми операциями и запрос их состояния .............. 388
Получение состояния шейдеров и программ .................................................................. 389
Получение информации о вершинных атрибутах ......................................................... 391
Получение состояния текстуры ........................................................................................... 391
Получение состояния сэмплера ........................................................................................... 392
Получение информации об асинхронном объекте-запросе (query) ....................... 392
Получение информации об объекте синхронизации ................................................... 393
Получение информации о вершинном буфере ............................................................... 394
Получение информации о рендербуфере и фреймбуфере ......................................... 394
Резюме .......................................................................................................................................... 396

Глава 16. Платформы OpenGL ES ..............................397

Сборка для Microsoft Windows с использованием Visual Studio ............................. 397
Сборка для Ubuntu Linux ....................................................................................................... 399
Сборка для Android 4.3+ NDK (C++) ................................................................................ 400

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

Пререквизиты ..................................................................................................................... 400
Сборка примеров при помощи Android NDK .......................................................... 401
Сборка на Android 4.3+ SDK (Java) ................................................................................... 401
Сборка для iOS 7 ....................................................................................................................... 402
Пререквизиты ..................................................................................................................... 402
Сборка примеров при помощи XCode 5 .................................................................... 402
Резюме .......................................................................................................................................... 404

Приложение А. GL_HALF_FLOAT ................................405

16-битовое число с плавающей точкой.............................................................................. 405
Преобразование значения с плавающей точкой в 16-битовое значение 
с плавающей точкой ................................................................................................................. 406

Приложение Б. Встроенные функции ........................410

Функции для работы с углами и тригонометрические функции ............................ 411
Экспоненциальные функции ................................................................................................ 412
Общие функции  ....................................................................................................................... 412
Функции для упаковки и распаковки значений с плавающей точкой .................. 414
Геометрические функции ....................................................................................................... 416
Матричные функции ............................................................................................................... 416
Векторные логические функции ......................................................................................... 417
Функции обращения к текстуре .......................................................................................... 418
Функции по обработке фрагментов ................................................................................... 422

Приложение В. Описание библиотеки, 
использованной в данной книге ...............................424

Базовые функции ...................................................................................................................... 424
Функции для преобразований ............................................................................................. 428

Предисловие

Прошло пять лет с тех пор, как версия этой книги для OpenGL ES 2.0 сообщила 
всем разработчикам, что программируемая графика для мобильных и встраиваемых систем не просто появилась, но и собирается остаться.
Пятью годами ранее  более 1 миллиарда человек каждый день использовали 
OpenGL ES для взаимодействия со своими вычислительными устройствами для 
получения информации и развлечения. Практически каждый пиксел на практически каждом экране смартфона был создан, обработан и наложен с применением 
этого графического API.
Теперь OpenGL ES 3.0 был разработан Khronos Group и поставляется на современных мобильных устройствах, продолжая непрерывное движение продвинутой 
графики в руки пользователей повсюду – графики, которая была ранее разработана и опробована на мощных компьютерах, оснащенных поддержкой OpenGL.
На самом деле сейчас OpenGL является наиболее широко распространенной 
группой 3D API, включая как OpenGL для настольных систем и OpenGL ES, так и 
WebGL, дающий поддержку OpenGL ES для веба. OpenGL ES 3.0 поддержит дальнейшее развитие WebGL, позволяя разработчикам на HTML5  получить доступ ко 
всем возможностям современных GPU  для создания действительно переносимых 
3D-приложений.
OpenGL ES 3.0 не только предоставляет разработчикам больше возможностей 
для целого ряда устройств и платформ, но и позволяет писать более быстрые и 
энергоэффективные  приложения, которые легче писать, переносить и поддерживать, – и эта книга покажет вам, как этого добиться.
Никогда не было более захватывающего и вознаграждающего времени для разработчика 3D-графики, чем сейчас. Я благодарю и поздравляю авторов за то, что 
они продолжают быть важной частью развивающейся истории OpenGL ES, и за 
тяжелую работу для создания этой книги, которая поможет разработчикам лучше 
понять и полностью задействовать всю силу OpenGL ES 3.0.
Нейл Треветт,
президент, Khronos Group,
вице-президент по мобильным системам, NVIDIA

Введение

OpenGL ES 3.0 – это программный интерфейс для рендеринга сложной 3D-графики для мобильных и встроенных устройств. OpenGL ES – это основная графическая библиотека для мобильных и встроенных устройств с программируемой 
3D-графикой, включая мобильные телефоны, PDA, консоли, транспортные средства и т. п. Эта книга разбирает весь OpenGL ES 3.0 API  и конвейер, в том числе 
детальные примеры, для предоставления руководства  по разработке широкого 
спектра высокопроизводительных 3D-приложений для мобильных устройств.

Целевая аудитория

Эта книга ориентирована на программистов, которые хотели бы изучить OpenGL 
ES 3.0. Мы рассчитываем, что читатель хорошо знаком с компьютерной графикой. 
В книге мы объясняем многие из важных понятий, относящихся к различным частям OpenGL ES 3.0, но мы ожидаем, что читатель хорошо знаком с основными 
понятиями 3D. Все примеры кода в книге написаны на С. Мы рассчитываем, что 
читатель знаком с С или С++, и касаемся языка программирования только настолько, насколько это касается OpenGL ES 3.0.
Читатель узнает о настройке и программировании каждого аспекта графического конвейера. Книга детально разбирает написание вершинных и фрагментных 
шейдеров и реализацию продвинутых эффектов, таких как попиксельное освещение и системы частиц. Также предоставляются различные советы по оптимизации и эффективному использованию API и оборудования. После прочтения этой 
книги  читатель будет готов писать приложения на OpenGL ES 3.0, полностью 
использующие силу программируемых графических процессоров для мобильных 
устройств.

Организация книги

Книга рассчитана на последовательный разбор API по мере продвижения.

Глава 1. Введение в OpenGL ES 3.0
Глава 1 является введением в OpenGL ES  и предоставляет обзор графического 
конвейера OpenGL ES 3.0. Мы обсудим философию и ограничения, повлиявшие 
на разработку OpenGL ES 3.0. Также мы рассмотрим некоторые соглашения и 
типы, используемые в OpenGL ES 3.0.

Глава 2. Hello Triangle: пример на OpenGL ES 3.0
Глава 2 разбирает простой пример на OpenGL ES 3.0, рисующий треугольник. Нашей целью является показать, как выглядит программа на OpenGL ES 3.0, ознакомить читателя с некоторыми понятиями в API и описать, как построить и запустить программу на OpenGL ES 3.0.

 Введение

Глава 3. Введение в EGL
Глава 3 рассматривает EGL – API для создания поверхностей и контекстов для 
OpenGL ES 3.0. Мы опишем взаимодействие с оконной системой, выбор конфигурации и создание контекстов и поверхностей EGL. Мы расскажем вам о EGL 
достаточно для того, чтобы вы могли сделать все, что вам понадобится для рендеринга при помощи OpenGL ES 3.0.

Глава 4. Шейдеры и программы
Шейдерные и программные объекты являются одними из самых важных объектов 
в OpenGL ES 3.0. В главе 4 мы опишем, как создать шейдерный объект, скомпилировать шейдер и проверить на наличие ошибок. Эта глава также объясняет, как создать 
программный объект, прикрепить к нему шейдерные объекты и выполнить линковку. Мы обсудим, как получать информацию из программного объекта и как задавать значения uniform-переменным. Также вы узнаете о разнице между шейдерами 
в виде исходного текста и бинарными шейдерами и как использовать оба этих типа.

Глава 5. Шейдерный язык OpenGL ES
Глава 5 объясняет основные понятия языка для написания шейдеров. Сюда входят переменные и типы, конструкторы, структуры, массивы, uniform-переменные, 
uniform-блоки и переменные для получения и выдачи значений. Эта глава также 
описывает некоторые тонкости языка для написания шейдеров, такие как задание 
точности и инвариантность.

Глава 6. Атрибуты вершины, вершинные массивы 
и объекты-буферы
Начиная с главы 6 (и заканчивая главой 11),  мы начнем изучение конвейера,  для 
того чтобы показать, как настроить и запрограммировать каждую часть графического конвейера. Мы начнем с описания того, как геометрические данные поступают на вход конвейера, и обсудим атрибуты вершины, вершинные массивы и 
объекты-буферы.

Глава 7. Сборка примитивов и растеризация
После обсуждения передачи геометрии в конвейер в предыдущей главе в главе 7 
мы рассмотрим, как геометрия собирается в примитивы. Разбираются все типы 
примитивов, поддерживаемые OpenGL ES 3.0, включая точечные спрайты, треугольники, полосы и вееры из треугольников. Также мы рассмотрим, как выполняются преобразования координат над вершинами, и расскажем, как происходит 
растеризация в конвейере OpenGL ES.

Глава 8. Вершинные шейдеры
Следующая рассматриваемая часть конвейера – это вершинный шейдер. Глава 8 
предоставляет обзор места вершинного шейдера в конвейере и специальных пере
Введение  17

менных, доступных в вершинных шейдерах OpenGL ES. Приводятся примеры 
вершинных шейдеров, включая повершинное освещение и скиннинг. Также мы 
рассмотрим, как фиксированный конвейер OpenGL ES 1.0 (и 1.1) может быть реализован при помощи вершинных шейдеров.

Глава 9. Текстурирование
Глава 9 начинает рассмотрение фрагментных шейдеров с описания возможностей 
по работе с текстурами в OpenGL ES 3.0. Эта глава детально разбирает создание 
текстур, загрузку в них данных и использование их для рендеринга. Описываются преобразования текстурных координат, фильтрация, форматы текстур, сжатые 
текстуры, объекты-сэмплеры, неизменяемые текстуры, буферы и пирамидальное фильтрование. Эта глава рассматривает все типы текстур, поддерживаемые 
в OpenGL ES 3.0: двухмерные текстуры, кубические текстурные карты, массивы 
двухмерных текстур и трехмерные текстуры.

Глава 10. Фрагментные шейдеры
Глава 9 рассматривает использование текстур во фрагментных шейдерах; глава 10 
рассматривает все остальное, что вам нужно знать для написания фрагментных 
шейдеров. Мы даем обзор фрагментных шейдеров и всех специальных встроенных переменных, доступных им. Мы также покажем, как реализовать весь фиксированный конвейер из OpenGL ES 1.1 при помощи фрагментных шейдеров. 
Приводятся примеры мультитекстурирования, тумана, альфа-теста и задаваемых 
пользователем плоскостей отсечения.

Глава 11. Операции с фрагментами
Глава 11 рассматривает операции, которые могут быть применены либо ко всему 
фреймбуферу, либо к отдельным фрагментам после выполнения фрагментного 
шейдера в конвейере рендеринга OpenGL ES 3.0. Эти операции включают в себя 
тест на попадание в заданный прямоугольник, тест трафарета, тест глубины, мультисэмплинг, смешивание и растрирование. Эта глава завершает рассмотрение конвейера рендеринга.

Глава 12. Объекты фреймбуфера
Глава 12 рассматривает использование объектов фреймбуфера для рендеринга 
в невидимые поверхности. Данные объекты могут быть использованы для нескольких задач, наиболее распространенной из них является рендеринг в текстуру. 
Эта глава дает полный обзор части API, связанного с фреймбуферами. Понимание 
объектов фреймбуфера важно для реализации ряда продвинутых эффектов, таких 
как отражения, теневые карты и постобработка.

Глава 13. Объекты синхронизации и барьеры
Глава 13 предоставляет обзор объектов синхронизации и барьеров, которые являются эффективными примитивами для синхронизации с приложением  и GPU 

 Введение

в OpenGL ES 3.0. Мы рассмотрим, как использовать объекты синхронизации и 
барьеры, и завершим рассмотрение примером.

Глава 14. Продвинутое программирование с OpenGL ES 3.0
Глава 14 является ключевой в том смысле, что она связывает вместе многие темы, 
рассматриваемые на протяжении всей книги. Мы выбрали набор продвинутых 
методов и приведем примеры, демонстрирующие, как реализовать эти методы. 
Глава включает в себя такие методы, как попиксельное освещение с использованием карт нормалей, отражение окружающей среды, системы части, постобработка изобра жений, процедурные текстуры, теневые карты, рендеринг ландшафта и 
проективное текстурирование.

Глава 15. Получение состояния
В OpenGL ES 3.0 поддерживается большое число запросов состояния. Практически для всего, что можно установить, есть соответствующий способ получения 
этого значения. Глава 15 предоставляет справочник по различным запросам состояния, доступным в OpenGL ES 3.0.

Глава 16. Платформы OpenGL ES
В последней главе мы перейдем от деталей API к разговорам о том, как собрать 
примеры для OpenGL ES  на iOS 7, Android 4.3 NDK, Android 4.3 SDK, Windows и 
Linux. Эта глава служит как справочник по тому, как собрать примеры по OpenGL 
ES 3.0 на вашей платформе.

Приложение А. GL_HALF_FLOAT_OES
Приложение А рассматривает детали формата для 16-битовых чисел с плавающей 
точкой и процесс перевода чисел между IEEEE-форматами для чисел с плавающей точкой и 16-битовым форматом с плавающей точкой.

Приложение Б. Встроенные функции
Приложение Б предоставляет информацию о всех встроенных функциях в шейдерном языке OpenGL ES.

Приложение В. Описание библиотеки, использованной 
в данной книге
В приложении В приводится обзор библиотеки, которая была разработана авторами  книги и объясняет, что делает каждая функция.

Справка OpenGL ES 3.0
Вставлена в середину книги и перепечатывается с разрешения Khronos Group. 
Включает в себя полный список всех функций OpenGL ES 3.0 вместе со всеми типами, операторами, описателями, встроенными величинами и функциями в шейдерном языке OpenGL ES 3.0. 

Введение  19

Примеры кода и шейдеров

В этой книге содержится много примеров кода и шейдеров. Вы можете скачать все 
примеры с сайта книги opengles-book.com, предоставляющего ссылку на проекты 
на github с кодом из книги. Все примеры были собраны и проверены на iOS 7, 
Android 4.3 NDK, Android 4.3 SDK, Windows (в режиме эмуляции OpenGL ES 3.0) 
и Ubuntu Linux. Некоторые из примеров были реализованы в PVRShaman, инструменте для разработки шейдеров от PowerVR, доступном для Linux, Windows и 
Mac OS X. Сайт книги предоставляет для скачивания все требуемые инструменты.

Ошибки

Если вы найдете что-то в книге, что, по вашему мнению, является ошибкой, пожалуйста, пошлите нам сообщение по адресу errors@opengles-book.com. Список 
найденных ошибок можно найти на сайте книги opengles-book.com.

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