Opengl руководство разработчика

Файл «OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д» внутри архива находится в папке «Раздаточные материалы». PDF-файл из архива «Раздаточные материалы»,
который расположен в категории «».
Всё это находится в предмете «инженерная графика» из 5 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова.
Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

° ~ ° М.:Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер ‘;е Базовые и донелнителыме методы компыптерней графики Повышение производительности программ ~»; Расширения, создание кросс-платфпрмпых приложений е Последние обновления языка Ореп6Е е иклипте ж п~ пп с ммист М. Ву, Т. Девис, Дж. Нейдер, Д. Шрейнер 4. Рцкаведатва -. -в па пюегваммиДеванив Москва ° Санкт-Петербург Нижний Новгород ° Воронеж Ростов-на-Дону ° Екатеринбург ° Самара Новосибирск Киев Харьков Минск 2006 ББК 32.973-018.3 УДК 004.92 Шбб ВУ Мм ДЕВИС Тм НЕйДЕР Джм ШРайНЕР Д. Ш85 Ореола.

Руководство по программированию. Библиотека программиста, 4-е издание. — СПбх Питер, 2006. — 624 сл ил. 1ЗВМ 8-94723-827-8 Зто 4-с юдание признанного бестселлера, посвященного ОрелОБ и его библиотеке инструментов. В книге описаны все возможности ОрепОБ и самые значительные приложения, содержится описание бмовых методов компьютерной графики, таких как построение и воспроизведение трехмерных модедей, интерактивный просмотр объектов с различных точек наблюдения, использование тонирования, освещения и эффектов текстурирования. Прелставлсно углубленное описание дополнительных методов компьютерной графики: наложение текстур, сглаживание, «туман» и имитация других атмосферных эффектов, сплайны, конвейерная обработка изображений и другие ключевые темы, такие как повышение производительности программ, расширения ОрепОВ и создание кросс-платформных приложений.

ББК 32.973-018 3 УДК 004.92 Права на издание полу сны по соглашению с Асфзопштвзшу со«сшил все права заимщены. Ни«виан шст«двиной «нити не меже~ быть воспроизведена в шкод бы пз ни было форме без пис»менного рвзрешеню влацельцев авторсиих прав. Информация, ссдеркшщаяся е данной книге, получена из источников. рассматриваемых издагеп«от«ем иак падежные тем нв менее. имея в виду возможные челове««сине или твкничвские ошибки, издательство не может гврвнтироват«абсолютную то«ноет«н полноту прнводиммк сведений и не «есет ответственности за возможныв ошибии, связанные с испопыоввнием книги О 2004 Оу Масон Огарюса, 1пс. Гав 0321173481 (англ ) О Перевод на русский язык, ЗАО Издательский дом «Питер», 2006 ГВВН 6-04723-827-6 О Издание на русс«ом языке, оформление.

ЗАО Издательский дом «Питер», 2006 Краткое содержание Об этой книге Благодарности …. Глава 1. Введение в Орепб~ Глава 2. Управление состоянием и рисование геометрических объектов ……, . Глава 3. Визуализация Глава 4. Цвет Глава 5. Освещение Глава б. Смешивание, сглаживание, туман и отклонение …. Глава 7. Списки отображения Глава 8. Вывод пикселов, битовых образов, шрифтов и изображений . Глава 9. Наложение текстур Глава 10. Буфер кадров…

Глава 11. Мозаичное представление и поверхности второго порядка ………… Глава 12. Вычислители и МОйВ5… Глава 13. Выбор и обратная связь .. Глава 14. Теперь, когда вы знаете многое………… Приложения. Приложение А. Порядок выполнения операций……… Приложение Б. Параметры состояния Приложение В.

ОрепЯ и оконные системы………, . Приложение Г. Основы бШТ: инструментальный набор пакета разработчика ОрепБ…. Приложение Д. Вычисление векторов нормалей ……., . Приложение Е. Однородные координаты и матричные преобразования ….., ……. Приложение Ж. Приемы программирования …, …., ..

Приложение 3. Орепб~ и инвариантность ……,, …. Словарь терминов .. Алфавитный указатель……..,………… 15 21 22 43 96 145 160 198 238 259 309 386 416 438 466 492 519 520 525 553 572 577 582 588 593 595 610 Содержание Об этой книге Что нового в этом издании . Что необходимо знать перед прочтением , Как получить примеры программ . Обучающие программы по Ореп6~ от Нэйта Робинса Используемые стили От издателя перевода .. Благодарности Глава 1.

Введение в Орели., Что такое Ореп68 .. Немного программного кода, . Синтаксис команд Ореп61. Ореп60 как конечный автомат Конвейер рисования Ореп60 . Списки отображения.. Вычислители Операции над вершинами . Компоновка примитивов .. Операции над пикселами Компоновка текстур .. Растеризация . Операции над фрагментами . Библиотеки, связанные с Ореп60 .. Включаемые файлы ..

6ШТ, набор инструментов ОрепИ. Анимация Обновление с задержкой Движение = Перерисовка + Обмен Глава 2. Управление состоянием и рисование геометрических объектов, . Основы рисования Очистка окна Установка цвета . Ускорение завершения рисования . Управление системой координат.. Описание точек, линий и многоугольников Что такое точки, линии и многоугольники?.

Задание вершин . 15 17 . 18 19 . 20 . 20 . 20 21 . 22 . 23 . 28 27 . 29 . 30 . 31 . 31 . 31 , 31 . 32 . 32 . 32 . 33 . 33 . 34 . 35 . 38 . 40 . 43 . 45 . 45 . 48 . 49 50 . 51 51 55 Содержание Рисование графических примитивов в Ореола Управление основными состояниями Отображение точек, линий и многоугольников Подробно о точках Подробно о линиях Подробно о многоугольниках Векторы нормали . Массивы вершин . Шаг 1: активация массивов Шаг 2: помещение данных в массивы Шаг 3: разыменование и рисование . Смешанные массивы ..

Группы атрибутов. Несколько советов по построению полигональных моделей поверхностей . Пример: построение икосаэдра Глава 3. Визуализация, Обзор: аналогия с камерой Пример: рисование куба . Команды преобразования общего назначения Модельно-видовые преобразования . Размышления о преобразованиях. Модельные преобразования Видовые преобразования . Преобразования проецирования . Перспективное проецирование Ортогональное проецирование Отсечение объемом видимости Преобразование окна просмотра .

Определение окна просмотра. Измененная координата глубины, Проблемы преобразований.. Управление стеком матриц.. Стек модельно-видовых матриц. Стек матриц проекций .. Дополнительные плоскости отсечения . Примеры объединения нескольких преобразований Солнечная система . Сочлененная рука робота. Обратные, или имитационные, преобразования Глава 4. Цвет ..

цветовосприятие Вычисление цвета . йбВА в сравнении с индексированным цветом, Режим РОВА .. Режим индексации цвета . Выбор между режимами КОВА и индексации цвета Переключение между режимами . Задание цветовой и полутоновой моделей . Задание цвета в режиме КОВА , . . 56 . 61 . 61 . 62 .

72 . 73 75 . 76 . 78 . 84 . 86 . 89 90 96 . 98 101 105 107 107 110 114 119 120 122 124 124 124 126 127 129 132 132 133 . 135 135 138 141 145 146 147 150 150 152 . 153 154 155 155 8 Содержание Задание цвета в режиме индексации цвета . Задание модели закрашивания .. Глава 5. Освещение Удаление невидимых поверхностей Реальный мир и освещение в Орепб~ Фоновый, рассеянный, отраженный и излучаемый свет……… Цвета материала, . Значения кбв для источников света и материалов ………..

Пример: рисование освещенной сферы. Задание векторов нормалей для каждой вершины каждого объекта… Создание, размещение и включение одного или нескольких источников света Выбор модели освещения. Задание свойств материала для объектов в сцене Замечания на память. Создание источников света Цвет Положение и ослабление . Прожекторы .. Несколько источников света . Управление положением и направлением источников света……. Выбор модели освещения , .

Общее фоновое освещение Локальная или бесконечно удаленная точка обзора Двухстороннее освещение .. Вторичный отраженный цвет . Включение источников света . Задание свойств материала . Рассеянное и фоновое отражение Зеркальное отражение .. Излучение . Изменение свойств материала Режим цвета материала Математика освещения Излучение материала Масштабированный общий фоновый свет Вклады от источников света Вторичный отраженный цвет . Освещение в режиме индексации цвета .. Математика освещения в режиме индексации цвета Глава 6.

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

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

Язык:
Русский

Год издания:
2017

Добавлена:
05.05.2020

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

Скачать бесплатно книгу «OpenGL ES 3.0. Руководство разработчика»

Читать онлайн «OpenGL ES 3.0. Руководство разработчика»

Добавить отзыв

Решили изучить OpenGL, но знаете, с чего начать? Сделали подборку материалов.

OpenGL (открытая графическая библиотека) — один из наиболее популярных графических стандартов для работы с графикой. Программы, написанные с её помощью можно переносить практически на любые платформы, получая одинаковый результат. OpenGL позволяет не писать программы под оборудование, а воспользоваться существующими разработками. Разрабатывает OpenGL компания Silicon Graphics, при сотрудничестве с другим технологическими гигантами.

С точки зрения программирования, OpenGL — это программный интерфейс для растровой графики, таких как графические ускорители. Он включает в себя около 150 различных команд, с помощью которых программист может определять различные объекты и производить рендеринг.

Материалы для изучения

Туториалы

  • Мини-курс от MIT;
  • Пособие от МГУ;
  • Туториалы от Gamedev.ru;
  • Переведённые туториалы от NeHe;
  • Туториал от learnopengl.com;
  • Туториалы с разделением на уровни.

Онлайн-курсы

  • Lynda — «Курс по OpenGL»;
  • Токийский университет — «Интерактивная компьютерная графика»;
  • Университет Сан-Диего — «Основы компьютерной графики».

Книги

На русском

1. Д. Шрайнер — OpenGL Redbook — скачать;

Книга — официальное руководство по изучению OpenGL. Последние издания практически полностью отличаются от первоначальных вариантов, автор обновляет её в соответствии с изменениями версий. По мнению сотен специалистов, работающих с Open GL, эта книга является первым, что должен взять в руки желающий изучить технологию.

2. Д. Вольф — Open GL 4. Язык шейдеров. Книга рецептов (2015) — скачать;

«OpenGL»

В этой книге рассматривается весь спектр приемов программирования на GLSL, начиная с базовых видов шейдеров – вершинных и фрагментных, – и заканчивая геометрическими, вычислительными и шейдерами тесселяции. Прочтя ее, вы сможете задействовать GPU для решения самых разных задач.

3. Д. Гинсбург — OpenGL ES 3.0. Руководство разработчика (2014) — купить;

В данной книге автор рассматривает весь API и язык для написания шейдеров. Также вы найдете советы по оптимизации быстродействия, максимизации эффективности работы API и GPU и полном использовании OpenGL ES в широком спектре приложений.

4. В. Порев — Компьютерная графика (2002) — скачать;

«Порев»

В книге рассмотрены способы работы с компьютерной графикой, частые проблемы, приведены примеры программ на C++.

На английском

1. П. Ширли — Основы компьютерной графики (2009) — скачать;

Книга предназначена для введение в компьютерную графику на базовом уровне. Авторы рассказывают про математические основы компьютерной графики с акцентом на то, как применять эти основы для разработки эффективного кода.

2. Э. Ангел — Интерактивная компьютерная графика — купить;

Эта книга предназначена для всех студентов, изучающих информатику и программирование углубленно. Компьютерная анимация и графика — уже не так сложно, как раньше. Следуя своему утверждению, автор написал книгу максимально понятным языком.

3. Г. Селлерс — Супербиблия Open GL (2015) — купить.

Последнее издание книги является полноценным учебником по Open GL 4.5. Это руководство затрагивает полный аспект современной разработки и является одним из наиболее рекомендуемых профессионалами.

Дополнительно

По ссылке книги по теме с популярного форума.

Полезные ресурсы

  • Примеры;
  • Исходники и описания;
  • Документация;
  • Движок для разработки;
  • Библиотеки.

Возможно вас заинтересует следующая статья:

  • Разработка игр – это просто: 12 этапов изучения геймдева

Французская версия доступна здесь: https://medium.com/@xzan/opengl-le-guide-du-noob-pour-d%C3%A9veloppeur-android-78f069c7214d

Итак, вы решили попробовать OpenGL на Android? Прежде чем мы погрузимся в подробности, важно знать, во что вы ввязываетесь. Вы будете плакать, умолять и сомневаться в том, что, как вы думали, знали с начальной школы. Будьте уверены, это нормально!

Что такое OpenGL?

Чтобы быть уверенным, что мы говорим об одном и том же, давайте сразу проясним ситуацию. OpenGL — это программный интерфейс, который позволяет вам общаться с графическим драйвером устройства. Это может быть телефон, компьютер, экран телевизора или любое другое устройство, поддерживающее OpenGL. Ну да, устройство должно его поддерживать. Что касается устройств Android, они поддерживают:
* OpenGL ES 1.0 и 1.1 начиная с Android 1.0 (API 4)
* OpenGL ES 2.0. начиная с Android 2.2 (API 8)
* OpenGL ES 3.0 начиная с Android 4.3 (API 18) (почти)
* OpenGL ES 3.1, начиная с Android 5.0 (API 21)

ES что теперь? …

Вы уже догадались, это было слишком хорошо, чтобы быть правдой, есть загвоздка. Android не поддерживает OpenGL, но поддерживает OpenGL ES. OpenGL ES — это вариант спецификаций OpenGL для встраиваемых систем.
Хорошо, хорошо! Это не так уж и плохо, есть различия, но ничего серьезного. Это означает, что какой-то код, работающий на вашем компьютере, может работать не так, как на вашем телефоне, но почти не работает.
Ой!

Графический драйвер?

«Я думал, что Android создан на Java, и мне не нужно было заботиться об оборудовании, если я не буду использовать собственный код (C или C ++)»

Вы почти правы. Когда вы используете OpenGL, вы обращаетесь непосредственно к графическому драйверу, поэтому возможно, что один и тот же код Java не работает одинаково на всех телефонах. Но еще будет время позаботиться об этом, если и когда возникнут такие проблемы встаньте!

Давайте нырнем!

Я собираюсь говорить только о OpenGL ES 2.0, потому что он поддерживается большинством телефонов Android (Android 2.2+). Тем не менее, этого должно быть достаточно для запуска и запуска OpenGL ES 3.0 или 3.1, если он вам понадобится.

В следующих разделах я расскажу о некоторых важных моментах и ошибок, не вдаваясь в подробности реализации. Чтобы узнать, как все работает вместе, просмотрите пример проекта, который сопровождает эту статью: https://bitbucket.org/Xzan/opengl-example.
Обратите внимание, что все было помещено в один файл специально, чтобы облегчить чтение.

Или, что еще лучше, замечательное руководство на веб-сайте разработчика Android: https://developer.android.com/training/graphics/opengl/index.html

GLSurfaceView и средство визуализации

Нам нужно с чего-то начать, и, как правило, лучше начинать с самого начала. Чтобы не запутать вас с самого начала, мы собираемся начать с того, что вам нужно знать об Android на Java.

В нашем случае мы начинаем с добавления представления, в котором мы собираемся отображать результат наших команд OpenGL. Это представление называется GLSurfaceView и отвечает за создание потока для ваших команд OpenGL.
Затем входит в его интерфейс: GLSurfaceView.Renderer, который будет вызываться в трех ключевых моментах потока OpenGL GLSurfaceView:

  • на SurfaceCreated (GL10 gl, конфигурация EGLConfig)
  • на SurfaceChanged (GL10 gl, int width, int height)
  • на DrawFrame (GL10 gl)

Несмотря на то, что они довольно понятны, важно знать, что вы собираетесь делать в каждом из них.

* В SurfaceCreated вы инициализируете свою программу и начальные конфигурации. Вы можете увидеть этот метод как конструктор View. Этот метод вызывается один раз для каждого цикла обзора поверхности. Но Surface можно уничтожить, и этот метод будет вызван при создании следующего.

* на SurfaceChanged — хорошее место для создания ваших текстур (мы еще вернемся к этому) и (повторного) создания того, что зависит от размера вашего представления. Вы можете увидеть этот метод как View.onSizeChanged (int w, int h, int oldw, int oldh). Этот метод тоже не часто вызывается.

* Наконец, в DrawFrame вызывается каждый раз, когда ваши представления будут отображаться на экране, другими словами очень часто. Вы можете видеть это как метод View.onDraw (Canvas Canvas) и, следовательно, лучшие практики в отношении производительности также применяются здесь (например: не создавайте экземпляры объектов в этом методе и т. Д.).

Бонус: вы можете попросить, чтобы ваше представление не перерисовывалось каждый раз, а только тогда, когда оно грязное. Для этого вызовите GLSurfaceView.setRenderMode (int) с параметром RENDERMODE_WHEN_DIRTY. Затем вызовите GLSurfaceView.requestRender (), чтобы указать, что ваше представление грязное.

Примечание. SurfaceView не является видом, в отличие от других, он отображается под вашим действием, в котором есть отверстие, через которое вы можете видеть свою поверхность. Если вы хотите получить что-то более классическое, вы можете использовать TextureView. GLTextureView отсутствует, но вы можете найти реализацию от Романа Нурика в Музее: https://github.com/romannurik/muzei/blob/master/main/src/main/java/com/google/android/apps /muzei/render/GLTextureView.java .
Сам по себе OpenGL не невозможен без GLSurfaceView или GLTextureView, но использовать их гораздо проще, чем заботиться обо всем этом самостоятельно, особенно вначале.

Как работает OpenGL

Теперь пора поговорить об OpenGL, но прежде чем мы пойдем дальше, чтобы понять его полностью, нам нужен полный обзор конвейера OpenGL. Другими словами, шаги, которые выполняет OpenGL для построения изображения для рендеринга на экране на основе значений, которые мы ему подаем.

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

  1. Мы передаем в вершинный шейдер координаты вершин. Он их преобразует и передает в растеризатор. Эти вершины образуют треугольники, которые являются базовыми кубиками 3D-сцены.
  2. Растеризатор заполнит треугольники фрагментами, чтобы их можно было отобразить на экране. Фрагменты — это набор состояний, которые позволяют вычислить конечные пиксели.
  3. Для каждого фрагмента вызывается шейдер фрагмента, который задает цвет для отображения на экране.
  4. В конечном итоге данные объединяются для визуализации на экране или отправки в текстуру в виде пикселей.

Программы GLSL (или шейдеры)

GLSL является сокращением от языка Open GL S hader L и является названием языка, на котором мы программируем OpenGL. Ключевое слово — «шейдер». Это странное слово, которое вы, возможно, слышали раньше, но не понимаете, на самом деле простое. Это часть программы OpenGL, которая будет выполняться на графическом процессоре.

Более того, существует несколько типов шейдеров. Из них два, которые нам интересны:

  • Шейдер вершин: отвечает за вычисление позиции рендеринга. Мы скармливаем ему набор атрибутов, связанных с точкой в ​​трехмерном пространстве, и он вычисляет положение на экране. Этот набор атрибутов чаще всего состоит из координат и цвета (или координат текстуры). Вершинный шейдер вызывается один раз для каждой вершины.
  • Шейдер фрагмент: отвечает за вычисление цвета для каждого пикселя. В качестве входных данных он получает выходные данные вершинного шейдера. Этот код выполняется для каждого пикселя вашего изображения. Чтобы было понятнее, графический процессор оптимизирует большинство своих вызовов, чтобы обеспечить максимальную производительность для рендеринга и способен вычислять значение нескольких пикселей параллельно. Мы часто представляем это так, как будто графический процессор вычисляет каждый пиксель одновременно, но важно выйти из этого положения: мы не начинаем с левого верхнего угла, а заканчиваем правым нижним. Если вы выберете информацию для пикселя [0,0], когда придет время вычислить пиксель [0,1], у вас не будет этой информации.

Очень простой пример этих двух шейдеров можно найти в примере проекта:

Vertex shader :
precision mediump float;
uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
attribute vec4 vTextureCoordinate;
varying vec2 position;
void main() {
  gl_Position = uMVPMatrix * vPosition;
  position = vTextureCoordinate.xy;
}
Fragment shader :
precision mediump float;
uniform sampler2D uTexture;
varying vec2 position;
void main() {
  gl_FragColor = texture2D(uTexture, position);
}

В вершинном шейдере мы получаем 3 параметра:

  • uMVPMatrix: матрица, которая позволяет нам изменять точку обзора, поворот и масштаб.
  • vPosition: координаты, которые будут формировать нашу «полосу».
  • vTextureCoordinate: координаты каждой нашей вершины.

Во фрагментном шейдере мы получаем 2 параметра:

  • uTexture: текстура, содержащая изображение для показа.
  • position: параметр, полученный от вершинного шейдера, который содержит позицию отображаемого пикселя.

Я уверен, что вы знаете, что есть шейдеры, которые намного сложнее, чем эти.

Введите матрицу (Системы координат)

Система координат OpenGL не заботится о размере экрана, как показано на рисунке ниже:

Вот почему так важно передавать в вершинный шейдер информацию о соотношении и другую информацию. В этом и состоит полезность этой строки в примере проекта.

В примере проекта и во многих других случаях координаты передаются как «полоса». Это означает, что мы передаем координаты вершин соседних треугольников, создавая изображение, которое мы хотим показать:

По-прежнему в примере проекта переданный массив состоит из 4 вершин, начиная с нижнего левого угла, переходя в нижний правый угол и заканчивая верхним. в левом углу и заканчивая в правом верхнем углу.

Координаты текстуры немного отличаются в зависимости от ориентации загруженного изображения.

Кроме того, если вы присмотритесь, вы заметите, что переданные координаты для позиции меняются от -1 до 1, а переданные координаты для текстур изменяется от 0 до 1. Кроме того, координаты позиции содержат глубину в качестве координаты Z, но это не обязательно, если вы используете только 2D.

В вершинном шейдере, приведенном в качестве примера, есть умножение между uMVPMatrix и vPosition. vPosition — это матрица, содержащая координаты, упомянутые ранее. uMVPMatrix — это матрица, сформированная с помощью служебных методов, предоставляемых классом Matrix из фреймворка Android. GLSL может выполнять умножение матриц и обрабатывать их просто и эффективно.
Еще один нюанс, я использовал vTextureCoordinate .xy. Это создает вектор размера 2, содержащий первое и второе значение вектора размера 4, который является vTextureCoordinate. Я мог бы сделать: vTextureCoordinate .xx, чтобы создать вектор размера 2 с первым значением vTextureCoordinate для обоих значений.

Обратите внимание на небольшую тонкость, с которой вы можете столкнуться при чтении шейдеров: чтобы быть более правильным и уважать соглашения об именах, мне следовало использовать vTextureCoordinate. st. STPQ заменяет XYZW, когда речь идет о координатах текстуры, и RGBA, когда речь идет о цветах. В любом случае, использование того или другого не изменит выполнение, только его читабельность.

Текстуры

Текстуры — это области памяти, в которых графический процессор (ГП) хранит изображения. Либо для их рендеринга, либо для записи новых значений.

Код для создания новой текстуры в памяти можно найти здесь.

Буферы (FBO)

F rame B uffer O bject (или FBO) накладывается на текстуру и пишет в ней. Без FBO все команды OpenGL, которые вы выполняете, будут отображаться на экране. Это было бы довольно неприятно, если бы вы добились некоторого эффекта, комбинируя некоторые другие эффекты.

Код для создания FBO можно найти здесь.

Советы

В демонстрационном проекте я добровольно поместил все в один файл. Это было сделано для облегчения чтения, потому что, когда я учился, я заметил, что попытка найти фрагмент кода, который я пытаюсь понять, остановит меня в моем отражении и не поможет мне понять.
Тем не менее, когда у вас есть основы, я могу только посоветовать вам максимально абстрагировать ваш код за некоторыми классами Java. Например, создайте класс, который будет обрабатывать создание FBO за вас, поместите вашу настройку в класс, который расширит GLSurfaceView и извлечет логику шейдеров в их собственные классы (как это делает GPUImage это так хорошо) и т. д. Это сделает код чище и удобнее для чтения.

Сбои часто, но сбои хорошо. Отладка кода OpenGL особенно сложна. Проверяйте наличие ошибок и свои состояния (например: состояние ваших FBO или ошибку компиляции шейдеров) и генерируйте исключение RuntimeException, чтобы помочь вам увидеть, что и где не так. Это поможет вам во время разработки, а также при тестировании на разных устройствах.

Наконец, протестируйте вручную на нескольких устройствах и нескольких версиях Android. Вы не сможете уловить все, но вы уже уловите множество мелких деталей. Также протестируйте флагманы, такие как серия Galaxy S или серия Galaxy Note от Samsung , но также на более скромных устройствах. Не забывайте некоторые известные китайские бренды, такие как Wiko или Xiaomi.
Если у вас не так много устройств и / или вы хотите перестраховаться, опубликуйте свое приложение на альфа- и бета-каналах в Play Маркете, чтобы получить отзывы. от ваших пользователей, прежде чем это перейдет к более широкой аудитории.

Заключение

Что ж, вы поняли, разработка для OpenGL, это много шаблонов, математики и возни. Тем не менее, будьте уверены, многие люди прошли через это до вас, и они столкнулись с той же проблемой, с которой столкнетесь вы, поэтому на этом пути будет помощь.
Надеюсь, в этой статье я смог выделить некоторые ключевые концепции, которые помогут вам понять сообщения StackOverflow, когда вы будете искать ответы на свои вопросы.

Как упоминалось ранее, руководство, предоставленное веб-сайтом разработчика Android, действительно хорошее, даже если не хватает нескольких моментов, которые, я надеюсь, были объяснены здесь. Он также поставляется с отличным образцом проекта, который может стать огромным источником вдохновения, и предлагает несколько утилит, которые вам очень помогут.

Понравилась статья? Поделить с друзьями:
  • Национальное руководство по акушерству ред радзинский
  • Монтаж деревянной обрешетки под сайдинг своими руками пошаговая инструкция
  • Матч 3 инструкция на русском языке
  • Трахисан таблетки инструкция по применению цена
  • Иверсан инструкция применение для людей отзывы цена