10

我目前正在用 RealityKit 做一些实验。

我一直在查看一些示例代码,我对 和 之间的区别以及何时使用其中一个而不是另一个感到有些ARAnchor困惑AnchorEntity

到目前为止,我知道:

  • 两者都是描述现实世界中位置的锚点。
  • AnchorEntity也可以有其他Entity的作为孩子,所以你可以直接将模型对象添加到锚点。您不能使用 来执行此操作ARAnchor,您必须“手动”将模型对象添加到rootNode,并使用锚点的位置正确放置它。
  • 在文档中它说 ARKit 使用添加ARAnchor来优化锚点周围区域的跟踪。的文档AnchorEntity没有指定这一点。

现在我将 aAnchorEntity作为“根节点”添加到会话中,因为它更易于使用,因此我可以简单地将模型作为子节点直接添加到此锚点。但随后我还在ARAnchor场景的锚点中添加了一个位于同一位置的 ,以增强围绕该点的跟踪。这是必要的吗?

问:任何人都可以帮助我澄清这两者的区别和用例吗?

4

1 回答 1

16

更新日期:2021 年 4 月 3 日


ARAnchorclass 和AnchorEntityclass 都是为了同一个神圣目的而制作的——将 3D 内容与现实世界的对象联系起来。

RealityKitAnchorEntity极大地扩展了 ARKit 的功能ARAnchor。这两者之间最重要的区别是AnchorEntity自动跟踪现实世界的目标,但ARAnchor需要renderer(...)session(...)实例方法来完成此操作。还要考虑到集合ARAnchors存储在 ARSession 中,而集合AnchorEntities存储在场景中。

以下是等级差异:

在此处输入图像描述

RealityKit 的主要优点是能够同时使用不同的 AnchorEntities,例如.plane.image.object

如您所知,在 ARKit 中,您只能在当前会话中运行一个配置:World、Image 或 Object。然而,在 ARKit 中有一个例外 - 您可以同时运行两个配置 - WorldTracking 和 FaceTracking(但第一个必须是驱动程序,另一个必须是驱动程序)。


苹果开发者文档说:

在 RealityKit 框架中,您使用AnchorEntity实例作为实体层次结构的根,并将其添加到anchors collectionScene 实例中。这使 ARKit 能够将锚实体及其所有分层后代放置到现实世界中。除了锚实体从Entity类继承的组件外,锚实体也符合HasAnchoring协议,给它一个AnchoringComponent实例。

AnchorEntity具有三个构建块:

  • 变换组件 (包含平移、旋转和缩放的变换矩阵)
  • 同步组件 (多用户体验的实体同步数据)
  • 锚定组件 (允许选择锚的类型 -worldbodyimage


所有实体都有Synchronization component这有助于组织协作会议

在此处输入图像描述


AnchorEntity有九种特定的锚点类型,用于九种不同的目的

  • 锚点
    • 帮助实现 10 个 ARKit 锚点,包括 ARGeoAnchor 和 ARAppClipCodeAnchor
  • 身体
  • 相机
  • 图片
  • 目的
  • 飞机
  • 世界
  • 光线投射结果


您可以同时使用这两个类ARAnchorAnchorEntity在您的应用程序中。或者你可以只使用AnchorEntity类,因为它已经足够了。

有关ARAnchor和 的更多信息AnchorEntity,请查看这篇文章。

于 2019-08-23T16:27:12.440 回答