将 Unity 中的 MRTK 游戏空间与 Hololens 2 上跟踪的 QR 码对齐

问题描述 投票:0回答:1

在 Unity 2021 LTS 中使用 MRTK 2,我尝试在 Hololens 2 上显示相对于 QR 码定位的 3D 对象。目标是“扫描”平放在桌子上的 QR 码,并将对象显示为它后面几厘米与它的旋转对齐。由于对象上的物理关节,我不能简单地移动对象以匹配扫描的 QR 码的位置和方向,我必须移动“相机”(更准确地说是 MRTK 游戏空间,它是相机的父级)游戏对象)。

为此,我尝试了以下操作,其中锚点是跟踪的 QR 码变换的子变换,具有位置偏移:

MixedRealityPlayspace.Position -= anchor.position;
MixedRealityPlayspace.RotateAround(Vector3.zero, Vector3.up, anchor.rotation.eulerAngles.y);

在这种情况下,3D 对象(在世界位置 (0, 0, 0))出现在正确的位置,但旋转总是有点偏离,有时几乎察觉不到,其他时候最多偏离约 30 度。这两行代码在检测到二维码后每 1 秒运行一次,但旋转不匹配太大,我认为这不是由于该时间点的跟踪不准确造成的。我不知道如何连续应用这些转换。 我使用的 QR 代码跟踪基于此 MRTK Unity 的 QR 代码示例,稍加修改,将检测到的 QR 代码旋转乘以 SpatialGraphNodeTracker.cs

 中的 
Quaternion.Euler(90, 90, 90),以获得检测到的代码的 y 向上方向。代码的位置和方向是正确的,即放置在那里的可视化对象在移动游戏空间之前和之后的位置和方向都与现实世界的代码对齐。 我尝试研究世界锁定工具,但找不到此用例的有用信息,并得到的印象是它更针对具有多个锚点的大规模 AR 体验。

如何重新定位游戏空间,以便相对于跟踪的二维码定位的 3D 对象完美对齐(以及跟踪许可)?

unity-game-engine hololens mrtk
1个回答
0
投票
当我不“手动”移动变换,而是使用带有父子关系的临时变换(如本代码片段所示)时,旋转是正确的:

var tempTransform = new GameObject().transform; tempTransform.parent = anchor; // anchor is parented to the detected QR Code transform with a position offset tempTransform.localPosition = Vector3.zero; tempTransform.localRotation = Quaternion.identity; tempTransform.parent = null; playspaceTransform.parent = tempTransform; tempTransform.position = Vector3.zero; tempTransform.rotation = Quaternion.identity;
    
© www.soinside.com 2019 - 2024. All rights reserved.