Синхронизация системы координат с голографическим удаленным взаимодействием и API Windows Mixed Reality
С помощью API Windows Mixed Reality система координат пользователя упаковывается в SpatialStationaryFrameOfReference.
Совет
Простой пример можно найти в примерах удаленного и проигрывателя в репозитории Github с примерами голографического удаленного взаимодействия.
Раскомментируйте #define ENABLE_USER_COORDINATE_SYSTEM_SAMPLE
файлы SampleRemoteApp.h и SamplePlayerMain.h, чтобы включить пример кода.
Установка и обновление системы координат пользователей в приложении проигрывателя
Чтобы задать и обновить систему координат пользователя, вызовите UpdateUserSpatialFrameOfReference
контекст проигрывателя и передайте в него SpatialCoordinateSystem .
SpatialCoordinateSystem может, например, быть SpatialStationaryFrameOfReference, SpatialLocatorAttachedFrameOfReference или SpatialAnchor.
// In the Player app:
// Create a stationary frame of reference
winrt::Windows::Perception::Spatial::SpatialStationaryFrameOfReference spatialFrameOfReference = nullptr;
winrt::Windows::Perception::Spatial::SpatialLocator spatialLocator = winrt::Windows::Perception::Spatial::SpatialLocator::GetDefault();
if (spatialLocator != nullptr)
{
spatialFrameOfReference = spatialLocator.CreateStationaryFrameOfReferenceAtCurrentLocation(float3(0.0f, 0.0f, 0.0f), quaternion(0, 0, 0, 1), 0.0);
}
...
// Update the user coordinate system with the coordinate system of the spatial frame of reference
try
{
SpatialCoordinateSystem userCoordinateSystem = spatialFrameOfReference.CoordinateSystem();
m_playerContext.UpdateUserSpatialFrameOfReference(userCoordinateSystem);
}
catch (...)
{
}
Примечание
При использовании примера SpatialStationaryFrameOfReference необходимо вызывать через регулярный интервал, UpdateUserSpatialFrameOfReference
чтобы избежать смещения после потери отслеживания устройства, даже если система координат пользователя не изменилась!
Получение пользовательской системы координат в удаленном приложении
Чтобы получить доступ к системе координат пользователя, вызовите GetUserSpatialFrameOfReference
удаленный контекст.
GetUserSpatialFrameOfReference
возвращает объект SpatialStationaryFrameOfReference, представляющий систему координат пользователя.
// In the Remote app:
winrt::Windows::Perception::Spatial::SpatialStationaryFrameOfReference spatialUserFrameOfReference = m_remoteContext.GetUserSpatialFrameOfReference();