Главная » Программирование игр под Android » Конвейер визуализации OpenGL – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

OpenGL ES отслеживает эти три матрицы. Каждый раз, когда мы устанавливаем одну из них, она сохраняется в памяти до тех пор, пока мы снова ее не изменим. Говоря языком OpenGL ES, это называется состоянием. OpenGL не просто отслеживает состояние матрицы, а также следит за тем, хотим ли мы произвести альфа-смешивание, учитывать освещение, за тем, какая текстура должна быть применена к нашей геометрии и т. д. Фактически OpenGL ES представляет собой одну большую машину состояний. Мы устанавливаем текущее состояние, добавляем геометрию объектов и приказываем OpenGL ES визуализировать изображение. Рассмотрим, как треугольник проходит через механизм визуализации. На рис. 7.4 показан достаточно упрощенный вид конвейера OpenGL ES:

Рис. 7.4. Путь треугольника

Путь треугольника через конвейер выглядит следующим образом.

1. Сначала наш треугольник трансформируется матрицей модели представления. Это значит, все его точки умножаются на эту матрицу. Данное умножение фактически передвинет точки треугольника в необходимое место.

2. Итог данной операции умножается на матрицу проекции, которая трансформирует 3D -точки в двухмерную плоскость проекции.

3. Между предыдущими двумя шагами или одновременно с ними текущие установленные параметры освещения и материалов также применяются к треугольнику, придавая ему цвет.

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

5. И наконец. OpenGL заполняет треугольник пикселами на основе цветов из освещаемой сцены, текстур, которые требуется применить к треугольнику и состояния смешивания, в котором каждый пиксел треугольника может или не может быть соединен с пикселом из фреймбуфера.

Нам необходимо выучить, как использовать геометрию и текстуры OpenGL ES и устанавливать состояния, использованные на каждом из предыдущих этапов. Перед тем как мы научимся этому, нам необходимо узнать, как Android предоставляет доступ к OpenGL ES.

ПРИМЕЧАНИЕ

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

ПЕРЕД СТАРТОМ

Мы будем использовать тот же самый стартовый класс, который покажет нам список тестовых Activity, которые мы можем запустить. Единственное, что изменится, – названия Activity, которые мы инстанцируем в обратном виде, и пакет, где они будут располагаться.

Там содержатся классы нашего фреймворка, и мы, конечно, захотим снова ими воспользоваться. Наконец, мы напишем несколько новых классов фреймворка и вспомогательных классов, которые будут размещаться в com. badl ogi с. androi dgames. framework.

Нам также снова понадобится файл манифеста. Поскольку все примеры будут представлять собой Activity, мы должны будем убедиться в том, что они объявлены в манифесте. Во всех примерах используется фиксированная ориентация (книжная или альбомная, в зависимости от примера). Android получает информацию о том, что эти примеры могут обрабатывать события типа keyboard, keyboardHidden HorientationChange.

Итак, давайте начнем.

Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии