Holographic Remoting と Windows Mixed Reality API を使用した座標系同期
Windows Mixed Reality API を使用すると、ユーザー座標系は SpatialStationaryFrameOfReference にラップされます。
ヒント
シンプルな例は、Holographic Remoting サンプルの GitHub リポジトリ内の remote と player サンプルで見つけることができます。
SampleRemoteApp.h と SamplePlayerMain.h ファイル内の #define ENABLE_USER_COORDINATE_SYSTEM_SAMPLE
のコメントを解除して、このサンプル コードを有効にしてください。
プレーヤー アプリでユーザー座標系を設定および更新する
ユーザー座標系を設定および更新するには、プレーヤー コンテキストで 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 (...)
{
}
Note
サンプルの SpatialStationaryFrameOfReference では、ユーザー座標系が変更されていない場合でも、デバイス追跡が失われた後のドリフトを回避するために、一定の間隔で UpdateUserSpatialFrameOfReference
を呼び出す必要があります。
リモート アプリでユーザー座標系を取得する
ユーザー座標系にアクセスするには、リモート コンテキストで GetUserSpatialFrameOfReference
を呼び出します。
GetUserSpatialFrameOfReference
によって、ユーザー座標系を表す SpatialStationaryFrameOfReference が返されます。
// In the Remote app:
winrt::Windows::Perception::Spatial::SpatialStationaryFrameOfReference spatialUserFrameOfReference = m_remoteContext.GetUserSpatialFrameOfReference();