Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 610373)
Контекстум

OpenGL ES 3.0. Руководство разработчика (3000,00 руб.)

0   0
Первый авторГинсбург Дэн
АвторыПурномо Будирижанто , Боресков А. В.
ИздательствоМ.: ДМК Пресс
Страниц449
ID794590
АннотацияOpenGL ES — это ведущий интерфейс и графическая библиотека для рендеринга сложной трехмерной графики на мобильных устройствах. Последняя версия, OpenGL ES 3.0, делает возможным создания потрясающей графики для новых игр и приложений, не влияя на производительность устройства и время работы аккумулятора. В данной книге авторы рассматривает весь API и язык для написания шейдеров. Они внимательно рассматривают возможности OpenGL ES такие как теневые карты, дублирование геометрии, рендеринг в несколько текстур, uniform-буферы, сжатие текстур, бинарное представление программ и преобразование обратной связи. Шаг за шагом вы перейдете от вводных примеров к продвинутому попиксельному освещению и системам частиц. Также вы найдете содержательные советы по оптимизации быстродействия, максимизации эффективности работы API и GPU и полном использовании OpenGL ES в широком спектре приложений. На сайте издательства выложены примеры к книге на языке С.
Кому рекомендованоИздание предназначено программистам мобильных приложений, желающих максимально использовать графические возможности своих устройств.
ISBN978-5-97060-256-0
УДК004'27OpenGL ES 3
ББК32.972.121
Гинсбург, Д. OpenGL ES 3.0. Руководство разработчика = OpenGL ES 3.0: Programming Guide / Б. Пурномо; пер. А.В. Боресков; Д. Гинсбург .— Москва : ДМК Пресс, 2015 .— 449 с. : ил. — Пер. с англ. — ISBN 978-5-97060-256-0 .— URL: https://rucont.ru/efd/794590 (дата обращения: 05.04.2025)

Предпросмотр (выдержки из произведения)

OpenGL_ES_3.0__руководство_разработчика.pdf
Стр.5
Стр.6
Стр.7
Стр.8
Стр.9
Стр.10
Стр.11
Стр.12
Стр.13
Стр.14
OpenGL_ES_3.0__руководство_разработчика.pdf
УДК 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 (анг.) ISBN 978-5-97060-256-0 (рус. Copyright © 2014 Pearson Education, Inc. © Оформление, перевод, ДМК Пресс, 2015
Стр.5
Содержание Предисловие ......................................................... 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
Стр.6
6  Содержание Создание простого вершинного и фрагментного шейдеров .........................................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
Содержание  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
Стр.8
8  Введение Вывод примитивов ................................................................................................................... 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
Содержание  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
Стр.10
10  Содержание Альфа-тест (с использованием 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
Содержание  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
Стр.12
12  Содержание Шум при помощи трехмерной текстуры .......................................................................... 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
Содержание  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
Стр.14

Облако ключевых слов *


* - вычисляется автоматически