swift ARAnchor和AnchorEntity有什么区别?

bbuxkriu  于 2023-03-16  发布在  Swift
关注(0)|答案(1)|浏览(114)

我目前正在用RealityKit做一些实验。
我一直在查看一些示例代码,对于ARAnchorAnchorEntity之间的区别以及何时使用其中一个而不是另一个,我感到有些困惑。
到目前为止我知道:

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

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

问:有人能帮我澄清一下这两种产品的区别和使用情形吗?

hc8w905p

hc8w905p1#

  • 更新日期:2023年3月16日 *。
    **ARAnchorAnchorEntity**类都是为了同一个神圣的目的而创建的--将3D模型与现实世界中的对象联系起来。

RealityKit AnchorEntity极大地扩展了ARKit ARAnchor的功能,这两者之间最重要的区别是AnchorEntity自动跟踪真实世界的目标,但是ARAnchor需要session(...)示例方法(或SceneKit的renderer(...)示例方法)来完成此操作。考虑ARAnchors的集合存储在ARSession对象中,AnchorEntities的集合存储在场景中。
此外,生成ARAchor需要手动配置会话,而生成AnchorEntities需要最少的开发人员参与。
层级差异:

RealityKit的主要优点是能够同时使用不同的AnchorEntity,例如.plane.body.object。RealityKit中有automaticallyConfigureSession示例属性。启用时,ARView会自动运行ARSession,其配置将根据您的相机模式和场景锚点进行更新。禁用时,这会话需要到运行手工与你自己的配置.

arView.automaticallyConfigureSession = true           // default

如您所知,在ARKit中,您只能在当前会话中运行一个配置:然而,ARKit中有一个例外--你可以同时运行两个配置-- FaceTracking和WorldTracking(其中一个必须是driver,另一个必须是driven)。

let config = ARFaceTrackingConfiguration()
config.isWorldTrackingEnabled = true
arView.session.run(config)

Apple开发人员文档中指出:
在RealityKit框架中,您使用AnchorEntity示例作为实体层次结构的根,并将其添加到Scene示例的**anchors collection**中。这使ARKit能够将锚实体沿着所有层次后代放置到真实世界中。除了锚点实体从Entity类继承的组件外,锚实体也符合X1 M19 N1 X协议,从而给予它X1 M20 N1 X示例。
AnchorEntity具有三个构造块:

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

所有实体都有Synchronization component,可帮助组织协作会议

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

  • AR锚钉
  • 帮助实现10个ARKit锚点,包括ARGeoAnchor和ARAppClipCodeAnchor
  • 身体
  • 摄影机
  • 影像
  • 客体
  • 平面
  • 世界
  • 光线投射结果
    您可以在应用中同时使用ARAnchorAnchorEntity。或者您也可以只使用AnchorEntity类,因为它足以满足所有需求。

有关ARAnchorAnchorEntity的其他信息,请查看此帖子

相关问题