close

Вход

Забыли?

вход по аккаунту

Честнихин Максим Олегович. Разработка мобильного приложения моделирования помещений с использованием технологии дополненной реальности

код для вставки
Powered by TCPDF (www.tcpdf.org)
АННОТАЦИЯ
ВКР 65 с., 38 рис., 6 табл., 10 источников, 1 прил.
МОБИЛЬНОЕ
ПРИЛОЖЕНИЕ,
ДОПОЛНЕННАЯ
РЕАЛЬНОСТЬ,
ВИРТУАЛЬНЫЕ ОБЪЕКТЫ, МОДЕЛИРОВАНИЕ ПОМЕЩЕНИЙ, РАБОТА
С КАМЕРОЙ.
Выпускная
квалификационная
работа
посвящена
разработке
мобильного приложения моделирования помещений с использованием
технологии дополненной реальности.
В первой главе выпускной квалификационной работы приведено
описание технологии дополненной реальности и описание аналогичных
решений разрабатываемого приложения. Выявлены функциональные и
нефункциональные требования к приложению.
Во
второй
главе
была
разработана
архитектура
приложения
размещения элементов интерьера с помощью технологии дополненной
реальности. Составлены основные диаграммы для описания работы
приложения.
В третьей главе были описаны и продемонстрированы используемые
алгоритмы и спроектирован пользовательский интерфейс с помощью
транзитивной сети.
В четвертой главе представлен обзор программных средств разработки
и выбран эффективный. Представлена программная реализация основных
компонентов программы и реализация пользовательского интерфейса.
Графическая часть выпускной квалификационной работы включает
иллюстрации, таблицы, которые объединены в презентацию PowerPoint.
Библиографическая
часть
включает в себя 10 источников.
выпускной
квалификационной
работы
4
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
5
1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ И ОБЗОР ПРОГРАММНЫХ
СРЕДСТВ РАЗРАБОТКИ
6
1.1 Анализ предметной области
6
1.2 Аналоги
10
1.3 Требования к приложению
13
1.4 Сравнительная таблица
14
2 МОДЕЛИРОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
16
2.1 Диаграмма вариантов использования
16
2.2 Диаграмма классов
17
2.3 Диаграмма состояний
21
3 ПРОЕКТИРОВАНИЕ
24
3.1 Используемые алгоритмы
24
3.2 Пользовательский интерфейс
30
4 РЕАЛИЗАЦИЯ
34
4.1 Обзор программных средств разработки
34
4.2 Реализация компонентов программы
37
4.3 Реализация пользовательского интерфейса
43
ЗАКЛЮЧЕНИЕ
49
СПИСОК ЛИТЕРАТУРЫ
50
ПРИЛОЖЕНИЕ А – ЛИСТИНГ ПРОГРАММЫ
51
УДОСТОВЕРЯЮЩИЙ ЛИСТ
63
ИНФОРМАЦИОННО-ПОИСКОВАЯ ХАРАКТЕРИСТИКА
ДОКУМЕНТА НА ЭЛЕКТРОННОМ НОСИТЕЛЕ
64
5
ВВЕДЕНИЕ
Приложения дополненной реальности в настоящее время набирают
популярность и нашли широкое применение в образовании, развлечениях,
рекламе и других сферах деятельности человека. Дополненная реальность
(Augmented reality) – это результат введения в трехмерное поле восприятия
человека различных виртуальных данных, которые воспринимаются как
элементы реального мира. То есть, при создании дополненной реальности в
пространство в режиме реального времени помещаются объекты при помощи
специального программного обеспечения и гаджетов, таких как, например,
очки дополненной реальности, планшеты, смартфоны и прочие гаджеты.
Также по причине роста доли мобильных телефонов и планшетов на
рынке, вопрос о применении дополненной реальности в мобильных
устройствах становится особо актуальным.
Существует
несколько
определений
дополненной
реальности:
исследователь Рональд Азума [1] определил ее как систему, которая:
1) совмещает виртуальное и реальное;
2) взаимодействует в реальном времени;
3) работает в 3D.
Целью выпускной квалификационной работы является повышение
эффективности разработки дизайна помещения за счет быстрого подбора
готовых элементов интерьера с использованием технологии дополненной
реальности.
Для достижения поставленной цели необходимо решить следующие
задачи:
1) проанализировать
предметную
область
требования к приложению;
2) смоделировать предметную область;
3) спроектировать разрабатываемое приложение;
4) реализовать спроектированное приложение.
и
сформулировать
6
1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ И ОБЗОР ПРОГРАММНЫХ
СРЕДСТВ РАЗРАБОТКИ
1.1 Анализ предметной области
Термин дополненной реальности предположительно был предложен
работавшим на корпорацию Boeing исследователем Томом Коделом в 1990 г.
Важно понимать различия между дополненной реальностью и
смешанной реальностью. В широком смысле дополненная реальность
представляет собой процесс просмотра реального мира и виртуальных
объектов одновременно, где виртуальная информация накладывается,
выравнивается и интегрируется в физическом мире. В литературе по
человеко-машинному взаимодействию дополненная реальность находится в
непрерывном диапазоне интерфейсов от «реальности» до виртуальной
реальности «полного погружения». На рисунке 1.1.1 представлена схема
смешанной реальности.
Рисунок 1.1.1 – Диапазон технологий смешанной реальности
Дополненная
направлений
реальность
современных
является
одним
информационных
из
перспективных
разработок.
Данную
технологию можно назвать одним из новых способов получения доступа к
данным.
Дополненная реальность ‒ это среда с наложением виртуальной
информации, такой как текст, графика, аудио, 3D-объекты, на элементы
реальной жизни в режиме реального времени. Дополненную реальность не
стоит путать с виртуальной реальностью: виртуальная реальность ‒ это
виртуальный мир, созданный с помощью технических средств, передаваемый
7
человеку посредством органов осязания, обоняния, зрения и слуха.
Существенным
отличием
дополненной
реальности
от
виртуальной
реальности является сохранение физического мира как контекста, в котором
представлены виртуальные объекты и с которым они взаимодействуют.
Виртуальная реальность полностью абстрагируется от физического мира,
чтобы поместить пользователя полностью в виртуальный мир, а дополненная
реальность подразумевает дополнение реального мира виртуальными
объектами.
Схема среды дополненной реальности представлена на рисунке 1.1.2. В
отличие от виртуальной реальности, которая предполагает полностью
искусственный синтезированный мир, дополненная реальность предполагает
интеграцию виртуальных объектов в естественные видеосцены.
Рисунок 1.1.2 – Схема среды дополненной реальности
Стоит отметить, что важным условием создания дополненной
реальности является некое изображение, после распознавания которого
виртуальный объект будет помещен в реальный мир. Такие изображения
называются 3D-метками или маркерами. Многие современные приложения
используют маркеры для отображения виртуальных объектов на экранах
устройств, но такой способ не удобен для пользователя, так как ему придется
вначале подготовить маркеры, а затем использовать их для приложения.
Системы
дополненной
реальности
получают
информацию
из
окружающей среды, поэтому каждая из них обладает набором устройств-
8
приемников информации. По типу приемников системы дополненной
реальности делятся:
1) оптические или видеоинформационные. Обрабатывают видеосигнал,
полученный с камеры, затем на основании полученной видеоинформации
дополняют реальный мир виртуальными объектами. Оптические системы
делятся на маркерные, безмаркерные и системы пространственного трекинга.
Маркерные системы осуществляют поиск маркерных изображений и их
распознавание, а затем отображение объекта на экране устройства. Пример
маркерного изображения приведен на рисунке 1.1.3.
Рисунок 1.1.3 – Пример маркера
Безмаркерные
оптические
системы
реализуют
более
сложные
алгоритмы распознавания, используют не специальные маркеры, а обычные
изображения или объемные тела.
В
системах
пространственного
трекинга
текущее
положение
дополняемого объекта в пространстве определяется на основе непрерывного
анализа видеопотока, поступающего с видеокамеры в режиме реального
времени, для них не требуются специальные изображения;
9
2) геопозиционные – ориентируются на сигналы систем глобального
географического позиционирования ГЛОНАСС или GPS;
3) комбинированные – используют как геопозиционные, так и
оптические
данные,
тем
самым
достигается
максимальная
точность
положения объектов дополненной реальности в пространстве.
Системы дополненной реальности можно различать по степени
взаимодействия с пользователем. В некоторых системах пользователь играет
пассивную роль, он лишь наблюдает за реакцией системы на изменения в
окружающей среде. Другие же системы требуют активного вмешательства
пользователя – он может управлять как работой самой системы для
достижения результатов, так и изменять виртуальные объекты. По этому
признаку системы делятся на:
1) Автономные. Они не требуют вмешательства пользователя. Задача
таких систем сводится к предоставлению информации об объектах.
Например, подобные системы могут анализировать объекты, находящиеся в
поле зрения человека и выдавать справочную информацию о них. Также
системы такого типа используются в медицине. Например, система GaitAid
[9] для людей с нарушениями опорно-двигательного аппарата. Она путем
использования виртуальных объектов предоставляет мозгу дополнительную
информацию, помогающую координировать движения.
2) Интерактивные. Такие системы основаны на взаимодействии с
пользователем. На различные действия пользователь получает различный
ответ. В подобных системах необходимо устройство ввода информации. В
качестве такого устройства может применяться сенсорный экран мобильного
телефона, планшет или специальный манипулятор. Выбор устройств ввода
зависит от специфики системы. В случае простых действий с виртуальным
объектом,
достаточно
простого
указывающего
устройства.
Если
же
необходима имитация каких-либо реальных процессов и выполнения
сложных
манипуляций
с
объектами
используются
специальные
10
манипуляторы,
имеющие
различное
количество
степеней
свободы.
Примером могут служить устройства Phantom [10].
Интерактивность выражается в различной степени. Бывают системы,
позволяющие пользователю активно изменять виртуальную среду [10].
Обычно это системы-симуляторы каких-либо реальных действий. Они
используются в случае, когда использование реальных объектов невозможно,
например, специализированные медицинские тренажеры, позволяющие
начинающим врачам отрабатывать необходимые навыки.
Существуют другие системы, где пользователю не нужно изменять
виртуальную среду. Вместо этого пользователь выбирает, какие виртуальные
объекты он хочет увидеть. Пользователь также имеет возможность
манипулировать виртуальными объектами, но не на уровне структуры, а на
уровне отображения, т.е. применять, например аффинные преобразования
типа поворота, перемещения и т.д. К данной группе можно отнести
различные навигационные и геоинформационные системы. Подобные
системы могут показывать части объектов интереса, скрытые другими
постройками, дополнительную информацию о выбранных объектах и т.д.
1.2 Аналоги
В настоящее время существует несколько различных приложений,
нацеленных на использование технологии дополненной реальности:
Приложение Blippar немного похоже на визуальный поиск Google и
предоставляет подробную информацию об объектах, захваченных камерой
мобильного устройства. Достаточно просто навести объектив на любую
достопримечательность, чтобы получить дополнительные данные, а также
несколько связанных ссылок с данным местом. В новой версии появилась
возможность смотреть видео и играть в игры с помощью дополненной
реальностью при наведении на определенный объект.
К минусам данного приложения можно отнести следующее:
1) невнимательность к разработке деталей объектов;
11
2) плохо продуманный дизайн;
3) не полностью раскрытая идея игр.
Интерфейс мобильного приложения Blippar представлен на рисунке
1.2.1.
Рисунок 1.2.1 – Интерфейс приложения Blippar
Геокэшинг – это чрезвычайно популярное среди туристов развлечение,
связанное с поиском «сокровищ», спрятанных другими участниками игры.
Чаще всего тайники расположены в местах, которые представляют
природный, исторический, культурный, географический интерес. Поэтому
эта игра не только интересна, но и очень познавательна. В Геокэшинг
активно используются смартфоны, с помощью которых участники узнают
координаты закладок и получают зашифрованные подсказки.
12
Присутствует функция точного определения координат искомого
объекта. Также существуют функции просмотра на карте тайников из базы
данных и поиск выбранного тайника с помощью компаса.
Основным недостатком данного приложения является отсутствие
возможности подключения к картам без интернета или в местах с плохим
сигналом связи на мобильном устройстве.
Интерфейс мобильного приложения представлен на рисунке 1.2.2.
Рисунок 1.2.2 – Интерфейс приложения Геокэшинг
Каталог ИКЕА – это приложение, которое позволит с помощью
функции дополненной реальности просмотреть объекты в 3D. Также есть
возможность скачать свежий каталог и другие публикации ИКЕА. Основная
идея заключается в том, что пользователю необходимо навести камеру
своего мобильного устройства на определенный маркер, после на экране
13
устройства появится 3D-объект. Все необходимые маркеры имеются в
журнале ИКЕА.
Также имеется возможность сфотографировать 3D-объект в реальной
обстановке. Присутствует функция определения сразу нескольких маркеров,
что позволяет воссоздать несколько 3D-объектов.
Интерфейс мобильного приложения Каталог ИКЕА представлен на
рисунке 1.2.3.
Рисунок 1.2.3 – Интерфейс приложения Каталог ИКЕА
1.3 Требования к приложению
В
рамках
поставленной
текущей
задачи:
работы
приложение,
предлагается
в
следующее
функционал
которого
решение
входит
размещение 3D-объектов мебели в помещении с помощью технологии
дополненной реальности.
14
В
ходе
анализа
поставленной
задачи,
были
определены
функциональные и нефункциональные требования к разрабатываемому
приложению.
Функциональные требования:
1) мобильное приложение должно отображать 3D-объекты на экране
после выбора положения камерой устройства;
2) мобильное приложение должно воссоздавать 3D-объекты в строго
заявленном размере. Подразумевается, что есть определенный каталог с
существующими размерами мебели;
3) мобильное
приложение должно
правильно реагировать
при
повороте мобильного устройства, при этом сохраняя 3D-объект в исходной
форме;
4) мобильное
приложение
должно
предоставлять
возможность
работы с одним 3D-объектом;
5) мобильное
приложение
должно
осуществлять
фиксацию 3D-
объекта на экране устройства;
6) мобильное
приложение
должно
правильно
обрабатывать
координаты 3D-объекта в пространстве и сохранять его пропорции.
Нефункциональные требования:
1) мобильное приложение должно корректно работать на устройствах с
ОС Android начиная с версии 4.0.4 и выше;
2) мобильное приложение должно иметь доступ к камере и к
встроенным сенсорам устройства.
1.4 Сравнительная таблица
После описания существующих аналогов необходимо построить
сравнительную таблицу приложений. В таблице 1.4.1 приведены основные
достоинства и недостатки аналогов.
15
Таблица 1.4.1 – сравнительная таблица
Название
Тип
оптической
Шаблоны
системы
Закрепление
Количество
объектов
объектов
1
2
3
4
5
Разрабатываем
ое приложение
Безмаркерн
ая
Имеются
Закрепляются
Среднее
Blippar
Маркерная
Не имеются
Не закрепляются
Малое
Геокэшинг
Маркерная
Не имеются
Не закрепляются
Малое
Каталог ИКЕА
Маркерная
Не имеются
Закрепляются
Среднее
Исходя из таблицы можно сделать вывод, что разрабатываемое
приложение имеет безмаркерную оптическую систему, то есть нет
необходимости в маркере, а для размещение виртуального объекта
используется метка для выбора положения и это является существенным
достоинством перед аналогами. Пользователь может запустить приложение и
без предварительной настройки маркеров сразу начать работать. При
предоставлении компании самих 3D-объектов, есть возможность дополнить
количество объектов.
16
2 МОДЕЛИРОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
2.1 Диаграмма вариантов использования
Моделирование
предметной области
наиболее
наглядно можно
продемонстрировать при помощи UML-диаграмм. Данный язык представляет
собой
открытый
стандарт,
в
котором
используются
графические
обозначения, чтобы создать абстрактную модель системы.
Диаграмма вариантов использования отображает на себе отношения,
которые возникают между актерами, а также различными вариантами
использования.
Главная
ее
задача
–
отобразить
функциональность
определенной системы и отношения вариантов между собой.
При моделировании системы с помощью диаграммы вариантов
использования стремятся:
1) четко отделить систему от ее окружения;
2) определить действующих лиц (актеров), их взаимодействие с
системой и ожидаемую функциональность системы;
3) определить в глоссарии предметной области понятия, относящиеся к
детальному описанию функциональности системы.
Диаграмма вариантов использования представлена на рисунке 2.1.1.
17
Рисунок 2.1.1 – Диаграмма вариантов использования
Главный актер системы – пользователь. Он имеет возможность
использовать основные функции системы:
1) просмотр готовых интерьеров со встроенными объектами;
2) дополнить реальность виртуальным объектом.
2.2 Диаграмма классов
Диаграмма
проектировании
классов является
разрабатываемого
одной
из
основных диаграмм
приложения.
Данная
в
диаграмма
определяет типы классов и различные связи, которые существует между
ними. Класс – это описание набора объектов с одинаковыми атрибутами,
операциями и связями.
Начнем разработку диаграммы классов с введения класса «Текстура».
С помощью него происходит визуализация объекта на экране и отображение
курсора.
Класс, который описывает текстуру объектов представлен на рисунке
2.2.1.
18
Рисунок 2.2.1 – Класс «Текстура»
Метод «Получить положение текстуры» необходим для получения
координат положения для дальнейшего использования.
Далее добавим класс «Объект», так как виртуальный объект состоит из
списка текстур. Данный класс будет связан с классом «Текстура» типом
связи композиция, при удалении объекта все связанные с ним текстуры
должны быть тоже удалены. Класс «Объект» будет иметь метод «Получить
координаты текстуры» с входным параметром «Номер текстуры», чтобы
получить координаты текстуры и использовать их для вращения объекта.
Также класс «Объект» будет иметь атрибут «Видимость» и метод «Смена
видимости» для активации и деактивации объекта.
Связь классов «Объект» и «Текстура» представлена на рисунке 2.2.2
Рисунок 2.2.2 – Композиция классов
Добавим
класс
«Курсор»,
который
будет
показывать
место
расположения объекта, необходим для удобства работы пользователя с
приложением. Так как класс «Курсор» является изображением, то он будет
связан с классом «Текстура» типом связи наследование, наследует все
19
атрибуты и методы. Класс «Курсор» дополнится атрибутом «Видимость» и
методом «Смена видимости».
Связь классов «Курсор» и «Текстура» изображена на рисунке 2.2.3.
Рисунок 2.2.3 – Наследование классов
Виртуальный объект и курсор отображаются на экране устройства, для
этого создадим класс «Экран», который будет связан с классом «Объект»
типом связи агрегация, а с классом «Курсор» – отношением зависимости.
Класс «Экран» хранит список объектов и данные о каждом объекте:
масштабирование и угол поворота. Метод «Отображение объекта» с входным
параметром «Номер объекта» необходим для отображения объекта на экране
с правом редактирования. Метод «Закрепить объект» с входным параметром
«Номер объекта» позволяет закрепить объект на экране без права его
редактирования.
Связь классов «Объект», «Экран» и «Курсор» представлена на рисунке
2.2.4.
20
Рисунок 2.2.4 – Смешанная связь классов
Камера является основным источником информации, с помощью нее к
приложению поступает информация. Добавим класс «Камера», которая
связана с классом «Экран» отношением зависимости. Метод «Смена режима
работы» позволяет переключить режим работы камеры. Для дополнения
реальности виртуальным объектом и для просмотра готовых интерьеров
разные режимы работы камеры.
Связь классов «Экран» и «Камера» изображена на рисунке 2.2.5.
Рисунок 2.2.5 – Зависимость классов
21
Диаграмма классов в полном виде представлена на рисунке 2.2.6.
Рисунок 2.2.6 – Диаграмма классов
2.3 Диаграмма состояний
Диаграмма состояний показывает, как объект переходит из одного
состояния в другое. Состояние – ситуация в жизненном цикле объекта, во
время
которой
он
удовлетворяет
некоторому
условию,
выполняет
определенную деятельность или ожидает какого-то события. Диаграмма
состояний используется, чтобы дать абстрактное описание поведения
системы. Это поведение анализируется и представляется в виде ряда
событий, которые могут возникать в одном или в нескольких возможных
состояний.
22
На рисунке 2.3.1 представлена диаграмма состояний.
Рисунок 2.3.1 – Диаграмма состояний
Можно выделить следующие основные состояния:
1) основная сцена;
2) шаблоны;
3) выбран объект;
4) добавление метки;
5) добавление объекта;
23
6) вращение и масштабирование объекта.
Из начального состояния осуществляется переход в состояние
«Основная сцена» и происходит получение доступа к камере. Дальнейший
переход зависит от действия пользователя.
Если пользователь нажимает на кнопку «Шаблоны», то происходит
переход в состояние «Шаблоны», где он сможет просмотреть все готовые
интерьеры с виртуальными объектами, а также по нажатию кнопки «Назад»
произойдет переход в состояние «Основная сцена».
Если пользователь выберет объект из списка, то осуществляется
переход в состояние «Выбран объект», затем по нажатию кнопки «Метка»
происходит переход в состояние «Добавление метки» и отображение метки
на экране. Далее пользователь нажимает кнопку «Дополнить» и происходит
переход в состояние «Добавление объекта» и отображение виртуального
объекта на экране. После происходит изменение параметров датчиков от
реакции пользователя и осуществляется переход в состояние «Вращение и
масштабирование объекта».
Из каждого состояния есть возможность перехода в конечное
состояние при помощи нажатия пользователем на кнопку «Выход».
24
3 ПРОЕКТИРОВАНИЕ
3.1 Используемые алгоритмы
Общий алгоритм работы приложения представлен на рисунке 3.1.1.
Рисунок 3.1.1 – Общий алгоритм
25
Рассмотрим общий алгоритм работы приложения. Пользователь
запускает приложение, при запуске система получает доступ к камере,
гироскопу и акселерометру. Затем пользователь выбирает объект, который
будет визуализирован на экране. Если пользователь захочет посмотреть
готовые интерьеры с виртуальными объектами, то необходимо нажать на
кнопку «Шаблоны». Далее нажимает на кнопку «Метка» и выбирает
положение размещения виртуального объекта с помощью изображения,
после этого пользователь нажимает на кнопку «Дополнить» и объект
отображается
в
выбранном
месте,
и
пользователь
может
вращать,
масштабировать его с помощью перемещения устройства в пространстве [4].
Алгоритм подключения к устройствам представлен на рисунке 3.1.2.
Рисунок 3.1.2 – Алгоритм подключения к устройствам, лист 1
26
Рисунок 3.1.2, лист 2
Алгоритм загрузки шаблонов представлен на рисунке 3.1.3.
Рисунок 3.1.3 – Алгоритм загрузки шаблонов, лист 1
27
Рисунок 3.1.3, лист 2
Рассмотрим алгоритм совмещения системы координат камеры с
изображением. Для построения 3D пространства необходимо знать две
матрицы: внутреннюю и внешнюю.
Внутренняя матрица состоит из параметров используемой камеры:
фокального расстояния по двум осям (fx, fy) и координат центра фокуса (cx,
cy). Процесс нахождения параметров камеры называется ее калибровкой.

(0
0
0

0

 )
1
(3.1.1)
Внешняя матрица (или матрица модели) – это матрица преобразований
модели посредством растяжения, поворота и переноса. Она позволяет
однозначно задать положение объекта в пространстве.
11
(21
31
12
22
32
13
23
33
1
2 )
3
(3.1.2)
28
Диагональные элементы отвечают за растяжение модели. Остальные
элементы r – за поворот объекта в пространстве. Элементы t отвечают за
перенос. Вычисление её производится путём определения четырёх пар точек
объекта и соответствующего его положения в кадре. Точки положения в
кадре – это вершины четырехугольника, описывающего объект в кадре [8].
Алгоритм вращения и масштабирования представлен на рисунке 3.1.4.
Рисунок 3.1.4 – Алгоритм вращения и масштабирования
Вращение
и
масштабирование
объекта
происходит
за
счет
акселерометра и гироскопа. Акселерометр – это прибор, предназначенный
для измерения кажущегося ускорения. Кажущееся ускорение – это разница
между гравитационным и истинным ускорениями объекта [3].
29
На рисунке 3.1.5 представлена схема конструкции акселерометра в
мобильном устройстве.
Рисунок 3.1.5 – Схема конструкции акселерометра
К неподвижному корпусу на упругих приставках, которые позволяют
перемещение
в
определенных
пределах,
крепится
перегородка
с
отведенными в сторону проводниками. Эти отводы размещаются между
контактами, которые и снимают показания. При перемещении отводов
напряженность поля вокруг контактов меняет свои характеристики, что и
служит показателем для измерения.
Гироскоп – устройство, способное реагировать на изменение углов
ориентации тела, на котором оно установлено, относительно инерциальной
системы отсчета.
В гироскопе на мобильном устройстве есть две массы, двигающиеся в
противоположных направлениях. Когда появляется угловая скорость, на
массу действует сила Кориолиса, направленная перпендикулярно их
движению. Происходит смещение масс на величину, пропорциональную
прикладываемой скорости. Меняется расстояние между подвижными и
неподвижными
электродами,
что
приводит
к
изменению
емкости
30
конденсатора и напряжению на его обкладках, что и является электрическим
сигналом. Такие электронные сигналы распознаются гироскопом [2].
3.2 Пользовательский интерфейс
Для проектирования логики диалога организации пользователя с
приложением будем использовать транзитивную сеть, так как данный способ
является графическим, что добавляет удобство, а во-вторых, используется
аппарат конечного автомата, который жестко детерминирован.
В этом случае логика диалога отображается в виде направленного
графа, вершины которого являются состояниями системы, дуги – переходы
между состояниями. Сверху дуга именуется согласно входным сигналам или
обратной семантической связью прикладного интерфейса. Снизу дуга
именуется согласно действиям, которые должно выполнить приложение при
переходе из одного состояния в другое в ответ на действие пользователя [6].
Для построения транзитивной сети к ней составляются три таблицы:
1) таблица контекста состояний;
2) таблица состояний;
3) таблица переходов.
На рисунке 3.2.1 представлена транзитивная сеть.
31
Рисунок 3.2.1 – Транзитивная сеть
В таблице контекста состояний строки – состояния транзитивной сети,
столбцы – объекты интерфейса и диалога. В ячейках на пересечении строк и
столбцов ставится знак:
1) плюс (+) – указывает, что элемент интерфейса участвует в диалоге и
доступен пользователю для управления;
2) минус (-) – указывает на то, что элемент необходимо перевести в
недоступное состояние, если до этого он участвовал в диалоге;
3) пустое место – говорит о том, что элемент в данном состоянии не
используется и никаких действий по его управлению выполнять не нужно.
Таблица контекста состояний представлена в таблице 3.2.1.
32
Таблица 3.2.1 – Таблица контекста состояний
Старт
1
2
3
4
5
Финиш
Спис
ок с
объек
тами
+
+
-
Кнопка
Шабло
ны
Кнопка
Дополн
ить
Кнопка
Метка
+
+
-
+
Кнопка
Назад
Кнопка
Вправо
Кнопка
Влево
+
+
+
-
Кнопка
Выход
+
+
+
+
+
+
+
Таблица состояний отображает возможность выполнения действия
пользователя с данным объектом интерфейса в конкретном состоянии.
Строки – входные сигналы или объекты интерфейса, столбцы – состояния
транзитивной сети.
Заполняется следующим образом:
1) если действие возможно в конкретном состоянии, то в ячейку
вписывается действие, которое производится;
2) пустая ячейка означает, что либо объект в недоступном состоянии
либо он доступен, но действия с ним выполнять нельзя.
Таблица состояний представлена в таблице 3.2.2.
Таблица 3.2.2 – Таблица состояний
S
Список с
объектами
Кнопка
Шаблоны
Кнопка
Метка
1
Отображение
объекта в
списке
Загрузка
сцены
«Templ»
2
3
Отображение
метки на
экране
устройства
Отображение
виртуального
объекта на
экране
Кнопка
Дополнить
Кнопка
Назад
Кнопка
Вправо
4
Загрузка
сцены «AR»
Смена
изображения
5
Отображение
списка с
объектами
F
33
Продолжение таблицы 3.2.2
S
Кнопка
Влево
Кнопка
Выход
1
2
3
Смена
изображения
4
5
Выход из
приложения
Выход из
приложения
Выход из
приложения
Выход из
приложения
Выход из
приложения
F
Заполнение таблицы переходов является идентичным с заполнением
таблицы состояний за исключением того, что в таблице переходов в ячейке
указывается состояние, в которое перейдет приложение по действию
пользователя.
Таблица состояний представлена в таблице 3.2.3.
Таблица 3.2.3 – Таблица переходов
S
Список с
объектами
Кнопка Шаблоны
Кнопка Метка
Кнопка Дополнить
Кнопка Назад
Кнопка Вправо
1
3
4
1
5
1
2
3
4
1
2
Кнопка Влево
Кнопка Выход
2
2
F
F
F
F
F
F
34
4 РЕАЛИЗАЦИЯ
4.1 Обзор программных средств разработки
Для
того
чтобы
решить
поставленную
задачу
необходимо
проанализировать доступные технологии, с помощью которых возможно
работать с дополненной реальностью. На данный момент существует
несколько
инструментов.
В
таблице
4.1.1
приведены
основные
характеристики инструментальных средств.
Таблица 4.1.1 – Сравнение инструментальных средств
Поддерживаем
ые платформы
Название
Тип
Wikitude
SDK
Бесплатный вариант и
коммерческая версия
IOS, Android
Metaio
SDK
Бесплатный вариант и
коммерческая версия
IOS, Android,
Web, Windows
BeyondAR
Бесплатный вариант
(Open source)
IOS, Android
Layar SDK
Бесплатный вариант и
коммерческая версия
IOS, Android,
Web
Aurasma
Qualcomm
Vuforia
Kudan
Бесплатный вариант и
коммерческая версия
Бесплатный вариант и
коммерческая версия
Бесплатный вариант и
коммерческая версия
IOS, Android
IOS, Android
IOS, Android
Возможности
GPS, сенсоры,
маркеры, наличие
API
Отслеживание
объектов в 3D, GPS,
сенсоры, маркеры,
наличие API
GPS, сенсоры,
маркеры, наличие
API
GPS, сенсоры,
маркеры, наличие
API
Поиск объектов,
наличие API
Маркеры, наличие
API
Маркеры,
распознаваний
изображений,
безмаркерное
отслеживание
Metaio SDK – это мощный и функциональный фреймворк, состоящий
из различных компонентов, таких как: рендеринг, захват изображения,
35
отслеживание
и
сенсоры.
Metaio
совместим
со
всеми
основными
платформами: IOS, Android, Windows.
Qualcom Vuforia использует стабильную, эффективную технику
распознавания изображений. SDK состоит из различных компонентов:
система управления целями, облачная база данных для объектов и устройств.
Поддерживает системы IOS и Android.
Использование дополненной
реальности возможно только при использовании технологии распознавания
изображения при помощи маркера.
Wikitude SDK и Layar включают в себя распознавание изображений,
отслеживание
объектов,
поддержку
3D-моделей.
SDK
в
основном
ориентированы на Web приложения, но неплохо справляются и с
мобильными.
Aurasma достаточно мощная система, поддерживающая IOS и Android
платформы. Но подходит в большей степени для создания игр.
BeyondAR – мощный продукт, предназначенный для создания игр и
приложений дополненной реальности. Поддерживает Android и IOS
платформы. Главным отличием от вышеперечисленных инструментов
является то, что платформа абсолютно бесплатна, исходный код находится в
открытом доступе.
Kudan – отличается от других инструментов быстротой действия,
позволяет
приложениям
отображать
виртуальные
модели на
экране
устройства и импортировать 3D-модели непосредственно из популярных
программ по моделированию и анимации. К дополнительным плюсам можно
отнести отсутствие ограничений на количество распознаваемых изображений
и маленький объем памяти, требуемый для хранения файлов на устройстве.
Имеется
возможность
безмаркерной
дополненной
реальности,
без
изображения, которое должно распознаваться камерой для совмещения
системы координат объекта с изображением.
Android Studio – это интегрированная среда разработки для работы с
платформой Android, основанная на программном обеспечении IntelliJ IDEA
36
от компании JetBrains. Дополнительно ко всем возможностям от IntelliJ, в
Android Studio реализованы следующие:
1) поддержка сборки приложения, основанной на Gradle;
2) удобные инструменты для поиска проблем с производительностью и
с совместимостью версий;
3) общие Android инструменты и конструкции основаны на шаблонах;
4) встроенная поддержка облачной платформы Google.
К недостаткам можно отнести отсутствие мультиплатформенности у
готовых приложений и малая производительность в крупных проектах.
Можно воспользоваться удобным и эффективным инструментом для
разработки 2D и 3D приложений Unity. В Unity существует оптимизация
приложений и присутствует компиляция на разные платформы, а также
сборка целого проекта под Android Studio. Основными преимуществами
Unity являются наличие визуальной среды разработки, межплатформенной
поддержки и модульной системы компонентов. К недостаткам относят
появление сложностей при работе с многокомпонентными схемами и
затруднения при подключении внешних библиотек.
Также Unity поддерживает физику твердых тел и ткани. В редакторе
имеется система наследования объектов – дочерние объекты будут повторять
все изменения позиции, поворота и масштаба родительского объекта.
В связке с инструментом Unity возможно использовать Kudan для
эффективной
обработки
3D-объектов
и
безмаркерного
подхода
к
отображению виртуальных объектов на экране устройства в реальном
времени.
Еще неплохим выбором будет Metaio SDK, так как у данного
инструмента существует много возможностей для реализации технологии
дополненной реальности.
37
4.2 Реализация компонентов программы
Класс «Камера», описанный в диаграмме классов, реализован
с
помощью подключаемой библиотеки Kudan.
Методы «Вращение объекта» и «Масштабирование объекта» класса
«Экран» реализованы с помощью стандартных методов:
1) quaternion.Euler. Кватернионы – система гиперкомплексных чисел,
образующая векторное пространство размерностью четыре над полем
вещественных чисел. Кватернион имеет следующее внутреннее строение.
Его можно записать с помощью четырёх чисел: x, y, z для вектора и w для
поворота. Также имеются еще три мнимые единицы, такие что:
i2 = j2 = k2 = i*j*k = -1
(4.2.1)
Целиком запись будет выглядеть следующим образом:
q = w + x*i + y*j + z*k
(4.2.2)
где q – кватернион.
Данный метод использует массив из углов Эйлера. Углы Эйлера –
углы, описывающие поворот абсолютно твердого тела в трёхмерном
евклидовом пространстве. Углы Эйлера определяют три поворота системы,
которые позволяют привести любое положение системы к текущему. Данный
метод необходим для вращения объекта [5];
2) transform.localScale. Данный метод необходим для масштабирования
объекта и принимает три параметра: scaleX, scaleY, scaleZ – коэффициенты
масштабирования по каждой из осей x, y, z соответственно.
Класс
«Объект»
реализован
с
помощью
стандартного
класса
GameObject. Компоненты – основные элементы поведения объектов в
приложении. По умолчанию в Unity все объекты автоматически получают
компонент Transform, так как он отвечает за расположение, угол поворота и
масштабирование объекта. Компонент Raw Image принимает текстуру,
благодаря данному компоненту реализуется класс «Текстура». Сам объект
представлен в виде 3D-модели [7].
Основные использованные методы класса GameObject:
38
1) transform.rotation, который возвращает текущий угол поворота типа
Quaternion;
2) Instantiate (Object) – инициализирует выбранный объект и создает
его копию;
3) Destroy (Object) – удаляет выбранный объект или компонент;
4) transform.localScale (x, y, z) – масштабирует объект по каждой из
осей.
Для отображения мебели используются 3D-модели.
3D-моделирование – это процесс создания трёхмерной модели объекта.
Задача 3D-моделирования – разработать визуальный объёмный образ
желаемого объекта. На рисунках 4.2.1-4.2.10 представлены использованные в
приложении 3D-модели.
Рисунок 4.2.1 – 3D-модель дивана
39
Рисунок 4.2.2 – 3D-модель кресла
Рисунок 4.2.3 – 3D-модель стула
40
Рисунок 4.2.4 – 3D-модель шкафа
Рисунок 4.2.5 – 3D-модель штор
41
Рисунок 4.2.6 – 3D-модель холодильника
Рисунок 4.2.7 – 3D-модель комода
42
Рисунок 4.2.8 – 3D-модель кровати
Рисунок 4.2.9 – 3D-модель стола
43
Рисунок 4.2.10 – 3D-модель полки
4.3 Реализация пользовательского интерфейса
Пользовательский интерфейс реализован с помощью стандартной
системы Unity UI. С помощью данной системы возможно создать и настроить
пользовательский интерфейс не только в редакторе, но и с помощью кода
приложения. Canvas – является контейнером для всех элементов UI и
определяет режим рендера. Rect Transform – этот компонент позволяет задать
положение и размер игрового объекта. Он вводит понятия ширины и высоты,
а не только масштаб.
Пользовательский
интерфейс
приложения
продемонстрирован на рисунках 4.3.1-4.3.4.
основной
сцены
44
Рисунок 4.3.1 – Основная сцена с выключенной камерой
Система получает доступ к камере и сенсорам, после загрузки
приложения
на
устройстве.
После
успешного
получения
доступа
пользователь вначале выбирает объект из выпадающего списка и нажимает
на кнопку «Target». В центре экрана добавляется метка, которая помогает
пользователю в расположении объекта и в совмещении системы координат
камеры с объектом. Затем пользователь нажимает на кнопку «Start Markerless
Tracking» и выбранный виртуальный объект помещается на экране
устройства, при этом совмещается изображение реального мира с камеры.
После фиксации объекта, пользователь может перемещать устройство в
пространстве для масштабирования и поворота.
45
Рисунок 4.3.2 – Метка расположения объекта
Рисунок 4.3.3 – Оснавная сцена с включенной камерой
46
Рисунок 4.3.4 – Пример расположения объекта
На рисунках 4.3.5-4.3.6 представлен пользовательский интерфейс
сцены «Шаблоны». На данной сцене имеются 3 кнопки:
1) вправо – по нажатию на данную кнопку происходит циклический
сдвиг готовых интерьеров вправо;
2) влево – по нажатию на данную кнопку происходит циклический
сдвиг готовых интерьеров влево;
3) назад – по нажатию на данную кнопку происходит загрузка
основной сцены и переход в предыдущее состояние системы.
47
Рисунок 4.3.5 – Пример шаблона
Рисунок 4.3.6 – Пример готового интерьера
В реализации пользовательского интерфейса были использованы
следующие UI элементы:
1) Button – стандартная кнопка, по нажатию которой обрабатывается
событие;
48
2) Text – элемент необходим для отображения текста на экране и на
кнопках;
3) Raw Image – элемент необходим для наложения изображения и
текстуры.
4) DropDown – выпадающий список для выбора объектов.
49
ЗАКЛЮЧЕНИЕ
В результате выполнения выпускной квалификационной работы было
спроектировано
и
реализовано
приложение
под
ОС
Android
для
моделирования помещений с помощью технологии дополненной реальности,
а также был проведен анализ предметной области, с помощью которого были
предложены
функциональные
и
нефункциональные
требования
к
разрабатываемому приложению. Была построена модель предметной области
с помощью диаграмм: вариантов использования, классов и состояния.
Таким образом, поставленные задачи были решены в ходе выполнения,
и цель работы была достигнута.
50
СПИСОК ЛИТЕРАТУРЫ
1) Azuma, R. A Survey of Augmented Reality / R. Azuma // Teleoperators
and Virtual Environments. – 1997. – №4, p. 355–385.
2) Siltanen, S. Theory and applications of marker-based augmented reality /
S. Siltanen – Finland: VTT, 2012. – 198 p.
3) Ахо, А. Структуры данных и алгоритмы / А. Ахо, Дж. Хопкрофт, Д
Ульман. – М.: Издательский дом «Вильямс», 2003. – 384 с.
4) Вирт, Н. Алгоритмы и структуры данных / Н. Вирт – М.: Мир, 1989.
– 360 с.
5) Карпов, Ю. Г. Теория и технология программирования / Ю. Г.
Карпов – СПб.: Питер, 2002. – 272 с.
6) Кнут, Д. Искусство программирования / Д. Кнут – М.: Издательский
дом «Вильямс», 2015. – 720 с.
7) Медведев,
В.
И.
Особенности
объектно-ориентированного
программирования на C++/CLI, C# и Java / В. И. Медведев – Казань: РИЦ
«Школа», 2010. – 444 с.
8) Фазлулин, Э. М. Инженерная графика / Э. М. Фазлулин, В. А.
Халдинов – М.: Академия, 2009. – 398 с.
9) GaitAid Virtual Walker for Movement disorder patients [Электронный
ресурс]. – Режим доступа: http://www.medigait.com. – Дата обращения:
15.05.2018.
10) 3D Systems Phantom Premium [Электронный ресурс]. – Режим
доступа:
https://www.3dsystems.com/haptics-devices/3d-systems-phantom-
premium. – Дата обращения: 18.05.2018.
51
ПРИЛОЖЕНИЕ А
(обязательное)
ЛИСТИНГ ПРОГРАММЫ
using UnityEngine;
{
public class Tracker : MonoBehaviour
{
private AndroidJavaObject
m_KudanAR_Instance = null;
private AndroidJavaObject
m_ActivityContext
= null;
private int
m_DeviceIndex
= -1;
private int
m_TextureHandle
= 0;
private int
m_Width
private int
m_Height
= 0;
= 0;
private Texture2D
m_InputTexture
private bool
m_WasTrackingWhenApplicationPaused = false;
private bool
m_ApplicationPaused = false;
private MeshFilter
= null;
_cameraBackgroundMeshFilter;
private ScreenOrientation
_prevScreenOrientation;
private Matrix4x4
_projectionRotation = Matrix4x4.identity;
void updateAndroidTracking()
{
UpdateRotation ();
if ( m_KudanAR_Instance != null )
{
float[] projectionFloats = new float[ 16 ];
projectionFloats = m_KudanAR_Instance.Call<float[]>( "GetProjectionMatrix",
_cameraNearPlane, _cameraFarPlane );
float fCameraAspectRatio = (float)( m_Width ) / (float)( m_Height );
52
_projectionMatrix
=
ConvertNativeFloatsToMatrix(
projectionFloats,
fCameraAspectRatio );
_projectionMatrix = _projectionMatrix * _projectionRotation;
if ( _isTrackingRunning )
{
if ( _finalTexture == null )
{
int iTextureHandle = m_KudanAR_Instance.Call<int>( "getTextureHandle" );
if ( m_TextureHandle != iTextureHandle )
{
m_TextureHandle = iTextureHandle;
_finalTexture
=
Texture2D.CreateExternalTexture(
m_Width,
m_Height,
TextureFormat.RGBA32, false, false, new System.IntPtr( m_TextureHandle ) );
}
}
_detected = GetDetected();
}
}
}
public void ArbiTrackStart (Vector3 position, Quaternion orientation)
{
float[] f = new float[7];
f[0] = position.x;
f[1] = position.y;
f[2] = position.z;
f[3] = orientation.x;
f[4] = orientation.y;
f[5] = orientation.z;
f[6] = orientation.w;
NativeInterface.ArbiTrackStart(f);
53
}
public override void ArbiTrackGetPose (out Vector3 position, out Quaternion
orientation)
{
position = new Vector3();
orientation = new Quaternion();
float[] f = new float[7];
NativeInterface.ArbiTrackGetPose(f);
position = new Vector3(f[0], f[1], -f[2]);
orientation = new Quaternion(f[3], f[4], f[5], f[6]);
AndroidJavaObject
arbiPosition
=
m_KudanAR_Instance.Get<AndroidJavaObject>("m_ArbiPosition");
AndroidJavaObject
arbiOrientation
=
m_KudanAR_Instance.Get<AndroidJavaObject>("m_ArbiOrientation");
position.x = arbiPosition.Get<float>("x");
position.y = arbiPosition.Get<float>("y");
position.z = -arbiPosition.Get<float>("z");
orientation.x = arbiOrientation.Get<float>("x");
orientation.y = arbiOrientation.Get<float>("y");
orientation.z = arbiOrientation.Get<float>("z");
orientation.w = arbiOrientation.Get<float>("w");
}
public override void FloorPlaceGetPose (out Vector3 position, out Quaternion
orientation)
{
position = new Vector3();
orientation = new Quaternion();
float[] f = new float[7];
NativeInterface.FloorPlaceGetPose(f, _floorHeight);
position = new Vector3(f[0], f[1], f[2]);
54
orientation = new Quaternion(f[3], f[4], f[5], f[6]);
AndroidJavaObject
floorPosition
=
m_KudanAR_Instance.Get<AndroidJavaObject>("m_FloorPosition");
AndroidJavaObject
floorOrientation
=
m_KudanAR_Instance.Get<AndroidJavaObject>("m_FloorOrientation");
position.x = floorPosition.Get<float>("x");
position.y = floorPosition.Get<float>("y");
position.z = floorPosition.Get<float>("z");
orientation.x = floorOrientation.Get<float>("x");
orientation.y = floorOrientation.Get<float>("y");
orientation.z = floorOrientation.Get<float>("z");
orientation.w = floorOrientation.Get<float>("w");
}
public override void updateCam ()
{
if (receivingInput)
{
System.IntPtr texturePtr = _clonedTexture.GetNativeTexturePtr();
long textureID = (long)texturePtr;
NativeInterface.setTextureID(textureID);
GL.IssuePluginEvent(NativeInterface.GetRenderEventFunc(), 0);
}
}
public
static
Matrix4x4
ConvertNativeFloatsToMatrix(float[]
cameraAspect)
{
Matrix4x4 m = new Matrix4x4 ();
m.SetRow (0, new Vector4 (r [0], r [1], r [2], r [3]));
m.SetRow (1, new Vector4 (r [4], r [5], r [6], r [7]));
m.SetRow (2, new Vector4 (r [8], r [9], r [10], r [11]));
r,
float
55
m.SetRow (3, new Vector4 (r [12], r [13], r [14], r [15]));
float screenAspect = ((float)Screen.width / (float)Screen.height);
float scale = cameraAspect / screenAspect;
if (scale > 1)
{
m.m00 *= scale;
}
else
{
m.m11 /= scale;
}
m = m.transpose;
m.m02 *= -1f;
m.m12 *= -1f;
return m;
}
protected static Vector3 ConvertNativeFloatsToVector3(float x, float y, float z)
{
return new Vector3(-x, -y, -z);
}
protected static Quaternion ConvertNativeFloatsToQuaternion(float x, float y, float
z, float w)
{
return new Quaternion(x, y, z, w) * Quaternion.AngleAxis(-90f, Vector3.forward)
* Quaternion.AngleAxis(90f, Vector3.left);
}
private void UpdateFrameRates()
{
_rateTimer += Time.deltaTime;
_numFramesRendered++;
56
if (_rateTimer >= 1.0f)
{
_cameraRate
=
m_KudanAR_Instance.Call<float>(
"getCameraDisplayFrameRate" );
_trackerRate = m_KudanAR_Instance.Call<float>( "getTrackerFrameRate" );
_appRate = (float)_numFramesRendered / _rateTimer;
_rateTimer = 0f;
_numFramesRendered = 0;
}
}
public void UpdateRotation()
{
ScreenOrientation currentOrientation = Screen.orientation;
if (currentOrientation == _prevScreenOrientation)
{
return;
}
_prevScreenOrientation = currentOrientation;
float fCameraAspectRatio = (float)(m_Width) / (float)(m_Height);
float projectionScale = 1.0f / fCameraAspectRatio;
int[] indices;
if (currentOrientation == ScreenOrientation.LandscapeLeft)
{
indices = new int[]{ 0, 1, 2, 3 };
_projectionRotation = Matrix4x4.identity;
}
else if (currentOrientation == ScreenOrientation.Portrait)
{
indices = new int[]{ 2, 3, 1, 0 };
57
_projectionRotation = Matrix4x4.TRS (Vector3.zero, Quaternion.AngleAxis (90,
Vector3.back), new Vector3 (projectionScale, projectionScale, 1));
}
else if (currentOrientation == ScreenOrientation.LandscapeRight)
{
indices = new int[]{ 1, 0, 3, 2 };
_projectionRotation = Matrix4x4.TRS (Vector3.zero, Quaternion.AngleAxis (180,
Vector3.back), Vector3.one);
}
else if (currentOrientation == ScreenOrientation.PortraitUpsideDown)
{
indices = new int[]{ 3, 2, 0, 1 };
_projectionRotation = Matrix4x4.TRS (Vector3.zero, Quaternion.AngleAxis (270,
Vector3.back), new Vector3 (projectionScale, projectionScale, 1));
}
else
{
return;
}
Vector3[] pos = new Vector3[4];
pos [indices [0]] = new Vector3 (-0.5f, -0.5f, 0.0f);
pos [indices [1]] = new Vector3 (0.5f, 0.5f, 0.0f);
pos [indices [2]] = new Vector3 (0.5f, -0.5f, 0.0f);
pos [indices [3]] = new Vector3 (-0.5f, 0.5f, 0.0f);
_cameraBackgroundMeshFilter.mesh.vertices = pos;
}
}
public class Home : MonoBehaviour {
public static int stage = 1;
58
void OnMouseDown()
{
SceneManager.LoadScene("AR");
}
}
public class Left : MonoBehaviour {
public Texture Bedroom, Kitchen1, Kitchen2, LivingRoom;
private GameObject object1;
void OnMouseDown()
{
object1 = GameObject.FindGameObjectWithTag("Player");
switch (Home.stage)
{
case 1:
object1.GetComponent<RawImage>().texture = LivingRoom;
Home.stage = 4;
break;
case 2:
object1.GetComponent<RawImage>().texture = Bedroom;
Home.stage--;
break;
case 3:
object1.GetComponent<RawImage>().texture = Kitchen1;
Home.stage--;
break;
case 4:
object1.GetComponent<RawImage>().texture = Kitchen2;
Home.stage--;
break;
}
59
}
}
public class Objects : MonoBehaviour {
public static GameObject[] objects;
void Start ()
{
if(objects == null)
objects = GameObject.FindGameObjectsWithTag("ObPlayer");
for (int i = 0; i < objects.Length; i++)
{
objects[i].SetActive(false);
}
objects[0].SetActive(true);
}
}
public class Right : MonoBehaviour {
public Texture Bedroom,Kitchen1,Kitchen2,LivingRoom;
private GameObject object1;
void OnMouseDown()
{
object1 = GameObject.FindGameObjectWithTag("Player");
switch (Home.stage)
{
case 1:
object1.GetComponent<RawImage>().texture = Kitchen1;
Home.stage++;
break;
case 2:
object1.GetComponent<RawImage>().texture = Kitchen2;
Home.stage++;
60
break;
case 3:
object1.GetComponent<RawImage>().texture = LivingRoom;
Home.stage++;
break;
case 4:
object1.GetComponent<RawImage>().texture = Bedroom;
Home.stage = 1;
break;
}
}
}
public class StartCam : MonoBehaviour {
private static GameObject[] obj;
void Start () {
if (obj == null)
obj = GameObject.FindGameObjectsWithTag("Player");
if(!obj[0].active)
{
for (int i = 0; i < obj.Length; i++)
{
obj[i].SetActive(true);
}
}
}
}
public class MarklessAR : MonoBehaviour
{
private Gyroscope gyro;
private GameObject cameraContainer;
61
private Qaternion rotation;
private WebCamTexture cam;
private bool arReady = false;
public RawImage background;
public AspectRatioFitter fit;
private void Start()
{
if(!SystemInfo.supportsGyroscope)
{
return;
}
for (int i = 0; i < WebCamTexture.devices.Length; i++)
{
if(!WebCamTexture.device[i].isFrontFacing)
{
cam = new WebCamTexture(WebCamTexture.devices[i].name, Screen.width,
Screen.height);
break;
}
}
if(cam == null)
{
return;
}
cameraContainer = new GameObject("Camera Container");
cameraContainer.transform.position = transform.position;
transform.SetParent(cameraContainer.transform);
gyro = Input.gyro;
gyro.enabled = true;
cameraContainer.transform.rotation = Qaternion.Euler(90f,0,0);
62
rotation = new Qaternion(0,0,1,0);
cam.Play();
background.texture = cam;
arReady = true;
}
private void Update()
{
if(arReady)
{
float ratio = (float)cam.width / (float)cam.height;
fit.aspectRatio = ratio;
float scaleY = cam.videoVerticallyMirrored ? -1.0f : 1.0f;
background.rectTransform.localScale = new Vector3(1.0f,scaleY,1.0f);
int orient = -cam.videoRotationAngle;
background.rectTransform.localEulerAngles = new Vector3(0,0,orient);
}
}
}
Powered by TCPDF (www.tcpdf.org)
64
ИНФОРМАЦИОННО-ПОИСКОВАЯ ХАРАКТЕРИСТИКА
ДОКУМЕНТА НА ЭЛЕКТРОННОМ НОСИТЕЛЕ
Наименование
группы атрибутов
атрибута
1. Описание
Обозначение документа
документа
(идентификатор(ы)
файла(ов))
Наименование документа
2. Даты и время
3. Создатели
4. Внешние
ссылки
5. Защита
6. Характеристики
содержания
Характеристики документа
на электронном носителе
Презентация.pptx
Демонстрационные плакаты
к выпускной
квалификационной работе
Класс документа
ЕСКД
Вид документа
Оригинал документа на
электронном носителе
Аннотация
Демонстрационный
материал, отображающий
основные этапы выполнения
выпускной
квалификационной работы
Использование документа Операционная система
Windows 7, Microsoft
PowerPoint 2007
Дата и время
13.06.2017
копирования документа
Дата создания документа 29.05.2018
Дата утверждения
18.06.2018
документа
Автор
Честнихин М.О.
Изготовитель
Честнихин М.О.
Ссылки на другие
Удостоверяющий лист
документы
№ 140044
Санкционирование
ОГУ имени И.С. Тургенева
Классификация защиты
По законодательству РФ
Объем информации
1 120 804 Б
документа
65
7. Структура
документа(ов)
Наименование плаката
(слайда) №1
Наименование плаката
(слайда) №2
Наименование плаката
(слайда) №3
Наименование плаката
(слайда) №4
Наименование плаката
(слайда) №5
Наименование плаката
(слайда) №6
Наименование плаката
(слайда) №7
Наименование плаката
(слайда) №8
Наименование плаката
(слайда) №9
Наименование плаката
(слайда) №10
Наименование плаката
(слайда) №11
Наименование плаката
(слайда) №12
Титульный лист
Цель и задачи работы
Дополненная реальность
Требования к приложению
Сравнительная таблица
Диаграмма вариантов
использования
Диаграмма состояний
Диаграмма классов
Общий алгоритм работы
Транзитивная сеть
Пример работы приложения
Заключение
Powered by TCPDF (www.tcpdf.org)
1/--страниц
Пожаловаться на содержимое документа