OpenGL ES 3.0. Руководство разработчика
Покупка
Тематика:
Графика и анимация на компьютере
Издательство:
ДМК Пресс
Перевод:
Боресков Алексей Викторович
Год издания: 2015
Кол-во страниц: 448
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-256-0
Артикул: 634676.02.99
Доступ онлайн
В корзину
OpenGL ES — это ведущий интерфейс и графическая библиотека для рендеринга сложной трехмерной графики на мобильных устройствах. Последняя версия, OpenGL ES 3.0, делает возможным создания потрясающей графики для новых игр и приложений, не влияя на производительность устройства и время работы аккумулятора.
В данной книге авторы рассматривает весь API и язык для написания шейдеров. Они внимательно рассматривают возможности OpenGL ES такие как теневые карты, дублирование геометрии, рендеринг в несколько текстур, uniform-буферы, сжатие текстур, бинарное представление программ и преобразование обратной связи. Шаг за шагом вы перейдете от вводных примеров к продвинутому попиксельному освещению и системам частиц. Также вы найдете содержательные советы по оптимизации быстродействия, максимизации эффективности работы API и GPU и полном использовании OpenGL ES в широком спектре приложений. На сайте издательства www.dmkpress.com выложены примеры к книге на языке С.
Издание предназначено программистам мобильных приложений, желающих максимально использовать графические возможности своих устройств.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
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.
Доступ онлайн
В корзину