Научная статья на тему 'Технология создания трехмерных приложений реального времени для оС Android'

Технология создания трехмерных приложений реального времени для оС Android Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
62
17
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ТРЕХМЕРНАЯ ГРАФИКА / ООП / ANDROD / OPENGL ES / 3D GRAPHICS / OOP

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Полотнянщиков Иван Сергеевич

Рассматривается разработка технологии для создания трехмерных приложений для ОС Android. Описаны этапы выбора инструментария, объектного анализа трехмерной графики как предметной области. Приведены результаты работы, проиллюстрированы примеры при­менения на практике. Сделаны выводы и поставлена задача для дальнейшей работы.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Technology for creating 3D realtime applications in Android OS

This article discusses the development of technology to create three-dimensional applications for OS Android. We describe the stages of the selection tools, the object analysis of three-dimensional graphics as a subject area. The results of the work are shown and illustrated with examples of application in practice. The conclusions are done and the task for future work set.

Текст научной работы на тему «Технология создания трехмерных приложений реального времени для оС Android»

2012

ВЕСТНИК ПЕРМСКОГО УНИВЕРСИТЕТА

Математика. Механика. Информатика Вып.3(11)

УДК681.3

Технология создания трехмерных приложений реального времени для ОС ANDROID

И. С. Полотнянщиков

Пермский государственный национальный исследовательский университет Россия, 614990, Пермь, ул. Букирева, 15 [email protected]; 89617573463

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

Ключевые слова: Androd; трехмерная графика; Opengl ES; ООП.

Введение

Создание трехмерных приложений для ОС Android особо актуально с тех пор, как устройства, использующие эту платформу, стали самими распространенными в мире, опередив ближайшего конкурента - Apple iOS.

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

Цель работы - разработать технологию создания интерактивных приложений для мобильных устройств, использующих трехмерную графику. Для достижения цели наиболее важно решить следующие задачи:

- исследовать особенностей разработки трехмерных приложений в ОС Android,

- обосновать использование объектно-ориентированной парадигмы для достижения цели,

© Полотнянщиков И. С., 2012

- выполнить проектирование и реализацию иерархии классов для создания трехмерных приложений.

1. Выбор интерфейса

В качестве программно-аппаратного интерфейса была выбрана библиотека OpenGL ES. Именно она рекомендована разработчиками Android при создании высокопроизводительных приложений [3]. Кроме того, OpenGL ES позволяет достичь наиболее качественного результата.

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

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

2. Выбор версии OpenGL ES

В ходе сравнения версий OpenGL ES были проанализированы различия в их синтаксисе [1, 2] и функциональности. Результаты представлены в таблице.

Результат сравнения версий OpenGLES

Критерий OpenGL ES 1.0 OpenGL ES 2.0

Объем кода Меньше Больше

Структура программы Проще Сложнее

Итоговый результат Хуже Лучше

Число поддерживаемых эффектов Меньше Больше

Производитель- ность Ниже Выше

Настройка рендеринга При помощи параметров сборки примитивов, растеризации, текстурирования освещения и т.п. При помощи шейдеров и параметров сборки примитивов

OpenGL ES 1.0 подходит для решения задач, в которых важнее скорость разработки, чем качество изображения. Целям данной работы наилучшим образом соответствует версия 2.0, так как нас интересует, прежде всего, производительность и качество результата. Однако при использовании этой версии с ростом числа геометрических объектов значительно увеличивается размер программы.

Для эффективного управления большим объемом кода была выбрана объектно-ориентированная парадигма.

3. Разработка иерархии классов

В процессе создания иерархии классов необходимо учесть особенности предметной области и инструмента реализации. Выбранная предметная область (трехмерная графика) описывается в таких терминах как камера, геометрический объект, материал, источник света. Разработанная иерархия включает в себя классы, соответствующие указанным выше терминам (отмечены зеленым на рисун-

ке). Однако их поля и методы, а также остальные классы в значительной степени зависят от особенностей OpenGL ES 2.0.

Для выявления особенностей ES 2.0 была написана тестовая программа, состоящая из нескольких геометрических объектов, шейдерных объектов и атрибутов вершин. Особенности организации этой программы позволили выделить характерные повторяющиеся части кода и данные со сходным поведением. При помощи указанных структурных особенностей были созданы классы, отмеченные синим цветом на рисунке.

Разработанная объектная модель получила название "LitEngine". В п. 3.1—3.4 описываются классы LitEngine, сгруппированные по смыслу.

3.1. Создание геометрических объектов

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

Фабрика данных - абстрактный класс LitDataFactory и его наследники. Предназначена для заполнения контейнеров данных атрибутами, описывающими один геометрический объект.Матрица преобразования -класс ModelViewMatrix. Предназначена для хранения матрицы и работы с ней в терминах преобразования координат.

Универсальный объект - класс Universal3DObject. Предназначен для хранения в одном контейнере всей информации, описывающей один геометрический объект.

3.2. Настройка света

Материал - абстрактный класс LitAppearance и его потомки. Предназначен для хранения настроек для конкретной шейдерной программы.

Менеджер эффекта - LitSpecialEffect и его потомки. Предназначен для передачи информации из объекта "материал" в объект "шейдерная программа".

3.3. Установка камеры

Матрица проекции - класс Projection-Matrix. Предназначена для хранения матрицы и работы с ней в терминах проектирования координат.

Технология создания трехмерных приложений.

Камера - класс LitCamera. Предназначена для работы с матрицей проекции в терминах настройки камеры.

3.4. Рендеринг

Шейдерная программа - класс glslProgramm. Предназначен для инкапсулирования всей работы с одним шейдером: загрузкой, компиляцией, линковкой, настройкой, активацией.

4. Пример применения LitEngine

В п. 4.1-4.3 поэтапно приведены и прокомментированы примеры использования классов LitEngine для создания демонстрационного приложения, выводящего несколько разноцветных вращающихся торов.

4.1. Однократная инициализация

//Настраиваем среду OpenGL ES 2.0 GLES20.glClearColor(0.07f, 0.07f, 0.1f, 1.0f); GLES20.glEnable(GLES20.GL_DEPTH_TEST);

// Создаем объект камеры LitCamera camera = new LitCamera();

// Создаем и инициализируем объект эффекта

simplestEffect = new SimplestEffect(context); simple stEffect. Init();

// Создаем фабрику данных для тора с определенными настройками качества (~1800 вершин)

TorusDataFactory torusFactory = new TorusDataFactory(2,30,0.7f,30);

// Создаем и инициализируем материалы для

эффекта simplestEffect

Appearance4SimplestEffect[] colors =

new Appearance4SimplestEffect[7];

for (int i = 0; i < colors.length; i++)

colors[i] = new Appearance4SimplestEffect();

// Заполняем поле «цвет» у каждого материала

colors[0].setColor(0, 0, 1, 1); colors[1].setColor(0, 1, 0, 1); colors[2].setColor(0, 1, 1, 1); colors[3].setColor(1, 0, 0, 1); colors[4].setColor(1, 0, 1, 1); colors[5].setColor(1, 1, 0, 1);

//Создаем несколько универсальных объектов

Universal3DObject[] torus = new Universal3DObject[6];

//Задаем каждому объекту все его атрибуты, эффект и материал for (int i = 0; i < torus.length; i++){

torus[i] = new Universal3DObject(); torusFactory.Tune(torus[i]); torus[i].effect = simplestEffect; torus[i].material = colors[i]; }

4.2. Настройка камеры

// Настраиваем среду OpenGL ES 2.0 // height и width - параметры функции настройки камеры

GLES20.glViewport(0, 0, width, height); float ratio = (float) width / height;

// Настраиваем в камере перспективную проекцию

camera.Frustum(-ratio * 5, ratio * 5, -5, 5, 3, 15);

// Настраиваем в камере точку взгляда и положение в пространстве camera.LookAt(0, 0, -7, 0f, 0f, Of, Of, 1.0f, 0.0f);

4.3. Рендеринг и анимация

// Обнуляем буферы данных OpenGL

GLES20.glClear(GLES20.GL_COLOR_BUFFE

R_BIT|GLES20.GL_DEPTH_BUFFER_BIT);

// Вычислим угол поворота на основе системного времени

long time = SystemClock.uptimeMillis(); float realangle = (float) (time * 0.1);

// Вычислим параметры смещения и поворота и передадим их объектам float step = (float)

(Math.PI*2.0/triangles.length); for (int i = 0; i < triangles.length; i++){ float a = step*i+realangle/100f; float x = (float) (Math.sin(a)*4); float y = (float) (Math.cos(a)*4); triangles[i].Move(x, y, 0f); a = i*60+realangle/2f; triangles[i].Rotate(a, 0.0f, 1.0f, 0.0f); }

// Вызовем у каждого тора рендеринг for (int i = 0; i < triangles.length; i++) triangles[i] .Render(camera);

4.4. Пример работающего устройства

На рисунке приведен снимок мобильного телефона, выполняющего код из п. 4.1—4.3.

ас

Пример использования LitEngine

Заключение

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

Расширяемость разработанной иерархии проверена на одном из вероятных сценариев развития модели. В качестве одного из примеров была добавлена поддержка новой геометрии - тора. Создание тора было полно-

стью инкапсулировано в одном новом классе, наследуемом от абстрактной фабрики данных. Для использования новой геометрии в пользовательском приложении потребовалось переписать одну строку кода.

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

Список литературы

1. Leech J. OpenGL ES Common Profile Difference Annotated Specification 2.0.25. [Электронный ресурс]. Систем. требования: Foxit Reader. URL: http://www.khronos.org/registry/gles/specs/2. 0/es_cm_spec_2.0.25.pdf (дата обращения:

25.01.2012).

2. Munshi A. OpenGL ES 2.0 Programming Guide. Boston: Addison-Wesley, 2009. 457 с.

3. Android DevGuide. Graphics [Электронный ресурс]. URL:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

http://developer.android.com/guide/topics/gra phics/index.html] (дата обращения:

25.01.2012).

Technology for creating 3D realtime applications in Android OS

I. S. Polotnyanschikov

Perm State National Research University, Russia, 614990, Perm, Bukireva st., 15 [email protected]; 8 961 757 34 63

This article discusses the development of technology to create three-dimensional applications for OS Android. We describe the stages of the selection tools, the object analysis of three-dimensional graphics as a subject area. The results of the work are shown and illustrated with examples of application in practice. The conclusions are done and the task for future work set.

Key words: Androd; 3D graphics; Opengl ES; OOP.

i Надоели баннеры? Вы всегда можете отключить рекламу.