在 HoloLens 上使用 Urho 的空间锚点
Spatial Anchor with Urho on HoloLens
有人知道如何在 Urho 中使用空间定位点吗?我看了所有的样本,没有发现任何东西。文档中也没有任何内容。我尝试使用常规全息 API:
var store = await SpatialAnchorManager.RequestStoreAsync();
var anchors = store.GetAllSavedAnchors();
store.TrySave("myanchor", SpatialAnchor.TryCreateRelativeTo(???SpatialCoordinateSystem???));
但我不知道从哪里得到空间坐标系。
您可以像这样创建空间锚点
var anchor = SpatialAnchor.TryCreateRelativeTo(UrhoAppView.Current.ReferenceFrame.CoordinateSystem, new System.Numerics.Vector3(x, y, -z));
store.TrySave("anchorname", anchor);
请注意,Urho 具有左手坐标系,而 HoloLens API 具有右手坐标系,因此负 z。
您可以像这样将锚点映射到当前系统:
var matrix = store["anchorname"].CoordinateSystem.TryGetTransformTo(UrhoAppView.Current.ReferenceFrame.CoordinateSystem);
if (matrix.HasValue)
{
System.Numerics.Vector3 scale;
System.Numerics.Quaternion rotation;
System.Numerics.Vector3 translation;
System.Numerics.Matrix4x4.Decompose(matrix.Value, out scale, out rotation, out translation);
var q = new Quaternion(rotation.X, rotation.Y, rotation.Z, rotation.W);
var v = new Vector3(translation.X, translation.Y, -translation.Z);// -Z Right-handed to left-handed
}
有人知道如何在 Urho 中使用空间定位点吗?我看了所有的样本,没有发现任何东西。文档中也没有任何内容。我尝试使用常规全息 API:
var store = await SpatialAnchorManager.RequestStoreAsync();
var anchors = store.GetAllSavedAnchors();
store.TrySave("myanchor", SpatialAnchor.TryCreateRelativeTo(???SpatialCoordinateSystem???));
但我不知道从哪里得到空间坐标系。
您可以像这样创建空间锚点
var anchor = SpatialAnchor.TryCreateRelativeTo(UrhoAppView.Current.ReferenceFrame.CoordinateSystem, new System.Numerics.Vector3(x, y, -z));
store.TrySave("anchorname", anchor);
请注意,Urho 具有左手坐标系,而 HoloLens API 具有右手坐标系,因此负 z。
您可以像这样将锚点映射到当前系统:
var matrix = store["anchorname"].CoordinateSystem.TryGetTransformTo(UrhoAppView.Current.ReferenceFrame.CoordinateSystem);
if (matrix.HasValue)
{
System.Numerics.Vector3 scale;
System.Numerics.Quaternion rotation;
System.Numerics.Vector3 translation;
System.Numerics.Matrix4x4.Decompose(matrix.Value, out scale, out rotation, out translation);
var q = new Quaternion(rotation.X, rotation.Y, rotation.Z, rotation.W);
var v = new Vector3(translation.X, translation.Y, -translation.Z);// -Z Right-handed to left-handed
}