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

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. Реакция вириального мячика на "толчок"

Похожие статьи




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

Предыдущая | Следующая