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

Определение дополненной реальности. Обзор существующих приложений мобильных устройств. Разработка структуры программного обеспечения. Исследование основ взаимодействия с виртуальными объектами. Создание опытного образца программного обеспечения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 02.03.2016
Размер файла 756,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

3. Разработка прототипа

3.1 Выбор Фреймворка для разработки системы

Перед началом разработки необходимо произвести выбор Фреймворка (набора библиотек).

3.1.1 Обзор альтернатив

OpenCV - библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков. Может свободно использоваться в академических и коммерческих целях - распространяется в условиях лицензии BSD.

Vuforia SDK - это программное обеспечение для мобильных устройств, которое позволяет создавать приложения дополненной реальности. Оно использует технологию компьютерного зрения для того, чтобы распознавать и отслеживать плоские изображений и простые 3D-объекты в режиме реального времени. Эта возможность регистрации изображений позволяет определять расположения и ориентации виртуальных объектов, таких как 3D-модели, в реальном мире, когда они рассматриваются через камеру мобильного устройства. Положение и ориентация виртуального объекта отслеживается в реальном времени, так что точки зрения зрителя на объект соотносится с их точкой зрения на изображение, так что кажется, что виртуальный объект является частью реальной сцены мира.

Vuforia SDK поддерживает различные 2D и 3D целевые типов, включая безмаркерные цели. Дополнительные возможности SDK включает локализованные обнаружения окклюзии с помощью "виртуальных кнопок, изображений выполнения целевого отбора, а также возможность создать и изменить целевые наборы программно во время выполнения.

Vuforia обеспечивает API для C++, Java, Objective-C, и. Net языков Есть расширение игрового движка Unity. Таким образом, SDK поддерживает как родные для IOS и Android языки, так и одновременно позволяет разрабатывать приложения дополненной реальности в Unity, которые легко переносимым на обе платформы. Приложений, разработанные с использованием Vuforia поэтому совместимы с широким спектром мобильных устройств, включая iPhone (4/4S), iPad, Android и телефонов и планшетов под управлением ОС Android версии 2.2 или выше и ARMv6 или 7 процессор с FPU.

ARToolkit - это библиотека компьютерного слежения для создания приложений с дополненной реальностью. Для этого он использует возможности видео слежения, расчет реального положения и ориентации камеры по отношению к квадратному физическому маркеру в режиме реального времени. Когда реальное положение камеры известно виртуальная камера может быть расположена в той же точке и 3D модель накладывается на реальный маркер. Так ARToolKit решает две ключевые проблемы в дополненной реальности; отслеживания точки зрения и виртуального взаимодействия объектов.

ARToolKit был первоначально разработан Hirokazu Kato Нара института науки и технологий в 1999 году и был выпущен в университете Лаборатория HIT Вашингтоне. В настоящее время он функционирует как проект с открытым исходным размещенные на SourceForge с коммерческой лицензии доступны ARToolWorks. ARToolKit очень широко используется (библиотека с более чем 160000 загрузок с 2004 года).

Metaio SDK - готовая библиотека для создания мобильных приложений дополненной реальности. Использует OpenGl использует SLAM методы для более точной работы

String - библиотека для создания мобильных приложений ориентирована на iOS устройства.

3.1.2 Таблица альтернатив и критериев

Таблица 2. Таблица альтернатив и критериев

Критерии альтернативы

Кроссплатформенность

Наличие документации и литературы

Поддержка различных языков программирования

Широкий выбор дополнительных сервисов (оценка)

Тип лицензии

OpenCV

iOS, PC, Android, Linux

Много

С/C + +, Python, Java, Ruby, Matlab, Lua

Отлично

Boost Software License

Vuforia

iOS, Android, Unity

Достаточно

C + +, Java, Objective-C, .Net

Отлично

Free + Commercial SDK option

ARToolKit

iOS, Android, Unity

Много

Java, Objective-C

Мало

Free + Commercial SDK option

Metaio SDK

iOS, Android, Unity, WEB

Мало

Java, Objective-C, .Net

Отлично

Free + Commercial SDK option

String

iOS, Unity

Мало

Objective-C, .Net

Очень мало

Free + Commercial SDK option

Вывод

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

3.2 Проектирование системы

Прототип системы разрабатывался для мобильных устройств под управление операционной системы iOS. Для разработки использовался Фреймворк Vuforia SDK и игровой движок Unity 4.

3.2.1 Архитектура

Для функционирования рассматриваемой системы необходимы следующие модули:

1) Камера

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

2) Конвертер изображения.

Конвертер форматов преобразует кадры с камеры формата (например, YUV12) в формат, пригодный для рендеринга OpenGL ES (например, RGB565) и для отслеживания. Это преобразование также включает в себя уменьшение изображение с камеры в различных разрешениях доступных в преобразованном стеке кадров.

3) Трекер

Компонент трекер содержит алгоритмы компьютерного зрения, для того чтобы выявлять и отслеживать объекты реального мира в рамках видеокамеры. На основе изображения с камеры, различные алгоритмы заботятся о выявлении новых целей, либо маркеров и оценки виртуальных кнопок. Результаты хранятся в состоянии объекта, который используется фоновое видео визуализации и могут быть доступны из кода приложения. Трекер может загрузить несколько наборов данных одновременно и активировать их.

4) Отрисовка фона

Этот модуль визуализации создает изображение, хранящееся в объекте. Производительность визуализации видео фоновом режиме оптимизирована для конкретного устройства.

5) Код приложения

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

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

- Обновлять логику приложения с новыми входными данными

- Отрисовывать слой дополненной реальности

6) База маркеров

База данных маркеров в устройстве создаются с помощью онлайн Target Manager. Он создает специальный XML файл конфигурации и двоичный файл, содержащий базу данных для отслеживания. Эти файлы добавляются разработчиком приложения в установочный пакет приложения и используются во время выполнения.

На рисунке 15 представлена архитектура прототипа.

Рисунок 15. Архитектура прототипа системы

3.2.2 Разработка системы

1) Создание маркера

Для создания маркера дополненной реальности в составе Vuforia SDK имеется специальный Target Manager (рисунок 16), который обрабатывает заданное изображение, выделяет особые точки и формирует специальные файлы, используемые в дальнейшем для распознавания маркера.

Рисунок 16. Создание маркера дополненной реальности

2) Особенности создания виртуального объекта

В состав Vuforia SDK входят специально описанные объекты которые потом используются при разработке. Одним из таких объектов является Virtual Button.

Virtual Button - это специальные области на маркере, с которыми пользователь может напрямую взаимодействовать. В простейшем случае они реализуются как виртуальные кнопки, нажатие на которые инициализирует какое-либо действие.

Благодаря возможности перенастройки виртуальной кнопки во время выполнения, можно реализовать обработку жеста для перемещения объекта. Для этого необходимо связать саму кнопку с виртуальным объектом (рисунок 17). Это делается с помощью наследования. Во время выполнения жеста кнопка обрабатывает событие и перемещаться в нужную сторону, как и связанный с ней объект.

Рисунок 17. Создание виртуального объекта

Инициализация виртуального объекта:

void Start(){ // Получаем дескриптор объекта Soccerball mSoccerball = transform.FindChild("soccerball").gameObject; // Регестрируем с virtual buttons TrackableBehaviour VirtualButtonBehaviour vb = GetComponentInChildren<VirtualButtonBehaviour>(); if (vb) { vb.RegisterEventHandler(this); } // Подгонка размеров под метку mForce *= transform.localScale.x; }

Обработка жеста "толкания":

private void KickSoccerball(){ // Получаем границы метки Bounds targetBounds = this.collider.bounds; Rect targetRect = new Rect( -targetBounds.extents.x, -targetBounds.extents.z, targetBounds.size.x, targetBounds.size.z); // Определяем направление толчка с учетом того, что он должен остаться на метке Vector2 randomDir = new Vector2(); for (int i = 0; i < 20; i++) { randomDir = Random.insideUnitCircle.normalized; // возвращает позицию мяча Vector3 pos = mSoccerball.transform.localPosition * this.transform.localScale.x;

// Оценка конечного положения Vector2 finalPos = new Vector2(pos.x, pos.z) + randomDir * mForce * 1.5f; if (targetRect.Contains(finalPos)) { break; } } // Направление движения Vector3 kickDir = new Vector3(randomDir.x, 0, randomDir.y).normalized; // Вращение мяча в правильном направлении Vector3 torqueDir = Vector3.Cross(Vector3.up, kickDir).normalized; mSoccerball.rigidbody.AddForce(kickDir * mForce, ForceMode.VelocityChange); mSoccerball.rigidbody.AddTorque(torqueDir * mForce, ForceMode.VelocityChange); mIsRolling = true; mTimeRolling = 0.0f; }

3) Результат

В результате было создано приложение для iPad, способное распознавать жест "толкания" пользователя, на который реагирует виртуальный объект (рисунок 18).

Рисунок 18. Реакция вириального мячика на "толчок"

3.3 Надежность

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

Надежность ПО определяется в первую очередь его безотказностью. Безотказность ПО - это свойство сохранять работоспособность при использовании его для обработки информации [39]. Безотказностью программного обеспечения оценивается вероятность его работы без отказов при определенных условиях внешней среды в течение заданного периода наблюдения.

В приведенном определении под отказом ПО понимается недопустимое отклонение характеристик функционирования этого обеспечения от предъявляемых требований. Заданный период наблюдения соответствует времени, необходимому для выполнения на ЭВМ решаемой задачи.

Безотказность ПО может характеризоваться средним временем возникновения отказов при функционировании программы. При этом предполагается, что аппаратные средства ЭВМ находятся в исправном состоянии. С точки зрения надежности, принципиальное отличие ПО от аппаратных средств состоит в том, что программы не изнашиваются и их выход из строя из-за поломки невозможен. Следовательно, характеристики функционирования ПО зависят только от его качества, предопределяемого процессом разработки. Это означает, что безотказность ПО определяется его корректностью и зависит от наличия в нем ошибок, внесенных на этапе его создания. Кроме того, проявление ошибок ПО связано еще и с тем, что в некоторые моменты времени на обработку могут поступать ранее не встречавшиеся совокупности данных, которые программа не в состоянии корректно обработать. Поэтому входные данные в определенной мере влияют на функционирование ПО.

Таким образом, основными показателями надежности ПО являются:

вероятность безотказной работы программы P(t) , представляющая собой вероятность того, что ошибки программы не проявятся в интервале времени (0, t);

вероятность отказа программы Q(t) или вероятность события отказа ПО до момента времени t;

средняя наработка программы на отказ T.

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

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

Экспоненциальная модель надежности ПО основана на предположении об экспоненциальном характере изменения числа ошибок во времени. В период нормальной эксплуатации интенсивность отказов не изменяется.

Средняя наработка на отказ рассчитывается следующим образом:

, (1)

где лПО - интенсивность ошибок программного обеспечения.

Интенсивность ошибок разрабатываемого программного обеспечения рассчитывается по формулам:

,(2)

,(3)

где t - фактическое время отладки;

б - коэффициент крутизны линии, характеризующий скорость роста надежности;

N0 - число обнаруженных ошибок за время отладки t;

N - общее число строк;

КТП - коэффициент, учитывающий влияние методологии программирования на надежность ПО;

КТПi - коэффициент, учитывающий использование i-ой технологии программирования;

КЯЗi - коэффициент, учитывающий использование i-ого языка программирования;

КПЛi - коэффициент, учитывающий использование i-ой платформы программирования.

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

(4)

Исходное число строк кода N=10193.

Результаты отладки ПО представлены в таблице 3.

Таблица 3. Результаты отладки ПО

Число ошибок

Время отладки t, часы

Интенсивность ошибок, л0 1/ час

28

4

0,00006

19

4

0,00004

15

4

0,00003

9

4

0,00002

5

4

0,00001

2

4

0,00001

1

4

0,00000

дополненный реальность мобильный виртуальный

На основе полученных данных можно построить кривую зависимости интенсивности ошибок от времени отладки (рисунок 19).

Рисунок 19. Зависимость интенсивности ошибок от времени отладки

Как показано выше, функциональная зависимость интенсивности ошибок ПО от времени отладки описывается экспоненциальным законом и зависит от коэффициента крутизны линии, характеризующей скорость роста надежности б, и от фактического времени отладки ПО. Анализ результатов тестирования ПО позволил определить б = 0,06.

Таким образом, интенсивность ошибок разрабатываемого ПО составляет:

(1/час)

(1/час)

По экспоненциальному закону вероятность безотказной работы:

.(4)

Рисунок 20. Вероятность безотказной работы

Наработка на отказ программного обеспечения составляет:

(5)

Вероятность безотказной работы составляет:

P = 0.9998.

4. Экономическая часть

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

Ниже приводится оценка продолжительности отдельных этапов проектирования, составляющих полный цикл разработки:

Предпроектные исследования и разработка ТЗ 0,5 мес.

Реализация проекта 2,5 мес.

Разработка технической документации 0,5 мес.

Сдача работы и подписание акта о приемке 0,5 мес.

Затраты:

Аренда помещения, оборудование, расходные материалы, оборудование для отладки, коммунальные услуги.

При разработке по было арендовано помещение, стоимость аренды 10 квадратных метров составляет 11000 руб/мес, в стоимость аренды входят так же коммунальные услуги и доступ к глобальной сети Internet.

Итого: 11000 руб/мес * 4 мес = 44000 руб, поскольку оплачивается количество полных месяцев использования помещения.

Также необходимо учесть аренду оборудования, используемого в ходе создания проекта. В таблице 10 приведены стоимость оборудования и его аренда на 4 месяца.

Подпись__________

Таблица 4. Стоимость оборудования и его аренда на 4 месяца.

Оборудование

Название

Количество

Цена оборудования (руб.)

Цена аренды оборудования (с расчетом использования на 4 месяца)

Ноутбук

MacBook Pro 13 with Retina display Late 2012 MD213

1

52 000р.

5 778р.

Кабель mini-USB

Hama 53733 0.5m

1

200р.

22р.

Бумага

Бумага Комус Документ Standard

1

162р.

162р.

Принтер

EPSON XP-303

1

3 500р.

389р.

Монитор

DELL

1

6 000р

600р

Итого:

61862р.

6 951р.

Затраты = 44000 +6951 = 50951 (руб.) (6)

При применении упрощенной системы налогообложения (УСНО) заработная плата считается частью затрат на создание проекта и налог с нее не начисляется.

Над проектом работал один исполнитель, зарплата которого составляет 40000 руб./мес. Получаем затраты на заработную плату

З.п. = 40000*4=160000 (руб.) (7)

Цена работы = затраты + прибыль + налоги

Цена работы = 210951 + 226926 + 12938 = 45000 (руб.)(8)

Прибыль составляет 226926 руб.

Рентабельность= прибыль / цена (без УСНО)

Рентабельность = 450000-210951-12123)/450000 = 50%.(9)

Налог УСНО составляет 6% от общей суммы дохода, те:

Налог УСНО = 450000*0,06-10816-1061=12123 (руб.)(10)

Минимальный размер оплаты труда в Москве на данный момент составляет 5200 руб. Рассчитаем страховые взносы (ПФР, ФФ мед. стр.)

Взнос ПФР = 0,26*Мин.з/п*4=10816 (руб.) (11)

Взнос ФФ мед. стр. = 0,051*Мин.з/п*4/2=1061 (руб.) (12)

Таблица 5. Таблица оценки стоимости работ

Категории расходов

Значение

1

Заработная плата (Zp)

160 000 руб.

2

Накладные расходы (Nr)

50 951 руб.

3

Налог на добавленную стоимость (N1)

63 240 руб.

4

Страховые взносы (N2)

40 800 руб.

5

Налог на прибыль (N3)

10 220 руб.

6

Рентабельность

30 %

Итого

285424

На рисунке 21 представлена диаграмма характеризующая экономические показатели работы.

Рисунк 21. Диаграмма стоимости работы

5. Охрана труда

5.1 Общие положения

Охрана труда - это система законодательных актов, социально-экономических, организационных, технических, гигиенических и лечебно-профилактических мероприятий и средств, обеспечивающих безопасность, сохранение здоровья и работоспособности человека в процессе труда [40]. Техника безопасности представляет собой систему средств и методов, предотвращающих или снижающих до безопасного уровня воздействие опасных факторов [40]. Производственная санитария призвана устранить или снизить до безопасного уровня воздействие вредных факторов.

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

С точки зрения степени потенциальной опасности для здоровья и жизни человека факторы разделяются на опасные и вредные.

Опасным производственным фактором [41] является такой фактор производственного процесса, воздействие которого на работающего приводит к травме или резкому ухудшению здоровья.

Вредные производственные факторы [41] - это неблагоприятные факторы трудового процесса или условий окружающей среды, которые могут оказать вредное воздействие на здоровье и работоспособность человека. Длительное воздействие на человека вредного производственного фактора приводит к заболеванию.

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

Задачей охраны труда является гарантирование безопасных и здоровых условий труда и поддержание трудоспособности рабочих. Безопасными условиями труда считаются такие условия, при которых воздействие на работающих вредных или опасных производственных факторов исключено либо уровни их воздействия не превышают установленные нормативы.

Подпись ____________

5.2 Влияние мобильных устройств на здоровье человека

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

Удельный коэффициент поглощения электромагнитной энерги

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

Удельный коэффициент поглощения (англ. Specific Absorption Rate - SAR) электромагнитной энергии - показатель, определяющий энергию электромагнитного поля, выделяющуюся в тканях тела человека за одну секунду.

Единицей измерения SAR является ватт на килограмм (Вт/кг).

- В Европе допустимое значение излучения составляет 2 Вт/кг для 10 граммов тканей.

- В США используется другая система измерений - Федеральное агентство по связи (FCC) сертифицирует только те сотовые аппараты, SAR которых не превышает 1,6 Вт/кг для 1 грамма тканей.

- В России своя система измерения излучаемой мощности - в ваттах на квадратный сантиметр.

Удельный коэффициент поглощения вычисляется:

Сила поля в тканях:

Плотность тока в тканях:

(13)

Повышение температуры в тканях:

(14)

где: (15)

E - электрическое поле (в В/м)

J - плотность тока (А/мІ), вызванная электрическим и магнитным полями; (предельно допустимый уровень для людей, подвергающихся подобным воздействиям в профессиональной деятельности - 10 мА/мІ; для остальных - 2-10 мА/мІ)

с - плотность человеческих тканей (кг/мі)

у - электрическая проводимость человеческих тканей (См/м)

ci - теплоёмкость человеческих тканей (Дж/(кг·К))

dT/dt -временная производная температуры человеческих тканей (К/с)

Нужно отметить, что значение SAR определяется при работе телефона на максимальной мощности. На практике мощность передатчика телефона зависит от конкретных условий, при этом, как правило, чем лучше качество связи в точке местонахождения абонента, тем меньше мощность. Хотя в действительности уровень мощности передатчика на мобильном телефоне управляется с базовой станции GSM. Диапазон регулировки пиковой мощности в GSM-телефонах - примерно от 2 Вт до 20 мВт (от 33 dBm до 5 dBm - GSM900, от 30 dBm до 0 dBm - GSM1800, с шагом в 2 dB) - то есть разница между максимальной и минимальной мощностью составляет сто раз. В телефонах CDMA также используется аналогичная система регулировки мощности.

Таблица 5. Удельный коэффициент поглощения для современных мобильных устройств

Модель

SAR (Вт/кг)

Samsung GT-I9100 Galaxy S II

0,338

HTS EVO 3D

0,516

Apple iPhone 5

0,901

Apple iPad 3

0,980

Вероятные клинические последствия воздействия мобильных устройств

Можно выделить четыре системы, наиболее подверженные вредному влиянию.

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

- Иммунная система. Происходит угнетение иммуногенеза, что приводит к ухудшению сопротивляемости организма к различным инфекциям.

- Эндокринная система. В результате воздействия на нее увеличивается содержание адреналина в крови.

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

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

Использование мобильного телефона за рулем оказывает сильное влияние на снижении реакции водителя. Согласно исследованиям, иногда сетчатка глаза не реагирует даже на смену цвета светофора и дорожные знаки.

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

Со стороны иммунной системы, мобильный телефон может провоцировать ослабление иммунитета, что способствует повышению уязвимости организма

Со стороны эндокринной системы могут наблюдаться следующие проявления:

· Разрушение клеток крови - эритроцитов (анемия)

· Увеличение кровяного давления.

· Увеличение выработки адреналина.

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

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

Существует опасность взрыва аккумулятора мобильного устройства. Как правило это происходит при использовании некачественных, поддельных мобильных устройств.

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

Способы защиты от воздействия мобильных устройств

1) Использование гарнитур для снижения воздействия электромагнитных волн на головной мозг человека.

2) Держать телефон при разговоре следует так, чтобы не заслонять антенну рукой. В телефонах со встроенной антенной, как правило, не следует касаться рукой верхней (или, реже, нижней) трети корпуса.

3) При разговоре из помещения (кроме крупных торговых центров, вокзалов и т. д., где операторы связи могут устанавливать локальные базовые станции) по возможности следует подходить к окну.

4) Находясь в зоне неуверенного или сравнительно слабого приема (менее половины шкалы на телефоне), следует свести продолжительность разговоров к минимуму, по возможности заменять голосовое общение на SMS.

5) Если приходится часто звонить из автомобиля, установите выносную автомобильную антенну. Металлический корпус легкового автомобиля значительно ухудшает условия для передачи сигнала от телефона к базовой станцией, поэтому мощность возрастает.

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

7) Ограничение по времени использования мобильного устройства.

8) Хранение и перенос мобильного телефона в удалении от половых органов.

9) Использование официально поставленной техники.

10) Занятие гимнастикой для глаз.

Заключение

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

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

В разделе "Охрана труда и техника безопасности" приведены обзор и рекомендации по защите здоровья от вредных и опасных факторов, возникающих при работе с мобильными устройствами.

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

1. Ronald T. Azuma A Survey of Augmented Reality // In Presence: Teleoperators and Virtual Environments. - 1997. - No 4. - P. 355-385.]

2. Miika Tikander Development and evaluation of augmented reality audio systems: Ab- stract of dissertation for the degree of Doctor of Science in Technology. - Helsinki, 2009. - 70 p.

3. Hear&There: An Augmented Reality System of Linked Audio / Joseph Rozier, Karrie Karahalios, Judith Donath // Online Proceedings of the ICAD [Электронный ресурс]. - Режим доступа: http://www.icad.org/websiteV2.0/Conferences/ICAD2000/ICAD2000.html, свободный (дата обращения 5.03.2013).

4. Global Positioning System. - Режим доступа: http://www.gps.gov/, свободный (дата обращения 18.05.2013)

5. Глобальная спутниковая навигационная система ГЛОНАСС. Интерфейсный контрольный документ. - Редакция 5.1. - М.: КНИЦ МО России, 2008. - 74 с.

6. GaitAid Virtual Walker for Movement disorder patients [Электронный ресурс]. - Режим доступа: http://www.medigait.com/index.html, свободный (дата обращения 17.04.2013).

7. PHANTOM Premium 6DOF [Электронный ресурс]. - Режим доступа: http://www.sensable.com/haptic-phantom-premium-6dof.htm, свободный (дата обращения 17.05.2010).

8. Exploring Visuo-Haptic Mixed Reality/ Christian Sandor, Tsuyoshi Kuroki, Shinji Uchiyama, Hiroyuki Yamamoto // IEIC Technical Report (Institute of Electronics, Infor- mation and Communication Engineers). - 2007. - Vol. 106, No470. - P. 31-36.

9. Visuohaptic Simulation of Bone Surgery for Training and Evaluation / Dan Morris, Christopher Sewell, Federico Barbagli // IEEE Computer Graphics and Applications. - 2006. - Vol. 26, No 6. - P. 48-57.

10. Augmented Reality Browser: Layar [Электронный ресурс]. - Режим доступа: http://www2.layar.com/, свободный (дата обращения: 4.05.2013).

11. Daniel Wagner and Dieter Schmalstieg, "Handheld Augmented Reality Displays", Graz University of Technology, Austria.

12. Oliver Bimber, Ramesh Raskar, Masahiko Inami, "Spatial Augmented Reality", SIGGRAPH 2007 Course 17 Notes, 2007.

13. Assaf Feldman, Emmanuel Munguia Tapia, Sajid Sadi, Pattie Maes, Chris Schmandt, "ReachMedia: On-the-move interaction with everyday objects", iswc, pp.52-59, Ninth IEEE International Symposium on Wearable Computers (ISWC'05), 2005.

14. Li Yi-bo; Kang Shao-peng; Qiao Zhi-hua; Zhu Qiong; "Development Actuality and Appli- cation of Registration Technology in Augmented Reality", Computational Intelligence and Design, 2008. ISCID `08. International Symposium on, Vol.2, No., pp.69-74, 17-18 Oct. 2008

15. H. Kato, M. Billinghurst, I. Poupyrev, K. Imamoto, K. Tachibana, "Virtual Object Manipulation on a Table-Top AR Environment", ISAR'00, 111-119, 2000.

16. Pranav Mistry, Tsuyoshi Kuroki, and Chaochi Chuang, "TaPuMa: Tangible Public Map for Information Acquirement through the Things We Carry", MIT Media Lab, Ambi-sys'08, February 2008.

17. Dieter Schmalstieg, Anton Fuhrmann, Gerd Hesina, "Bridging Multiple User Interface Dimensions with Augmented Reality", IEEE, 2000.

18. Istvan Barakonyi, Tamer Fahmy, Dieter Schmalstieg, "Remote collaboration using Augmented Reality Videoconferencing", Proceedings of Graphics Interface 2004, p.89-96, May 17-19, 2004, London, Ontario, Canada

19. C. Sandor, A. Olwal, B. Bell and S. Feiner, "Immersive mixed-reality configuration of hybrid user interfaces", In ISMAR `05, pp. 110-113, 2005

20. Pranav Mistry, Pattie Maes, Liyan Chang, "WUW - Wear Ur World - A Wearable Gestural Interface", ACM, CHI 2009, Boston, April 4-9, 2009.

21. Jae-Young Lee; Seok-Han Lee; Hyung-Min Park; Sang-Keun Lee; Jong-Soo Choi; Jun-Sik Kwon; "Design and implementation of a wearable AR annotation system using gaze interaction," Consumer Electronics (ICCE), 2010 Digest of Technical Papers International Conference on, vol., no., pp.185-186, 9-13 Jan. 2010

22. URL: http://www.google.com/mobile/goggles/#text, Google Goggles, 2010 Дата обращения: 2.05.2013

23. URL: www.mini.com MINI Дата обращения: 2.05.2013

24. URL: http://www.geekologie.com/2008/12/14-week, Cool: Augmented Reality Advertisements, Dec. 19 2008 Дата обращения: 2.05.2013

25. URL: http://www.augmented-reality-games.com Beyond Reality. Дата обращения: 2.05.2013

26. Marco Sacco, Stefano Mottura, Luca Greci, Giampaolo Vigan, Insitute of Industrial Technologies and Automation, National Research Council, Italy.

27. Yetao Huang, Yue Liu, Yongtian Wang, "AR-View: and Augmented Reality Device for Digital Reconstruction of Yuangmingyuan", IEEE International Symposium on Mixed and Augmented Reality, 2009.

28. Rainer Malaka, Kerstin Schneider, Ursula Kretschmer, "Stage-Based Augmented Edutainment", Smart Graphics 2004, pp.54-65

29. Bruns E.; Brombach B.; Zeidler T.; Bimber O., "Enabling Mobile Phones To Support Large-Scale Museum Guidance", Multimedia, IEEE, vol.14, no.2, pp.16-25, April-June 2007

30. Mark Billinghurst, "The MagicBook: A Transitional AR Interface", Ivan Poupyrev, 2001.

31. Malaka, R., Schneider, K., and Kretschmer, U. Stage-Based Augmented Edutainment. In LCNS 3031 (2004), 54-65

32. Visuohaptic Simulation of Bone Surgery for Training and Evaluation / Dan Morris, Christopher Sewell, Federico Barbagli // IEEE Computer Graphics and Applications. - 2006. - Vol. 26, No 6. - P. 48-57.],

33. [http://www.bmw.com/com/en/owners/service/augmented_reality_workshop_1.html]

34. Augmented Reality Browser: Layar [Электронныи? ресурс]. - Режим доступа: http://www2.layar.com/, свободныи? (дата обращения: 4.05.2010).],

35. URL: http://www.wikitude.org/dewikitude-drive-eyes-road-againenwikitude-drive-eyes- road, WikitudeDrive: Never take your eyes off the road again, 2009. Дата обращения: 2.05.2013

36. URL: http://www.readwriteweb.com/archives/how iphone 4 could change augmented reality.php, How iPhone 4 Could Change Augmented Reality, Chris Cameron, June 10, 2010 Дата обращения: 2.05.2013

37. Kumar A, Waldron K (1981) The workspace of a mechanical manipulator. Trans ASME J Mech Des 103:665-672

38. Gesture-based interaction via finger tracking for mobile augmented realityWolfgang Hьrst & Casper van Wezel Multimed Tools Appl (2013) 62:233-258

39. ГОСТ 27.002-89. Межгосударственный стандарт. Надежность в технике. Основные понятия. Термины и определения

40. Термины охраны труда.

URL: http://safety24.narod.ru/abstract_term.htm

Дата обращения: 20.04.2013

41. ГОСТ 12.0.003-86 Опасные и вредные производственные факторы. Классификация

42. Шапиро Л. Компьютерное зрение / Л. Шапиро, Дж. Стокман; Пер. с англ. - М.: БИНОМ. Лаборатория знаний, 2006.

Приложение

Исходный код

1. Скрипт определяющий поведение VirtualButton

/*==============================================================================Copyright (c) 2010-2013 QUALCOMM Austria Research Center GmbH.All Rights Reserved.Qualcomm Confidential and Proprietary==============================================================================*/

using System;

using System.Collections.Generic;

using System.Runtime.InteropServices;

using UnityEngine;

/// <summary>

///Этот скрипт связывает VirtualButton с виртуальным объектом

///

/// </summary>

public class VirtualButtonBehaviour: MonoBehaviour, IEditorVirtualButtonBehaviour

{

#region PROPERTIES

/// <summary>

/// Имя виртуальной кнопки.

/// </summary>

public string VirtualButtonName

{

get { return mName; }

}

/// <summary>

/// Возвращает True если кнопка нажата.

/// </summary>

public bool Pressed

{ get { return mPressed; }

}

/// <summary>

/// если позиция была обновленна

/// </summary>

public bool HasUpdatedPose

{

get { return mHasUpdatedPose; }

}

public bool UnregisterOnDestroy

{

get

{

return mUnregisterOnDestroy;

}

Set

{

mUnregisterOnDestroy = value;

}

}

/// <summary>

/// Создание VirtualButton Object во время выполнения

/// </summary>

public VirtualButton VirtualButton

{

get { return mVirtualButton; }

}

#endregion // PROPERTIES

#region CONSTANTS

/// <summary>

/// Вертикальная составляющая внешнего вида кнопки

/// </summary>

public const float TARGET_OFFSET = 0.001f;

#endregion // CONSTANTS

#region PRIVATE_MEMBER_VARIABLES

[SerializeField]

[HideInInspector]

private string mName;

[SerializeField]

[HideInInspector]

private VirtualButton.Sensitivity mSensitivity;

[SerializeField]

[HideInInspector]

private bool mHasUpdatedPose = false;

[SerializeField]

[HideInInspector]

private Matrix4x4 mPrevTransform = Matrix4x4.zero;

[SerializeField]

[HideInInspector]

private GameObject mPrevParent = null;

private bool mSensitivityDirty;

private bool mPreviouslyEnabled;

private bool mPressed;

private List<IVirtualButtonEventHandler> mHandlers = null;

private Vector2 mLeftTop;

private Vector2 mRightBottom;

private bool mUnregisterOnDestroy;

VirtualButton mVirtualButton;

#endregion // PRIVATE_MEMBER_VARIABLES

#region CONSTRUCTION

public VirtualButtonBehaviour()

{

mName = "";

mPressed = false;

mSensitivity = VirtualButton.DEFAULT_SENSITIVITY;

mSensitivityDirty = false;

mHandlers = new List<IVirtualButtonEventHandler>();

mHasUpdatedPose = false;

}

#endregion // CONSTRUCTION

#region PUBLIC_METHODS

/// <summary>

/// Registers an event handler with this Virtual Button which will be called

/// when a state changed is detected.

/// </summary>

public void RegisterEventHandler(IVirtualButtonEventHandler eventHandler)

{

mHandlers.Add(eventHandler);

}

/// <summary>

/// Registers an event handler with this Virtual Button which will be called

/// when a state changed is detected.

/// Returns true on success. False otherwise.

/// </summary>

public bool UnregisterEventHandler(IVirtualButtonEventHandler eventHandler)

{

return mHandlers.Remove(eventHandler);

}

/// <summary>

/// Calculates the 2D button area that the Virtual Button currently occupies

/// in the Image Target.

/// Returns true if the area was computed successfully. False otherwise.

/// Passes out the top left and bottom right position of the rectangle area.

/// </summary>

public bool CalculateButtonArea(out Vector2 topLeft,

out Vector2 bottomRight)

{

// Error if we don't have an image target as a root:

ImageTargetBehaviour itb = this.GetImageTargetBehaviour();

if (itb == null)

{

topLeft = bottomRight = Vector2.zero;

return false;

}

Vector3 vbPosITSpace = itb.transform.InverseTransformPoint(

this.transform.position);

// The scale of the image Target:

float itScale = itb.transform.lossyScale[0];

// Scale the button position:

Vector2 pos = new Vector2(vbPosITSpace[0] * itScale,

vbPosITSpace[2] * itScale);

// Scale the button area:

Vector2 scale = new Vector2(this.transform.lossyScale[0],

this.transform.lossyScale[2]);

// Calculate top left and bottom right points:

Vector2 radius = Vector2.Scale(scale * 0.5F, new Vector2(1.0f, -1.0f));

topLeft = pos - radius;

bottomRight = pos + radius;

// Done:

return true;

}

/// <summary>

/// Update the virtual button rect in native

/// </summary>

public bool UpdateAreaRectangle()

{

VirtualButton.RectangleData rectData = new VirtualButton.RectangleData();

rectData.leftTopX = mLeftTop.x;

rectData.leftTopY = mLeftTop.y;

rectData.rightBottomX = mRightBottom.x;

rectData.rightBottomY = mRightBottom.y;

if (mVirtualButton == null) return false;

return mVirtualButton.SetArea(rectData);

}

/// <summary>

/// Update sensitivity in native

/// </summary>

public bool UpdateSensitivity()

{

if (mVirtualButton == null) return false;

return mVirtualButton.SetSensitivity(mSensitivity);

}

/// <summary>

/// Update enabled status in native

/// </summary>

private bool UpdateEnabled()

{

return mVirtualButton.SetEnabled(enabled);

}

/// <summary>

/// UpdatePose() is called each frame to ensure the virtual button is clamped

/// to the image target plane and remains axis-aligned with respect to the

/// target. Return true if the defining area of the virtual button has

/// changed, false otherwise.

/// </summary>

public bool UpdatePose()

{

// The image target to which the button belongs:

ImageTargetBehaviour itb = this.GetImageTargetBehaviour();

// If there is no image target we return:

if (itb == null)

{

return false;

}

// We explicitly disallow any objects with non-uniform scaling in the

// object hierachy of the virtual button. Combined with a rotation

// this would result in skewing the virtual button.

Transform t = transform.parent;

while (t != null)

{

if (t.localScale[0] != t.localScale[1] ||

t.localScale[0] != t.localScale[2])

{

Debug.LogWarning("Detected non-uniform scale in virtual " +

" button object hierarchy. Forcing uniform scaling of " +

"object '" + t.name + "'.");

// Force uniform scale:

t.localScale = new Vector3(t.localScale[0], t.localScale[0],

t.localScale[0]);

}

t = t.parent;

}

// Remember we have updated once:

mHasUpdatedPose = true;

// Clamp to center of parent object:

if (transform.parent != null &&

transform.parent.gameObject != itb.gameObject)

{

transform.localPosition = Vector3.zero;

}

// Clamp position to image target plane:

Vector3 vbPosITSpace = itb.transform.InverseTransformPoint(

this.transform.position);

// Set the y offset in Image Target space:

vbPosITSpace.y = TARGET_OFFSET;

Vector3 vbPosWorldSpace = itb.transform.TransformPoint(vbPosITSpace);

this.transform.position = vbPosWorldSpace;

// Clamp orientation to the image target plane:

this.transform.rotation = itb.transform.rotation;

// Update the button area:

Vector2 leftTop, rightBottom;

CalculateButtonArea(out leftTop, out rightBottom);

// Change the button area only if the change is larger than a fixed

// proportion of the image target size:

float threshold = itb.transform.localScale[0] * 0.001f;

if (!Equals(leftTop, mLeftTop, threshold) ||

!Equals(rightBottom, mRightBottom, threshold))

{

// Area has changed significantly:

mLeftTop = leftTop;

mRightBottom = rightBottom;

return true;

}

// Area has not changed significantly:

return false;

}

/// <summary>

/// Called after the QCARBehaviour has updated.

/// </summary>

public void OnTrackerUpdated(bool pressed)

{

if (mPreviouslyEnabled != enabled)

{

mPreviouslyEnabled = enabled;

UpdateEnabled();

}

if (!enabled)

{

return;

}

// Trigger the appropriate callback if there was state change:

if (mPressed != pressed && mHandlers != null)

{

if (pressed)

{

foreach (IVirtualButtonEventHandler handler in mHandlers)

{

handler.OnButtonPressed(this);

}

}

Else

{

foreach (IVirtualButtonEventHandler handler in mHandlers)

{

handler.OnButtonReleased(this);

}

}

}

// Cache pressed state:

mPressed = pressed;

}

/// <summary>

/// Returns the Image Target that this Virtual Button is associated with.

/// </summary>

public ImageTargetBehaviour GetImageTargetBehaviour()

{

if (transform.parent == null)

return null;

GameObject p = transform.parent.gameObject;

while (p != null)

{

ImageTargetBehaviour itb = p.GetComponent<ImageTargetBehaviour>();

if (itb != null)

{

return itb;

}

if (p.transform.parent == null)

{

// Not found:

return null;

}

p = p.transform.parent.gameObject;

}

// Not found:

return null;

}

#endregion // PUBLIC_METHODS

#region EDITOR_INTERFACE_IMPLEMENTATION

// Initializes the Virtual Button name. Not allowed after runtime object has been created.

bool IEditorVirtualButtonBehaviour.SetVirtualButtonName(string virtualButtonName)

{

if (mVirtualButton == null)

{

mName = virtualButtonName;

return true;

}

return false;

}

VirtualButton.Sensitivity IEditorVirtualButtonBehaviour.SensitivitySetting

{

get { return mSensitivity; }

}

// sets the sensitivity. At runtime the VirtualButton object should be used to change sensibility.

bool IEditorVirtualButtonBehaviour.SetSensitivitySetting(VirtualButton.Sensitivity sensibility)

{

if (mVirtualButton == null)

{

mSensitivity = sensibility;

mSensitivityDirty = true;

return true;

}

return false;

}

Matrix4x4 IEditorVirtualButtonBehaviour.PreviousTransform

{

get { return mPrevTransform; }

}

bool IEditorVirtualButtonBehaviour.SetPreviousTransform(Matrix4x4 transform)

if (mVirtualButton == null)

{

mPrevTransform = transform;

return true;

}

return false;

}

GameObject IEditorVirtualButtonBehaviour.PreviousParent

{

get { return mPrevParent; }

}

bool IEditorVirtualButtonBehaviour.SetPreviousParent(GameObject parent)

{

if (mVirtualButton == null)

{

mPrevParent = parent;

return true;

}

return false;

}

// Initializes the Virtual Button runtime object void IEditorVirtualButtonBehaviour.InitializeVirtualButton(VirtualButton virtualButton)

{

mVirtualButton = virtualButton;

}

// Sets position and scale in the transform component of the Virtual Button

// game object. The values are calculated from rectangle values (top-left

// and bottom-right corners).

// Returns false if Virtual Button is not child of an Image Target.

bool IEditorVirtualButtonBehaviour.SetPosAndScaleFromButtonArea(Vector2 topLeft, Vector2 bottomRight)

{

// Error if we don't have an image target as a root:

ImageTargetBehaviour itb = this.GetImageTargetBehaviour();

if (itb == null)

{

return false;

}

float itScale = itb.transform.lossyScale[0];

Vector2 pos = (topLeft + bottomRight) * 0.5f;

Vector2 scale = new Vector2(bottomRight[0] - topLeft[0],

topLeft[1] - bottomRight[1]);

Vector3 vbPosITSpace =

new Vector3(pos[0] / itScale, VirtualButtonBehaviour.TARGET_OFFSET, pos[1] / itScale);

Vector3 vbScaleITSpace =

new Vector3(scale[0],

(scale[0] + scale[1]) * 0.5f,

scale[1]);

this.transform.position = itb.transform.TransformPoint(vbPosITSpace);

// Image Target scale is canceled out (included in both scales)

this.transform.localScale =

vbScaleITSpace / this.transform.parent.lossyScale[0];

// Done:

return true;

}

#endregion // EDITOR_INTERFACE_IMPLEMENTATION

#region UNITY_MONOBEHAVIOUR_METHODS

// Overriding standard Unity MonoBehaviour methods.

void LateUpdate()

{

// Update the button pose:

if (UpdatePose())

{

// Area has changed, update the QCAR trackable:

UpdateAreaRectangle();

}

// Update the sensitivity of the button if it has changed since the

// last update:

if (mSensitivityDirty)

{

if (UpdateSensitivity())

{

mSensitivityDirty = false;

}

}

}

void OnDisable()

{

if (QCARRuntimeUtilities.IsQCAREnabled())

{

if (mPreviouslyEnabled != enabled)

{

mPreviouslyEnabled = enabled;

UpdateEnabled();

}

// Trigger the appropriate callback if there was state change:

if (mPressed && mHandlers != null)

{

foreach (IVirtualButtonEventHandler handler in mHandlers)

{

handler.OnButtonReleased(this);

}

}

// Cache pressed state:

mPressed = false;

}

}

void OnDestroy()

{

if (Application.isPlaying)

{

if (mUnregisterOnDestroy)

{

ImageTargetBehaviour itb = GetImageTargetBehaviour();

if (itb != null)

itb.ImageTarget.DestroyVirtualButton(mVirtualButton);

}

}

}

#endregion // UNITY_MONOBEHAVIOUR_METHODS

#region PRIVATE_METHODS

private static bool Equals(Vector2 vec1, Vector2 vec2, float threshold)

{

Vector2 diff = vec1 - vec2;

return (Math.Abs(diff.x) < threshold) && (Math.Abs(diff.y) < threshold);

}

#endregion // PRIVATE_METHODS

}

2. Скрипт управления виртуальным объектом

using UnityEngine;

/// <summary>

/// Скрипт объявляющий VirtualButton interface и

/// определяет soccer ball логику.

/// </summary>

public class VBSoccerballEventHandler: MonoBehaviour,

IVirtualButtonEventHandler

{

#region PRIVATE_MEMBER_VARIABLES

private GameObject mSoccerball;

private bool mIsRolling = false;

private float mTimeRolling = 0.0f;

private float mForce = 0.4f;

#endregion // PRIVATE_MEMBER_VARIABLES

#region PUBLIC_METHODS

/// <summary>

/// Вызывается в начальный момент нажатия VirtualButton:

/// </summary>

public void OnButtonPressed(VirtualButtonBehaviour vb)

{

Debug.Log("OnButtonPressed");

KickSoccerball();

}

/// <summary>

/// Вызывается сразу после отпускания кнопки:

/// </summary>

public void OnButtonReleased(VirtualButtonBehaviour vb)

{

Debug.Log("OnButtonReleased");

}

#endregion // PUBLIC_METHODS

#region UNTIY_MONOBEHAVIOUR_METHODS

void Start()

{

// Получаем дескриптор объекта Soccerball

mSoccerball = transform.FindChild("soccerball").gameObject;

// Регестрируем с virtual buttons TrackableBehaviour

VirtualButtonBehaviour vb =

GetComponentInChildren<VirtualButtonBehaviour>();

if (vb)

{

vb.RegisterEventHandler(this);

}

// Подгонка размеров под метку

mForce *= transform.localScale.x;

}

void Update()

{

mTimeRolling += Time.deltaTime;

// Замендление шара

if (mIsRolling && mTimeRolling > 1.0f &&

mSoccerball.rigidbody.velocity.magnitude < 5)

{

mSoccerball.rigidbody.Sleep();

mIsRolling = false;

}

}

#endregion // UNTIY_MONOBEHAVIOUR_METHODS

#region PRIVATE_METHODS

/// <summary>

/// Толчок мяча в случайном направлении

/// </summary>

private void KickSoccerball()

{

// Получаем границы метки

Bounds targetBounds = this.collider.bounds;

Rect targetRect = new Rect( -targetBounds.extents.x,

-targetBounds.extents.z,

targetBounds.size.x,

targetBounds.size.z);

// Определяем направление толчка с учетом того, что он должен остаться на метке

Vector2 randomDir = new Vector2();

for (int i = 0; i < 20; i++)

{

randomDir = Random.insideUnitCircle.normalized;

// возвращает позицию мяча

Vector3 pos = mSoccerball.transform.localPosition *

this.transform.localScale.x;

// Оценка конечного положения

Vector2 finalPos = new Vector2(pos.x, pos.z) +

randomDir * mForce * 1.5f;

if (targetRect.Contains(finalPos))

{

break;

}

// Направление движения

Vector3 kickDir = new Vector3(randomDir.x, 0, randomDir.y).normalized;

// Вращение мяча в правильном направлении

Vector3 torqueDir = Vector3.Cross(Vector3.up, kickDir).normalized;

mSoccerball.rigidbody.AddForce(kickDir * mForce,

ForceMode.VelocityChange);

mSoccerball.rigidbody.AddTorque(torqueDir * mForce,

ForceMode.VelocityChange);

mIsRolling = true;

mTimeRolling = 0.0f;

}

#endregion // PRIVATE_METHODS

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.