GART – набор инструментов географической расширенной реальности для Windows Phone 7.1(5)
В сегодняшнем проекте демонстрируются мои любимые новые возможности, доступные в Windows Phone 7.1(5)* – как внести расширенную реальность в ваши приложения «реального мира». Мы еще увидим демонстрации и примеры, но сегодня остановимся на инструментарии расширенной реальности (Augmented Reality, AR), который добавляет AR к географическим приложениям.
Вообразите, что вы находитесь около вереницы ресторанов и пытаетесь решить куда пойти. Уверен, что вы можете заглянуть в каждый, но который из них самый клевый? Вместо этого, если у вас в руках мобильный телефон, вы наводите его на ресторан и видите всплывающий рейтинг. Затем вы поворачиваетесь, и каждый ресторан, находящийся на виду, показывает свой рейтинг. Сегодня вот что клево…
И это то, о чем мы будем говорить сегодня… Приложения, которые делают это и инструменты, которые делают это возможным.
GART был создан чтобы помочь людям быстро и просто создавать приложения расширенной реальности для Windows Phone.
Он отличается от других наборов для AR тем, что допускает так называемую «Geo AR». Если другие наборы инструментов размещают виртуальные вещи поверх специально напечатанных меток, этот помещает информацию поверх реальных мест в мире вокруг вас. Он делает это, определяя где вы находитесь и в каком направлении смотрите.
Приложения с Geo AR легко писать, поскольку все, что вам нужно – это коллекция объектов с широтами и долготами. Их можно брать отовсюду, например, с результатов поиска ресторанов с помощью Bing, фотопоиска Flickr или из поиска статей в Википедии. Инфраструктура заботится об управлении датчиками и отслеживанием местоположения пользователя относительно реперных точек. Можно показывать, где находятся точки по отношению к пользователю на плане, или где они располагаются через виртуальный объектив в реальный мир.
Пожалуйста имейте в виду, что GART активно использует API Motion, поставляемый с Windows Phone Mango (OS 7.5). Чтобы применять GART требуется устройство с поддержкой движения. Это требование должно включать все устройства, продающиеся с версией 7.5, а также множество существующих устройств с версией 7.0, которые были обновлены до версии 7.5. Эмулятор, к несчастью, в настоящее время не поддерживает Motion API. GART перестает работать, если движение не поддерживается, генерируя событие ARDisplay.ServiceError.
Вот снимок решения:
И небольшой фрагмент кода:
private void searchService_SearchCompleted(object sender, SearchCompletedEventArgs e)
{
// Only proceed if the search was a success
if ((e.Error == null) && (e.Result.ResponseSummary.StatusCode == ResponseStatusCode.Success))
{
ObservableCollection<ARItem> items = new ObservableCollection<ARItem>();
// Clear out existing items
ARDisplay.ARItems.Clear();
// Add new results in
foreach (SearchResultBase result in e.Result.ResultSets[0].Results)
{
// See if this search result is a business result
BusinessSearchResult businessResult = result as BusinessSearchResult;
// If it's a business result, convert it to a restaurant item and add it
if (businessResult != null)
{
// Create the new restaurant item
RestaurantItem ri = new RestaurantItem()
{
Cuisine = BingDataHelper.GetCuisineName(businessResult),
GeoLocation = BingDataHelper.GetGeoCoordinate(businessResult),
Name = businessResult.Name,
Rating = businessResult.UserRating,
};
// Add to the collection
items.Add(ri);
}
}
ARDisplay.ARItems = items;
}
}
Итак, вы взволнованы и готовы добавить GART к своему проекту? Убедитесь, что прочли документацию.
Примеры, включенные в инструментарий
Инструментарий Geo AR содержит два примера, показывающих, как создать приложение с нуля:
- SimpleAR – Просто добавляет метки вокруг вашего случайного местоположения. Посмотрите пункты «Добавить местоположение» и «Очиститьместоположение» в меню приложения.
- BingAR – Использует Bing для отображения информации о близлежащих ресторанах. Выводит название ресторана, тип питания, который в нем предлагается и усредненный пользовательский рейтинг.
Создание приложения с помощью инструментария
Главные шаги для создания любого приложения с помощью этого инструментария следующие:
- Начать новый проект Windows Phone
- Добавить на страницу управляющий элемент ARDisplay
- Добавить представления (или слои) как производные ARDisplay
- В обработчике событий Page.OnNavigatedTo вызвать ARDisplay.StartServices()
- В обработчике событий Page.OnNavigatedFrom вызвать ARDisplay.StopServices()
- Создать коллекцию объектов ARItem (или пользовательского типа, наследующего от ARItem)
- Задать свойство GeoLocation для каждого объекта ARItem относящееся к местоположению в реальном мире.
- Установить ARDisplay.Items равным новой коллекции
- (Необязательно) Задайте стили визуальным элементам, чтобы придать им требуемый внешний вид или представить данные пользователя.
Как работает инструментарий:
ARDisplay – рабочая лошадка решения. Когда вызывается StartServices, ARDisplay принимает заботу о создании AR-сервисов, инициализирует их и подписывается на их события. Когда вызывается StopServices, ARDisplay занимается ликвидацией подписок на сервисы и освобождает их ресурсы. Когда мы произносим «AR-сервисы» мы говорим о фотокамере (для видеопотока фона), местоположении для долготы и широты и движении для ориентации и отклонения. Каждый из этих сервисов может быть индивидуально разрешен или запрещен для приложений, которым он не требуется. Например, можно установить параметр LocationEnabled в значение «FALSE» и установить свойство Location как известное местоположение, когда разработчик трудится дома.
Следующая часть решения содержит индивидуальные представления (или слои), которые могут быть добавлены как производные объекты от ARDisplay.
В настоящее время их четыре:
...
Если вы интересуетесь расширенной реальностью, географическими приложениями или приложениями, использующими встроенную камеру, GART – это то место, с которого стоит начать поиски.
* Благодаря «забавной» нумерации версий Windows Phone Mango, несмотря на то, что внутренняя версия и версия, ассоциированная с SDK – Windows Phone 7.1, но на рынок он выведен как Windows Phone 7.5, поэтому ссылаясь на Mango, я собираюсь использовать обозначение «7.1(5)», пока кто-нибудь не остановит меня…