WEBVTT

00:00:01.370 --> 00:00:03.465
>> Hey everybody.

00:00:03.465 --> 00:00:04.530
Welcome back.

00:00:04.530 --> 00:00:06.825
We got Sweeky talking about

00:00:06.825 --> 00:00:10.680
Mixed Reality with
Xamarin. Take it away.

00:00:10.680 --> 00:00:13.935
>> Hello, hello. Hi,
everyone, I'm Sweeky.

00:00:13.935 --> 00:00:16.260
I am actually from the
San Francisco office.

00:00:16.260 --> 00:00:18.240
So if anyone is here,

00:00:18.240 --> 00:00:19.800
come by, say hi, I'm
on the fourth floor.

00:00:19.800 --> 00:00:22.110
You can heckle me from the
window on the side here.

00:00:22.110 --> 00:00:25.635
So let me share my screen,

00:00:25.635 --> 00:00:29.230
that should show you my slides.

00:00:31.790 --> 00:00:38.235
All right. I am going to
start sharing my slides now.

00:00:38.235 --> 00:00:42.420
Let's get rid of this little
puppy on the side here.

00:00:42.420 --> 00:00:46.320
Oh, boy. Here we go. Hold on.

00:00:46.320 --> 00:00:49.030
I'm going to do that one more time.

00:00:50.300 --> 00:00:53.460
>> You just want to minimize

00:00:53.460 --> 00:00:57.600
the Skype window as
soon as you get there.

00:00:57.600 --> 00:01:01.845
>> All right. Let's
do this again. Okay.

00:01:01.845 --> 00:01:02.670
>> Minimize that, cool.

00:01:02.670 --> 00:01:03.390
>> Get you out of the way.

00:01:03.390 --> 00:01:05.745
>> All right. We're in business.

00:01:05.745 --> 00:01:08.730
Cool. Welcome everyone.

00:01:08.730 --> 00:01:11.520
This talk is about Mixed Reality with

00:01:11.520 --> 00:01:14.055
Xamarin and Azure Spatial Anchors.

00:01:14.055 --> 00:01:17.190
So I'm Sweeky, I work in Microsoft.

00:01:17.190 --> 00:01:20.250
I'm in the Customer Advisory Team,

00:01:20.250 --> 00:01:23.130
specifically in the Mobile
Customer Advisory Team.

00:01:23.130 --> 00:01:25.980
So what is Xamarin?

00:01:25.980 --> 00:01:27.705
So I know we had a bunch of talks.

00:01:27.705 --> 00:01:30.890
David talked about, and
Maddie did it earlier today.

00:01:30.890 --> 00:01:34.550
But just a quick overview
for everyone who's new,

00:01:34.550 --> 00:01:36.560
who doesn't know what Xamarin is.

00:01:36.560 --> 00:01:40.475
So basically, Xamarin is the
C-Sharp offering from Microsoft.

00:01:40.475 --> 00:01:42.765
It allows you to write C-Sharp code,

00:01:42.765 --> 00:01:45.905
and generate native
iOS and Android apps.

00:01:45.905 --> 00:01:49.220
So you have all the power
of.NET and C-Sharp.

00:01:49.220 --> 00:01:50.570
So you're sharing code.

00:01:50.570 --> 00:01:52.310
You're doing all of
that.NET awesomeness,

00:01:52.310 --> 00:01:56.915
and it gives you great
native iOS and Android apps.

00:01:56.915 --> 00:02:00.920
So what that means is I totally

00:02:00.920 --> 00:02:04.955
stole this slide from Maddie
earlier on. So thanks Maddie.

00:02:04.955 --> 00:02:07.730
But this is what it looks like.

00:02:07.730 --> 00:02:09.410
So you're writing shared code,

00:02:09.410 --> 00:02:12.005
shared logic, and all
of it in C-Sharp,

00:02:12.005 --> 00:02:14.000
and then the output that
we provide to you is

00:02:14.000 --> 00:02:17.470
a native iOS and a
native Android app.

00:02:17.470 --> 00:02:21.810
So again, just how it looks like.

00:02:21.810 --> 00:02:24.830
So you have all the
systems stuff available.

00:02:24.830 --> 00:02:26.510
You have all the native iOS,

00:02:26.510 --> 00:02:28.790
UI kits available to
you to write your apps.

00:02:28.790 --> 00:02:30.920
Similarly, on Android,
you have all of

00:02:30.920 --> 00:02:32.930
the awesomeness from
Android provided to you,

00:02:32.930 --> 00:02:37.740
but you can just access all of
it through C-Sharp. All right.

00:02:37.740 --> 00:02:40.055
So let's get to the
meat of this topic.

00:02:40.055 --> 00:02:42.050
What is Augmented Reality?

00:02:42.050 --> 00:02:43.550
What is Mixed Reality?

00:02:43.550 --> 00:02:46.220
How does all of this
work with Xamarin?

00:02:46.220 --> 00:02:48.665
So what is Augmented Reality?

00:02:48.665 --> 00:02:53.705
So imagine basically that your
camera is a giant canvas.

00:02:53.705 --> 00:02:56.240
So anything it points
to is your canvas,

00:02:56.240 --> 00:02:59.450
and you can throw 3D models at it to

00:02:59.450 --> 00:03:03.830
generate in any space that
is visible to your camera.

00:03:03.830 --> 00:03:06.780
So essentially, in very,

00:03:06.780 --> 00:03:08.640
very simple layman terms,

00:03:08.640 --> 00:03:13.080
in Augmented Reality,
your view frame,

00:03:13.080 --> 00:03:17.140
your view frame that your camera
provides to you is your canvas,

00:03:17.140 --> 00:03:21.710
and you'll be virtually
drawing objects on it within

00:03:21.710 --> 00:03:23.990
this special coordinate
system which is

00:03:23.990 --> 00:03:27.110
relative to your spatial location.

00:03:27.110 --> 00:03:30.500
Now, since we're talking
about augmented reality,

00:03:30.500 --> 00:03:33.380
so AR with mobile applications.

00:03:33.380 --> 00:03:34.880
So we're going to be tapping into

00:03:34.880 --> 00:03:39.170
each native platform's
AR socialization.

00:03:39.170 --> 00:03:42.650
So iOS provides us with
ARKit and SceneKit.

00:03:42.650 --> 00:03:45.470
Android provides us with
ARCore and SceneForm.

00:03:45.470 --> 00:03:47.430
So you'll notice as

00:03:47.430 --> 00:03:49.660
I walk through the demo and
I walk through the code,

00:03:49.660 --> 00:03:52.490
we basically will be
piggybacking off all of

00:03:52.490 --> 00:03:54.800
these amazing native tools already

00:03:54.800 --> 00:03:57.500
provided to us from iOS and Android,

00:03:57.500 --> 00:03:58.700
and we're just adding

00:03:58.700 --> 00:04:03.025
our own little magic and goodness
to make it all work together.

00:04:03.025 --> 00:04:07.425
So what is Azure Spatial Anchors
then you'll be asking me.

00:04:07.425 --> 00:04:08.790
I mean, sure, you already have

00:04:08.790 --> 00:04:11.900
all these native options
from each platform.

00:04:11.900 --> 00:04:13.940
Why do you need Azure
Spatial Anchors?

00:04:13.940 --> 00:04:15.590
Well, that's the cool part.

00:04:15.590 --> 00:04:18.440
So Azure Spatial Anchors lets you

00:04:18.440 --> 00:04:23.480
share that spatial space that
you're creating through the Cloud.

00:04:23.480 --> 00:04:26.510
So basically, my idea of
this whole thing was I

00:04:26.510 --> 00:04:29.225
wanted to make my own
virtual treasure hunt.

00:04:29.225 --> 00:04:30.800
I love puzzles, I love games,

00:04:30.800 --> 00:04:32.120
I love escape rooms.

00:04:32.120 --> 00:04:34.145
So I was like, "Hey, I want to make

00:04:34.145 --> 00:04:37.110
an escape room virtual
puzzle for my friends."

00:04:37.110 --> 00:04:38.880
So I'm like, "sure, why not?"

00:04:38.880 --> 00:04:40.775
Let me use Azure Spatial
Anchors for that.

00:04:40.775 --> 00:04:42.650
So the idea is you

00:04:42.650 --> 00:04:44.980
create an instance of your
Azure Spatial Anchors,

00:04:44.980 --> 00:04:47.270
you draw what is called anchor.

00:04:47.270 --> 00:04:49.100
So basically, those spatial

00:04:49.100 --> 00:04:52.165
points and that's where
your objects get drawn,

00:04:52.165 --> 00:04:54.170
those 3D objects that
I was talking about.

00:04:54.170 --> 00:04:57.620
Then you can share that
space with anyone else,

00:04:57.620 --> 00:04:59.105
you can have it access controlled,

00:04:59.105 --> 00:05:02.900
and anyone, your friends
can then see what you are

00:05:02.900 --> 00:05:06.860
seeing through their
respective cameras.

00:05:06.860 --> 00:05:09.200
So the coolest part about

00:05:09.200 --> 00:05:12.680
this whole thing is Azure Spatial
Anchors as a service is amazing.

00:05:12.680 --> 00:05:15.470
They have support for
native iOS, native Android.

00:05:15.470 --> 00:05:17.690
You can write Unity apps using it.

00:05:17.690 --> 00:05:19.900
You can write an
HoloLens app using it.

00:05:19.900 --> 00:05:22.175
You can also write it using Xamarin.

00:05:22.175 --> 00:05:25.725
I love Xamarin, I want to
use Azure Spatial Anchor.

00:05:25.725 --> 00:05:27.870
So this is a perfect solution for me.

00:05:27.870 --> 00:05:30.170
Also, other cool stuff
that we'll be doing

00:05:30.170 --> 00:05:32.375
in this demo is we'll
be using Cosmos DB

00:05:32.375 --> 00:05:34.070
and an Azure App Services to

00:05:34.070 --> 00:05:36.920
drive some little bit of
data that we have to store,

00:05:36.920 --> 00:05:39.600
to help that sharing
happened between devices.

00:05:39.600 --> 00:05:44.090
It's a future feature I'm
going to add at some point,

00:05:44.090 --> 00:05:45.830
but it can also add

00:05:45.830 --> 00:05:49.310
login-based control to the
system if you want to.

00:05:49.310 --> 00:05:52.025
So it's a really powerful tool

00:05:52.025 --> 00:05:54.595
and it's available to
everyone right now.

00:05:54.595 --> 00:05:56.955
So let's move on.

00:05:56.955 --> 00:06:00.410
So what I'm going to be demoing
today, like I mentioned,

00:06:00.410 --> 00:06:01.895
since I love puzzles,

00:06:01.895 --> 00:06:04.070
it's a game that I got Xamagon Hunt.

00:06:04.070 --> 00:06:07.085
So it's basically like a
virtual treasure hunt.

00:06:07.085 --> 00:06:08.780
If you want to see
the code right now,

00:06:08.780 --> 00:06:09.935
you can just go onto my GitHub.

00:06:09.935 --> 00:06:12.785
I'll be sharing all the links
again right at the end.

00:06:12.785 --> 00:06:14.605
So Xamagon Hunt.

00:06:14.605 --> 00:06:17.105
So the idea being there is

00:06:17.105 --> 00:06:20.555
everyone who's playing the
game that gets the app,

00:06:20.555 --> 00:06:24.750
and you walk around and
search for my lost items,

00:06:24.750 --> 00:06:28.165
and so find them for me,
as simple as it sounds.

00:06:28.165 --> 00:06:32.940
So what drives this whole app?

00:06:32.940 --> 00:06:35.450
So there's three basic parts of it.

00:06:35.450 --> 00:06:37.100
So there's the Client App.

00:06:37.100 --> 00:06:40.310
That's what you'd be giving
to anyone playing the game.

00:06:40.310 --> 00:06:43.625
So they'd be using that to
hunt for your virtual objects.

00:06:43.625 --> 00:06:46.370
There's the Admin App that
drives the whole, "Hey,

00:06:46.370 --> 00:06:48.260
this is where I'm going to drop or

00:06:48.260 --> 00:06:51.275
hide my virtual objects
for everyone to find.

00:06:51.275 --> 00:06:53.330
Then there's the Web
Backend Services of course,

00:06:53.330 --> 00:06:57.470
which includes the Azure Spatial
Anchors service like it says,

00:06:57.470 --> 00:07:00.080
the Cosmos DB servers that drives

00:07:00.080 --> 00:07:03.650
the whole sharing and storage
of the different anchor points.

00:07:03.650 --> 00:07:05.480
We'll be looking at all
it, so I'm going to

00:07:05.480 --> 00:07:07.535
go deeper into each of these buckets.

00:07:07.535 --> 00:07:11.190
So what does the client
in Admin App look like?

00:07:11.190 --> 00:07:14.270
So if you go look at the
code base itself right now,

00:07:14.270 --> 00:07:17.345
it is super super first disclaimer.

00:07:17.345 --> 00:07:18.965
It's completely edited off

00:07:18.965 --> 00:07:22.410
the current Xamarin tutorial
for Spatial Anchors.

00:07:22.410 --> 00:07:23.795
That's the beauty of this whole demo.

00:07:23.795 --> 00:07:25.400
I just wanted to show to everyone

00:07:25.400 --> 00:07:27.245
that if you want to
make your own game,

00:07:27.245 --> 00:07:28.520
it's not hard at all.

00:07:28.520 --> 00:07:30.590
The samples are a
great starting point.

00:07:30.590 --> 00:07:32.390
All you have to do is edit it to

00:07:32.390 --> 00:07:35.300
your need and you're good
to go. It's amazing.

00:07:35.300 --> 00:07:39.350
So the Client and
Admin App right now,

00:07:39.350 --> 00:07:41.120
the way it's structured
is of course you have

00:07:41.120 --> 00:07:43.400
the Spatial Anchors Nuget
because you need to use

00:07:43.400 --> 00:07:45.935
that to talk to the
Spatial Anchor Service.

00:07:45.935 --> 00:07:48.335
We're going to be
writing it with Xamarin.

00:07:48.335 --> 00:07:51.710
We are going to be using
Azure web services to host

00:07:51.710 --> 00:07:53.420
the API that is going to

00:07:53.420 --> 00:07:55.985
talk to the Xamarin app
and the Spatial Anchors,

00:07:55.985 --> 00:07:58.610
and the Cosmos DB to
store some extra data

00:07:58.610 --> 00:08:01.775
that we need to drive the app logic.

00:08:01.775 --> 00:08:04.280
So the next thing you'll see
that I have broken it up

00:08:04.280 --> 00:08:06.365
into Xamarin iOS and Xamarin Android.

00:08:06.365 --> 00:08:11.730
So due to the nature of this app
and the fact that it's very,

00:08:11.730 --> 00:08:14.420
very tied to the native ARKits

00:08:14.420 --> 00:08:16.800
and ARCore provided by each platform,

00:08:16.800 --> 00:08:18.740
I decided to go with using

00:08:18.740 --> 00:08:22.775
Xamarin iOS and Xamarin Android
natively to write these apps.

00:08:22.775 --> 00:08:25.820
We could totally have gone with using

00:08:25.820 --> 00:08:28.730
Xamarin Forms and done
native embedding.

00:08:28.730 --> 00:08:31.970
I just found it easier
just to maintain them

00:08:31.970 --> 00:08:33.380
separately and just not go into

00:08:33.380 --> 00:08:35.910
the headache of
embedding it right now.

00:08:35.960 --> 00:08:38.730
Each iOS and Android

00:08:38.730 --> 00:08:41.250
platform further goes out
as I mentioned before.

00:08:41.250 --> 00:08:45.190
So we'll be tapping into
ARKit and SceneKit for iOS,

00:08:45.190 --> 00:08:49.945
and we'll be tapping into ARCore
and SceneForm for Android.

00:08:49.945 --> 00:08:52.590
So that's the high-level
structure of how

00:08:52.590 --> 00:08:56.225
the Client and the
Admin App looks like.

00:08:56.225 --> 00:08:58.850
Let's see what the web
services look like.

00:08:58.850 --> 00:09:00.650
So in Azure, we are

00:09:00.650 --> 00:09:02.945
going to be setting up three
different types of services.

00:09:02.945 --> 00:09:04.760
So the first off, you'd
have to obviously

00:09:04.760 --> 00:09:07.250
initialize your Spatial
Anchor Service.

00:09:07.250 --> 00:09:09.815
The system is currently in preview,

00:09:09.815 --> 00:09:12.890
and therefore, it is
currently free to use.

00:09:12.890 --> 00:09:15.200
The second is a Cosmos DB,

00:09:15.200 --> 00:09:17.345
so we're going to be
using Azure Tables.

00:09:17.345 --> 00:09:20.390
So there's two purpose to it.

00:09:20.390 --> 00:09:22.815
The first part is we need to store

00:09:22.815 --> 00:09:25.330
the unique key for

00:09:25.330 --> 00:09:27.920
anchor so that every object
that you're creating,

00:09:27.920 --> 00:09:29.990
we're going to call that an anchor.

00:09:29.990 --> 00:09:31.850
So each anchor that you create,

00:09:31.850 --> 00:09:34.280
there is a unique key
associated with it.

00:09:34.280 --> 00:09:36.185
So that's going to get
stored in these tables.

00:09:36.185 --> 00:09:37.910
Then the rest of the logic that

00:09:37.910 --> 00:09:40.645
drives my game is tied
to the Azure Table.

00:09:40.645 --> 00:09:43.970
We're going to create an
Azure App Service which will

00:09:43.970 --> 00:09:47.590
have the API that lets
me talk to this table.

00:09:47.590 --> 00:09:49.805
Yeah. That's literally it.

00:09:49.805 --> 00:09:52.580
That's all you need to
get started with a very,

00:09:52.580 --> 00:09:57.815
very simple and basic version
of a simple treasure hunt.

00:09:57.815 --> 00:10:00.470
So what does it look like?

00:10:00.470 --> 00:10:02.330
So I went down through

00:10:02.330 --> 00:10:05.255
different paths in figuring
out how to do this demo.

00:10:05.255 --> 00:10:07.715
I have both paths ready.

00:10:07.715 --> 00:10:10.955
Right now, what I'm going to
show is a pre-recorded version

00:10:10.955 --> 00:10:14.000
of the Admin App drawing an anchor,

00:10:14.000 --> 00:10:15.845
and the Client app finding an app.

00:10:15.845 --> 00:10:18.560
If we have time at the
end of the presentation,

00:10:18.560 --> 00:10:20.480
I have my phone hooked up,

00:10:20.480 --> 00:10:23.090
and in this tiny little phone
booth that I'm sitting in,

00:10:23.090 --> 00:10:25.455
there is one anchor right at my feet.

00:10:25.455 --> 00:10:27.440
If you want, I can
totally show that to you

00:10:27.440 --> 00:10:29.375
live and we can find
that anchor right now.

00:10:29.375 --> 00:10:32.350
So let's have a look at what
the Admin App looks like.

00:10:32.350 --> 00:10:34.180
So the Admin Apps point,

00:10:34.180 --> 00:10:35.795
let me get it displaying,

00:10:35.795 --> 00:10:37.820
the Admin Apps point basically is to

00:10:37.820 --> 00:10:40.525
allow you a way to
drop these anchors.

00:10:40.525 --> 00:10:43.030
So this is AR.

00:10:43.030 --> 00:10:44.670
So drop me anchors,

00:10:44.670 --> 00:10:46.085
a bunch of pirate jokes.

00:10:46.085 --> 00:10:47.840
What you're looking at is me dropping

00:10:47.840 --> 00:10:50.330
an anchor near my desk
in the SF office.

00:10:50.330 --> 00:10:52.850
I put it in a little
description for the anchor

00:10:52.850 --> 00:10:55.370
being dropped because the
way my game currently works,

00:10:55.370 --> 00:10:57.710
the way I have architected
it is I provide you

00:10:57.710 --> 00:11:00.565
a location associated
with an id number.

00:11:00.565 --> 00:11:02.480
When you go and look for that anchor,

00:11:02.480 --> 00:11:04.970
you have to put in that ID
number that you're looking for.

00:11:04.970 --> 00:11:06.980
So Anchors Away friends,

00:11:06.980 --> 00:11:08.840
we have our first anchors dropped.

00:11:08.840 --> 00:11:12.680
Let's move on and check out
what the Client app looks like.

00:11:12.680 --> 00:11:14.810
So in the Client app, this is what

00:11:14.810 --> 00:11:17.720
you'd be sharing with your friends
who want to play the game.

00:11:17.720 --> 00:11:20.405
So they have to go in,

00:11:20.405 --> 00:11:22.865
so let me play this video
so you can have a look.

00:11:22.865 --> 00:11:25.295
So they will basically be going in,

00:11:25.295 --> 00:11:27.530
getting a list of all
the potential anchors.

00:11:27.530 --> 00:11:29.960
So we're going to look for the
sixth one that's near my desk,

00:11:29.960 --> 00:11:32.920
which we just dropped
in the last video.

00:11:32.920 --> 00:11:34.980
Once they're in the space,

00:11:34.980 --> 00:11:38.135
it's going to generate the Anchor
for them and they can find it.

00:11:38.135 --> 00:11:41.990
So super simple, super easy.

00:11:41.990 --> 00:11:44.240
>> Just logically, if you just

00:11:44.240 --> 00:11:45.710
think about it very,
very straightforward,

00:11:45.710 --> 00:11:47.810
there's nothing
complicated going on over

00:11:47.810 --> 00:11:52.130
here. This is not
what I want to show.

00:11:52.130 --> 00:11:53.660
Let me show you what
the code looks like.

00:11:53.660 --> 00:11:57.660
I'm going to switch
over to Visual Studio.

00:11:57.700 --> 00:12:00.845
If you clone the repo right now,

00:12:00.845 --> 00:12:04.490
you'll basically see this solution
structure when you open it up.

00:12:04.490 --> 00:12:06.530
Like I said, the three main buckets.

00:12:06.530 --> 00:12:07.745
We have a Web Service,

00:12:07.745 --> 00:12:09.785
the Client App and the Admin App.

00:12:09.785 --> 00:12:12.290
If you also go and clone in

00:12:12.290 --> 00:12:16.220
the Azure spatial anchor
Xamarin sample apps,

00:12:16.220 --> 00:12:17.600
they look very similar.

00:12:17.600 --> 00:12:19.925
It look a lot similar to
what I'm showing right now.

00:12:19.925 --> 00:12:21.065
Because as I said,

00:12:21.065 --> 00:12:22.430
I want to show you that it's very,

00:12:22.430 --> 00:12:26.735
very easy to get started to
make simple games like this.

00:12:26.735 --> 00:12:29.195
I basically just modified

00:12:29.195 --> 00:12:33.050
the sample code right now to
make it work for this game.

00:12:33.050 --> 00:12:35.645
The first things you
will becoming into do

00:12:35.645 --> 00:12:38.015
is in the web sharing service.

00:12:38.015 --> 00:12:39.290
You'll have to come in and put in

00:12:39.290 --> 00:12:41.540
your Cosmos DB connection string.

00:12:41.540 --> 00:12:45.365
That's all the setup you have to
do to get your Web Service going.

00:12:45.365 --> 00:12:48.995
Right-click, hit "Publish",
published to Azure.

00:12:48.995 --> 00:12:51.635
You know the process from here.

00:12:51.635 --> 00:12:54.425
Let's have a look at the two
important files that I think

00:12:54.425 --> 00:12:57.530
are important in this Web Service.

00:12:57.530 --> 00:13:01.085
The first one I'd like to show
you is the Anchor Controller.

00:13:01.085 --> 00:13:06.665
This is basically what drives that
API that I was talking about.

00:13:06.665 --> 00:13:10.745
There's "Get Anchor Async"
with the anchor number.

00:13:10.745 --> 00:13:13.865
This is the way the logic
is currently driven.

00:13:13.865 --> 00:13:15.800
You provide it with an anchor number.

00:13:15.800 --> 00:13:17.105
Like in the video,

00:13:17.105 --> 00:13:21.200
I dropped anchor number six and
I search for anchor number six.

00:13:21.200 --> 00:13:22.910
Right now, I don't have it in

00:13:22.910 --> 00:13:25.640
a very complex state
where just giving

00:13:25.640 --> 00:13:28.145
a map coordinate or just
getting into a space

00:13:28.145 --> 00:13:31.565
finds the anchor for you
like how Pokemon Go works,

00:13:31.565 --> 00:13:36.515
but trust me, future versions of
this app will definitely have it.

00:13:36.515 --> 00:13:40.790
Then another important
one is the Post Async.

00:13:40.790 --> 00:13:43.940
This is basically what
the admin app taps into,

00:13:43.940 --> 00:13:47.120
and this is what lets you
post your description

00:13:47.120 --> 00:13:50.930
and the anchor key to
your Cosmos DB database.

00:13:50.930 --> 00:13:55.795
That's literally the only important
file in this whole anchor,

00:13:55.795 --> 00:13:58.225
in the sharing web service bit,

00:13:58.225 --> 00:13:59.905
super easy, super simple.

00:13:59.905 --> 00:14:02.170
Like I said, it's exactly
the same code from

00:14:02.170 --> 00:14:06.145
the sharing service in the spatial
anchors tutorial right now.

00:14:06.145 --> 00:14:09.350
Hazara, thank you
spatial anchors' team.

00:14:09.460 --> 00:14:12.290
The next bit I am going to show is,

00:14:12.290 --> 00:14:13.910
let me collapse this,

00:14:13.910 --> 00:14:15.770
we don't need you right now.

00:14:15.770 --> 00:14:19.025
I'm going to open up
this zymogenhunt.com.

00:14:19.025 --> 00:14:24.440
Basically, what's in this common
folder is you have to come in

00:14:24.440 --> 00:14:26.630
here and obviously set up
your account key and your

00:14:26.630 --> 00:14:29.300
service URL for that API etc.

00:14:29.300 --> 00:14:30.680
The tutorial walks you through this.

00:14:30.680 --> 00:14:34.325
It's super easy to get
this all set up and going.

00:14:34.325 --> 00:14:38.315
The next bit is basically
these three files.

00:14:38.315 --> 00:14:42.605
These are basically just
wrappers around that URL,

00:14:42.605 --> 00:14:45.770
the API basically to send
and receive anchors.

00:14:45.770 --> 00:14:48.290
All of our Xamarin apps are going

00:14:48.290 --> 00:14:50.765
to interact with this
one common project.

00:14:50.765 --> 00:14:53.540
Hey, look at that
awesomeness of Xamarin.

00:14:53.540 --> 00:14:56.300
It has the three basic file once.

00:14:56.300 --> 00:14:57.680
The actual sharing service,

00:14:57.680 --> 00:15:00.530
one sends the anchor and
one receives the response.

00:15:00.530 --> 00:15:03.155
Just simple basic
HTTP wrappers around

00:15:03.155 --> 00:15:08.465
that cool-looking web service
that we have set up over here.

00:15:08.465 --> 00:15:12.710
Let's go into where the
important stuff comes in.

00:15:12.710 --> 00:15:15.725
I'm going to close
this. Let's take a look

00:15:15.725 --> 00:15:18.680
at the actual Android and iOS apps.

00:15:18.680 --> 00:15:22.430
These two folders are the two
apps that drive the game.

00:15:22.430 --> 00:15:27.020
The Admin App is the one that I
used to drop me anchors MIDIs.

00:15:27.020 --> 00:15:28.790
The Hunt app is the one that you

00:15:28.790 --> 00:15:30.710
share with your friends
playing the game.

00:15:30.710 --> 00:15:35.030
That's the one you use
to find the anchors.

00:15:35.030 --> 00:15:38.600
Let's take a look at the drop logic.

00:15:38.600 --> 00:15:41.060
I'm going to open up XamagonDrop.

00:15:41.060 --> 00:15:44.940
Let's look at what we have here.

00:15:45.370 --> 00:15:48.080
In this, there is a base,

00:15:48.080 --> 00:15:50.270
it's like a demo base controller that

00:15:50.270 --> 00:15:55.445
drives the ViewController
that I have right now.

00:15:55.445 --> 00:15:57.635
In this, the most important thing is,

00:15:57.635 --> 00:16:01.355
notice over here it's
called the ARSCNView.

00:16:01.355 --> 00:16:02.630
This is what I was talking about.

00:16:02.630 --> 00:16:05.060
This is the frame

00:16:05.060 --> 00:16:06.530
that in the demo if you

00:16:06.530 --> 00:16:08.315
notice the little dots
that were appearing,

00:16:08.315 --> 00:16:11.570
that's driven by this
basic frame. That's it.

00:16:11.570 --> 00:16:14.660
This is the camera provided
by ARKit and that's

00:16:14.660 --> 00:16:16.430
[inaudible] around the screen and

00:16:16.430 --> 00:16:18.470
it grabs all of the features for you.

00:16:18.470 --> 00:16:20.390
To set this up,

00:16:20.390 --> 00:16:23.795
you just initialize a new ARSCNView.

00:16:23.795 --> 00:16:27.140
Again, nothing special has
to be set up for this.

00:16:27.140 --> 00:16:30.045
You have a couple of delegate
functions that you need to set up.

00:16:30.045 --> 00:16:32.940
Let's take a look at what
those basically are.

00:16:32.940 --> 00:16:36.560
This is basically just the logic

00:16:36.560 --> 00:16:39.440
that drives the scene view
to just tell it that,

00:16:39.440 --> 00:16:42.515
"Hey, grab each current scene,

00:16:42.515 --> 00:16:44.795
and just process each frame."

00:16:44.795 --> 00:16:46.640
It's the one that collects

00:16:46.640 --> 00:16:49.640
all the data points
that would be needed by

00:16:49.640 --> 00:16:51.440
the Cloud anchor service to

00:16:51.440 --> 00:16:55.470
update and understand where
to draw your anchors etc.

00:16:55.510 --> 00:16:58.745
The next bit that's
important in this.

00:16:58.745 --> 00:17:00.455
Let's scroll down a bit.

00:17:00.455 --> 00:17:01.805
Also awesome hack.

00:17:01.805 --> 00:17:04.400
I always forget what are important
parts of a code to show.

00:17:04.400 --> 00:17:07.670
So I just drop breakpoints
wherever I think is important.

00:17:07.670 --> 00:17:11.520
The next thing is what is.

00:17:12.850 --> 00:17:16.490
This is the line that
starts and configures

00:17:16.490 --> 00:17:19.790
the ARkit natively in iOS it says.

00:17:19.790 --> 00:17:23.480
We had the view set up and this
basically tells AR system that,

00:17:23.480 --> 00:17:27.215
"Hey, you can start
tracking the system now.

00:17:27.215 --> 00:17:29.870
This is the plane
and just go for it."

00:17:29.870 --> 00:17:33.020
This starts this session and
gets all of the magic going.

00:17:33.020 --> 00:17:35.030
Again, you don't need
to really understand

00:17:35.030 --> 00:17:37.160
too much about the system unless
you're doing something really,

00:17:37.160 --> 00:17:38.450
really complicated but for

00:17:38.450 --> 00:17:42.080
a very simple version as
the App is right now,

00:17:42.080 --> 00:17:44.345
this is all you
basically need to know.

00:17:44.345 --> 00:17:47.045
Let's scroll down a little bit more.

00:17:47.045 --> 00:17:48.965
This little section over here,

00:17:48.965 --> 00:17:51.350
like my awesome helper
comment tells me,

00:17:51.350 --> 00:17:54.905
this is what we use to talk
to Azure spatial anchors.

00:17:54.905 --> 00:17:58.220
Talking to Azure spatial anchors
is pretty much straightforward.

00:17:58.220 --> 00:18:00.680
Once you have the account
key and the ID set up,

00:18:00.680 --> 00:18:04.100
you basically have a couple of
delegate events to hook up.

00:18:04.100 --> 00:18:06.590
Things like what happens
when an anchor is located,

00:18:06.590 --> 00:18:10.445
what happens when your
anchor session is completed.

00:18:10.445 --> 00:18:13.580
All you basically do is
to start the session.

00:18:13.580 --> 00:18:15.725
Initialize it, give it

00:18:15.725 --> 00:18:19.820
the values that it needs
and just start the session.

00:18:19.820 --> 00:18:21.470
That's basically it.

00:18:21.470 --> 00:18:25.250
There's nothing else complicated

00:18:25.250 --> 00:18:27.770
you need to provide to
spatial anchors itself.

00:18:27.770 --> 00:18:30.785
All of this comes from the
handy little NuGet package.

00:18:30.785 --> 00:18:33.560
That is just the one small reference

00:18:33.560 --> 00:18:35.375
you need to add here,
boom, and that's it.

00:18:35.375 --> 00:18:38.660
You're done. Then let's see.

00:18:38.660 --> 00:18:42.080
The last bit that's
happening over here is

00:18:42.080 --> 00:18:46.055
this is how we draw that box
that you see on the screen.

00:18:46.055 --> 00:18:48.635
Again, there's not too
much rocket science

00:18:48.635 --> 00:18:51.030
basically that's happening over here.

00:18:51.370 --> 00:18:56.240
All it's basically doing is
grabbing a visual anchor location,

00:18:56.240 --> 00:19:01.460
and then we create a CN box which
is inbuilt geometric shapes.

00:19:01.460 --> 00:19:03.260
You have basic geometric shapes like

00:19:03.260 --> 00:19:05.450
boxes and circles provided for you.

00:19:05.450 --> 00:19:08.450
If you want to create
something more complex,

00:19:08.450 --> 00:19:11.930
you can embed your own
personal 3D models

00:19:11.930 --> 00:19:15.300
that you want to
render on the screen.

00:19:16.120 --> 00:19:19.175
I just set up the
box, give it a color,

00:19:19.175 --> 00:19:22.280
and they don't give it the
visual anchor position

00:19:22.280 --> 00:19:25.895
to generate the box in and that's
it. That's all you have to do.

00:19:25.895 --> 00:19:30.275
That's all the place
cube, it's doing.

00:19:30.275 --> 00:19:33.560
The other two things
to look over here.

00:19:33.560 --> 00:19:37.190
Like I mentioned, this
is the Admin App.

00:19:37.190 --> 00:19:41.525
This primary function of this
app is just to create anchors.

00:19:41.525 --> 00:19:44.690
The way the anchor creation
happens is right over here.

00:19:44.690 --> 00:19:48.335
All you're doing is basically

00:19:48.335 --> 00:19:51.110
checking if the local
anchor is not null and

00:19:51.110 --> 00:19:55.070
its found location and all of

00:19:55.070 --> 00:19:56.570
the information that it needs of

00:19:56.570 --> 00:19:59.855
the scanned space and the
actual anchor location.

00:19:59.855 --> 00:20:05.765
All we do is we send it over
to our spatial anchor session,

00:20:05.765 --> 00:20:07.820
clear Cloud, CreateAnchorAsync
and we just give

00:20:07.820 --> 00:20:10.190
it the Cloud anchor
parameter. That's it.

00:20:10.190 --> 00:20:12.800
Simple. Super easy.
Super straightforward.

00:20:12.800 --> 00:20:14.570
Very, very easy to do.

00:20:14.570 --> 00:20:17.735
This is basically what
creates the anchor

00:20:17.735 --> 00:20:20.855
for the admin apps. This
is all we are doing.

00:20:20.855 --> 00:20:26.675
Since I showed you how the iOS
stuff works for dropping an anchor,

00:20:26.675 --> 00:20:28.310
let's quickly take a look at

00:20:28.310 --> 00:20:31.475
the client code on how
to hunt for the anchor.

00:20:31.475 --> 00:20:32.765
This time I'm going to show you how

00:20:32.765 --> 00:20:34.880
Android works because
that's also very,

00:20:34.880 --> 00:20:36.365
very interesting to see.

00:20:36.365 --> 00:20:38.255
Let me close this up.

00:20:38.255 --> 00:20:41.390
Now, we are in this
folder, the client folder.

00:20:41.390 --> 00:20:46.610
The main purpose of this
app is just to locate.

00:20:46.610 --> 00:20:49.040
We will be looking at how

00:20:49.040 --> 00:20:52.020
we're going to locate
those anchor points.

00:20:54.430 --> 00:20:58.970
What was I looking for?
This is the activity in

00:20:58.970 --> 00:21:03.950
Android that drives that
camera view, similar to iOS.

00:21:03.950 --> 00:21:05.630
Let's go down over here.

00:21:05.630 --> 00:21:09.520
This is the AR fragment
that is similar

00:21:09.520 --> 00:21:13.540
to the camera view of
the ARSCNView in iOS.

00:21:13.540 --> 00:21:18.460
This is the AR fragment
that drives it on Android.

00:21:18.460 --> 00:21:24.760
Again, suppose we initialize it
and set it up to that frame,

00:21:24.760 --> 00:21:28.280
and you set it up to
provide each frame

00:21:28.280 --> 00:21:30.155
to spatial anchor so it can collect

00:21:30.155 --> 00:21:32.570
it's required information
and that's it.

00:21:32.570 --> 00:21:35.525
You're done. You have the
camera setup. Super simple.

00:21:35.525 --> 00:21:37.115
Super straightforward.

00:21:37.115 --> 00:21:40.385
That's the one layer that
you work around with.

00:21:40.385 --> 00:21:45.390
In Android, let's look at
what the setup looks like.

00:21:45.880 --> 00:21:50.135
We are now using this
for just searching.

00:21:50.135 --> 00:21:52.685
This app only locates anchor.

00:21:52.685 --> 00:21:55.520
The way it does it is if you
remember from the video,

00:21:55.520 --> 00:21:57.290
I entered in the anchor ID,

00:21:57.290 --> 00:21:59.885
so we basically take
in that anchor ID.

00:21:59.885 --> 00:22:03.470
On Android, we have a
special separate class setup

00:22:03.470 --> 00:22:06.320
that does the docking
to spatial anchors.

00:22:06.320 --> 00:22:09.710
Let's hop on over here
to see what's going on.

00:22:09.710 --> 00:22:13.640
Over here. You notice

00:22:13.640 --> 00:22:15.830
this is very similar to
how it was set up in iOS.

00:22:15.830 --> 00:22:17.720
We're setting up the
spatial anchor session

00:22:17.720 --> 00:22:20.460
giving it the account key and ID.

00:22:21.190 --> 00:22:24.755
This is what it does
to start locating it.

00:22:24.755 --> 00:22:27.470
Depending on what
information was provided

00:22:27.470 --> 00:22:29.870
it from the response,
it'll come in here,

00:22:29.870 --> 00:22:32.360
create what we call a
locate criteria which

00:22:32.360 --> 00:22:35.915
just has all the parameters it's
supposed to be searching for,

00:22:35.915 --> 00:22:37.880
like "Hey, there's an
anchor that I'm looking

00:22:37.880 --> 00:22:40.430
for and these are the
parameters I need to check."

00:22:40.430 --> 00:22:42.020
It starts looking for it.

00:22:42.020 --> 00:22:46.820
Once it is found, it
basically creates.

00:22:46.820 --> 00:22:48.980
Sorry. This is how the
criteria is set up,

00:22:48.980 --> 00:22:51.440
is basically coming from
the AR fragment itself.

00:22:51.440 --> 00:22:53.120
Again, you're not doing
anything fancy here.

00:22:53.120 --> 00:22:56.190
You're just giving it
parameters it needs.

00:22:57.230 --> 00:23:00.870
This and abandoning
thought go down here.

00:23:00.870 --> 00:23:02.890
I think is what I have it.

00:23:03.410 --> 00:23:07.875
So once the anchor is located,

00:23:07.875 --> 00:23:09.510
it basically triggers the session

00:23:09.510 --> 00:23:11.850
complete and that on
the Android side,

00:23:11.850 --> 00:23:14.070
will just go in and draw

00:23:14.070 --> 00:23:18.615
that box on your screen
on that ArFragment.

00:23:18.615 --> 00:23:21.240
So that's literally it.

00:23:21.240 --> 00:23:23.415
That's all that's happening here.

00:23:23.415 --> 00:23:26.400
So again, super straightforward.

00:23:26.400 --> 00:23:31.545
Like I said, I just went in and
just edited what was already there

00:23:31.545 --> 00:23:34.080
in the sample code and

00:23:34.080 --> 00:23:37.350
just made it work for myself
because I wanted a game really bad.

00:23:37.350 --> 00:23:38.640
I have Xamarin knowledge,

00:23:38.640 --> 00:23:40.515
but not that much a
special anchors knowledge

00:23:40.515 --> 00:23:43.680
so just found a nice
medium in between.

00:23:43.680 --> 00:23:46.095
So just only the quick recap.

00:23:46.095 --> 00:23:47.955
What I think is important to

00:23:47.955 --> 00:23:50.325
remember if you are
working in this space.

00:23:50.325 --> 00:23:53.160
So AnchorVisual Object,

00:23:53.160 --> 00:23:55.080
you'll see this word
turn up in the document,

00:23:55.080 --> 00:23:58.740
is basically that object like
the box in this example.

00:23:58.740 --> 00:24:02.700
It contains information of the
position and the shape that you

00:24:02.700 --> 00:24:07.050
need on each platform
because of this mobile app.

00:24:07.050 --> 00:24:09.540
Each platform you tap into it need

00:24:09.540 --> 00:24:12.210
the views and you render
it frame by frame,

00:24:12.210 --> 00:24:13.830
and that is also

00:24:13.830 --> 00:24:16.890
your canvas on which you
place and remove the object.

00:24:16.890 --> 00:24:19.395
So your spatial anchors

00:24:19.395 --> 00:24:22.740
layer can be shared between
your two apps as you saw,

00:24:22.740 --> 00:24:24.405
I have it in a common folder,

00:24:24.405 --> 00:24:26.100
and that's what you use to send

00:24:26.100 --> 00:24:29.140
the object to your Cloud DB and back.

00:24:29.900 --> 00:24:33.360
So you could basically do
everything on the left

00:24:33.360 --> 00:24:37.080
locally on your app on your
device, but that's no fun.

00:24:37.080 --> 00:24:38.520
Why would you want to play a treasure

00:24:38.520 --> 00:24:40.605
hard game on your own?
That makes no sense.

00:24:40.605 --> 00:24:43.200
So let's make it a shared experience.

00:24:43.200 --> 00:24:44.490
So to share the experience,

00:24:44.490 --> 00:24:46.440
you're going to pull
in Azure App Service,

00:24:46.440 --> 00:24:48.735
pull in Cosmos DB to share,

00:24:48.735 --> 00:24:52.290
to have a safe space for all of
those anchors that I'm dropping,

00:24:52.290 --> 00:24:55.185
and then I can share it
with all my friends.

00:24:55.185 --> 00:24:58.900
If you want to take
it to the next level,

00:24:59.240 --> 00:25:02.295
you don't want to share
it with all your friends,

00:25:02.295 --> 00:25:04.305
only to your super-duper
best friends,

00:25:04.305 --> 00:25:06.585
you can make it ADAL
access controlled and

00:25:06.585 --> 00:25:10.635
only allowed specific logins
to come in and use the app.

00:25:10.635 --> 00:25:13.845
There's a lot of great
ways to implement this.

00:25:13.845 --> 00:25:17.940
You can have a treasure game that
talks to IoT devices and that

00:25:17.940 --> 00:25:20.340
triggers location-based
notifications on

00:25:20.340 --> 00:25:22.230
your phone to let people know,

00:25:22.230 --> 00:25:25.095
hey, the newerer potential
treasure hunt point.

00:25:25.095 --> 00:25:26.760
So you can get very,

00:25:26.760 --> 00:25:28.065
very creative with this.

00:25:28.065 --> 00:25:30.300
This is a great starting point,

00:25:30.300 --> 00:25:34.510
a starting solution to build up on.

00:25:34.580 --> 00:25:38.640
So thanks for listening and
these are all the links.

00:25:38.640 --> 00:25:41.265
I'll share this presentation
as soon as we're done.

00:25:41.265 --> 00:25:43.230
Probably even put it
in my GitHub repo

00:25:43.230 --> 00:25:45.000
in case you want to
access these links.

00:25:45.000 --> 00:25:48.340
All these links are
on the repo as well.

00:25:48.860 --> 00:25:51.180
Thank you for listening again.

00:25:51.180 --> 00:25:53.770
I'm going to pause
here for questions.

00:25:55.730 --> 00:25:58.680
>> Hey, we are back.

00:25:58.680 --> 00:25:59.760
I'm moving a little bit because I'm

00:25:59.760 --> 00:26:01.500
getting ready for the next session.

00:26:01.500 --> 00:26:02.640
>> Yeah, no problem.

00:26:02.640 --> 00:26:06.510
>> We have a couple of good questions
here that we can talk about.

00:26:06.510 --> 00:26:08.865
So Rest Button Pushed ask,

00:26:08.865 --> 00:26:11.325
I wonder what's the benefit of using

00:26:11.325 --> 00:26:14.130
Azure Spatial Service versus

00:26:14.130 --> 00:26:17.010
building your own besides
the time to market.

00:26:17.010 --> 00:26:19.230
Is that the only benefit?

00:26:19.230 --> 00:26:22.755
>> So the major benefit that
I see is they handle a lot

00:26:22.755 --> 00:26:24.660
of rendering through each frame

00:26:24.660 --> 00:26:26.970
and collecting all of
that spatial data.

00:26:26.970 --> 00:26:29.925
You don't want to do
all that extreme.

00:26:29.925 --> 00:26:32.715
Unless you're an AR expert,
then please go ahead.

00:26:32.715 --> 00:26:34.560
All anchors away maybe you want.

00:26:34.560 --> 00:26:35.265
>> That's right.

00:26:35.265 --> 00:26:38.070
>> Yeah. The service is
super simple to use,

00:26:38.070 --> 00:26:39.240
really easy to onboard,

00:26:39.240 --> 00:26:41.280
and they handled all of
that overhead for you.

00:26:41.280 --> 00:26:42.930
So you can just concentrate on

00:26:42.930 --> 00:26:44.850
the rest of the
architecture of your game,

00:26:44.850 --> 00:26:46.170
like how do you want
to interact with it,

00:26:46.170 --> 00:26:48.435
what does your UI want to
look like, things like that.

00:26:48.435 --> 00:26:53.940
>> Cool. Awesome. So the next
question and they're more than one,

00:26:53.940 --> 00:26:57.240
but the big thing is that
when using the client again,

00:26:57.240 --> 00:27:00.375
the Hunt App, do you need
an Internet connection?

00:27:00.375 --> 00:27:03.060
>> Yes, you do.
Unfortunately, the service

00:27:03.060 --> 00:27:05.625
talks to that Azure service.

00:27:05.625 --> 00:27:07.410
The spatial anchor
is an Azure service,

00:27:07.410 --> 00:27:09.390
so you do need to have it.

00:27:09.390 --> 00:27:10.860
You could do like I mentioned.

00:27:10.860 --> 00:27:13.875
You could do like a native
embedded version of it,

00:27:13.875 --> 00:27:15.300
is make your app fatal,

00:27:15.300 --> 00:27:17.070
and I don't think that's
a nice experience.

00:27:17.070 --> 00:27:18.270
If you do it with online,

00:27:18.270 --> 00:27:20.070
you can use so many more services

00:27:20.070 --> 00:27:21.600
and make the game more interactive.

00:27:21.600 --> 00:27:22.410
>> Got you.

00:27:22.410 --> 00:27:24.210
>> That was the next question is, can

00:27:24.210 --> 00:27:26.400
you change it to make
it work offline?

00:27:26.400 --> 00:27:30.810
So can you download a certain
area [inaudible] and say,

00:27:30.810 --> 00:27:32.310
"Hey, I'm going to go here."

00:27:32.310 --> 00:27:33.780
>> Exactly, you totally
can. You can make

00:27:33.780 --> 00:27:35.760
a complete often version
of this, if you want.

00:27:35.760 --> 00:27:37.620
I just wouldn't recommend
it just because I

00:27:37.620 --> 00:27:39.615
like it to be a little
more interactive and rich.

00:27:39.615 --> 00:27:39.900
>> Sure.

00:27:39.900 --> 00:27:41.130
>> You'll notice right now, it's

00:27:41.130 --> 00:27:44.580
a very basic implementation
of what the game can be.

00:27:44.580 --> 00:27:46.860
I just wanted to give
everyone a starting point.

00:27:46.860 --> 00:27:48.975
But you can completely adopt it

00:27:48.975 --> 00:27:51.030
for good and make your own versions,

00:27:51.030 --> 00:27:52.890
also to make it fancier
or make it cooler.

00:27:52.890 --> 00:27:56.010
I, myself, be iterating
on it as I get time.

00:27:56.010 --> 00:27:58.050
But yeah, I mean, I can totally see

00:27:58.050 --> 00:28:00.525
offline version of this
working out 100 percent.

00:28:00.525 --> 00:28:01.650
>> Got you. So then another question

00:28:01.650 --> 00:28:02.880
here that I just saw come up from

00:28:02.880 --> 00:28:05.930
Wesley Waffles is
that, for the anchors,

00:28:05.930 --> 00:28:09.065
can you orient them like is a north,

00:28:09.065 --> 00:28:12.055
south, east, west, or
how does that work?

00:28:12.055 --> 00:28:17.115
>> So great question. So if you
go into the spatial anchors page,

00:28:17.115 --> 00:28:19.335
if can pull it up
right now and not mess

00:28:19.335 --> 00:28:22.005
up with the setup. There we go.

00:28:22.005 --> 00:28:23.775
All right. So spatial anchors,

00:28:23.775 --> 00:28:26.100
they have a bunch of
amazing concepts and

00:28:26.100 --> 00:28:28.755
frequently asked questions
where they explain the whole.

00:28:28.755 --> 00:28:30.075
How does the location work?

00:28:30.075 --> 00:28:32.490
How does it understand
how to render it.

00:28:32.490 --> 00:28:36.660
It currently is very localized
to the space that you scan.

00:28:36.660 --> 00:28:38.490
So it's very relative to

00:28:38.490 --> 00:28:41.130
the carpet versus the
wall versus the table,

00:28:41.130 --> 00:28:43.935
and it works out the
edges that it finds.

00:28:43.935 --> 00:28:44.790
>> Got you.

00:28:44.790 --> 00:28:46.410
>> It kind of figures out.

00:28:46.410 --> 00:28:47.970
So it doesn't do like a GPS or

00:28:47.970 --> 00:28:51.000
a location-based
information gathering.

00:28:51.000 --> 00:28:53.610
Basically, it renders
all of these edges

00:28:53.610 --> 00:28:57.795
and points in this
relative to the space.

00:28:57.795 --> 00:28:59.535
It's really smart in the sense that,

00:28:59.535 --> 00:29:01.740
I was able to draw an anchor on

00:29:01.740 --> 00:29:04.575
the table and on the floor and
it treated both differently.

00:29:04.575 --> 00:29:05.100
>> Cool.

00:29:05.100 --> 00:29:07.680
>> So the system is
a little different

00:29:07.680 --> 00:29:11.250
on the traditional ways of
like geolocation based.

00:29:11.250 --> 00:29:13.455
This is a little more spatial based,

00:29:13.455 --> 00:29:15.360
like how the connect sensor works.

00:29:15.360 --> 00:29:19.440
But that's like a way
to so correlated.

00:29:19.440 --> 00:29:20.895
It's not exactly the same.

00:29:20.895 --> 00:29:22.575
But yeah, I'd suggest totally coming

00:29:22.575 --> 00:29:24.600
into the spatial anchors docs page.

00:29:24.600 --> 00:29:26.040
They have tons of information,

00:29:26.040 --> 00:29:28.935
and even more guidelines
and understanding or how

00:29:28.935 --> 00:29:32.565
conceptually you could make more
complex and complicated apps.

00:29:32.565 --> 00:29:35.190
>> Excellent. Well, thank
you so much Wiki for taking

00:29:35.190 --> 00:29:37.770
the time to talk about
Mixed Reality and Xamarin,

00:29:37.770 --> 00:29:38.985
and how easy it is to

00:29:38.985 --> 00:29:41.040
get started with an
application very quickly.

00:29:41.040 --> 00:29:42.240
So thank you for that.

00:29:42.240 --> 00:29:42.510
>> Yeah, sure.

00:29:42.510 --> 00:29:45.120
>> Everybody, we have our
last speaker coming up,

00:29:45.120 --> 00:29:46.890
where we have Rachel talking

00:29:46.890 --> 00:29:49.710
about making accessible
websites for everybody.

00:29:49.710 --> 00:29:50.970
So what we're going to do, typically,

00:29:50.970 --> 00:29:53.430
she's actually in the
studio right now.

00:29:53.430 --> 00:29:55.920
So we're going to do a
little bit a longer pause,

00:29:55.920 --> 00:29:57.600
so we can move stuff around.

00:29:57.600 --> 00:29:59.025
But please stay tuned,

00:29:59.025 --> 00:30:01.900
we will be right back.

