1

环境:ARKit 2.0、iPhone X、iOS 12.1

ARSeesion在该ARWorldMappingStatusMapped州运行时,

  1. 指定位置 ( #A ) 的一些自定义锚点通过 .添加到世界地图中ARSession.AddAnchor
  2. 世界地图被保存到一个文件中。

然后关闭应用程序并重新启动ARSession

  1. 配置加载保存的世界地图并将其分配给ARKitWorldTrackingSessionConfiguration.initialWorldMap
  2. 运行选项重置跟踪并删除现有锚点
  3. 然后通过调用上面ARSession.runWithConfiguration配置运行选项重新启动会话。
  4. 当 的状态ARSession表明已将记录的世界地图与当前环境协调一致时,从 中读取锚点(#B)的位置ARWorldMap.anchors

但我发现读取锚点的位置(#B )与保存时的位置( #A )相比没有改变。这是不正确的。为什么?

因为手机的初始位置就是坐标原点的位置。并且该应用程序一度关闭,手机被转移到另一个地方。所以重新启动后坐标原点的位置发生了变化ARSeesion。然后ARSession还应该将ARAnchors保存在世界地图中的位置调整到适当的位置,因此ARAnchors应该已经改变了位置。

4

2 回答 2

0

initialWorldMap文档中:

如果成功,跟踪状态会在短时间内变为 ARCamera.TrackingState.normal,表示当前世界坐标系和锚点与记录的世界地图中的匹配

这些锚点的位置应该相同,但是世界坐标系的原点在重新定位后应该改变。

于 2018-12-05T09:40:22.843 回答
0

我找到了原因。初始会话(其initialWorldMapisnil和运行选项为0我重新启动会话以进行协调后启动。所以它与协调会话相冲突。取消协调。因此加载锚的位置不会改变,因为它们对ARSession.

于 2018-12-05T12:42:48.947 回答