我目前正在用RealityKit做一些实验。
我一直在看一些示例代码,我有点困惑于ARAnchor和AnchorEntity之间的区别,以及何时使用其中的一种。
到目前为止我知道:
AnchorEntity也可以作为子Entity,因此您可以直接将模型对象添加到锚点。您不能用ARAnchor来实现这一点,您必须“手动”向rootNode添加模型对象,并正确地使用锚点的位置。ARAnchor来优化锚周围区域的跟踪。AnchorEntity的文档没有指定这一点。现在,我将一个AnchorEntity作为一个“根节点”添加到会话中,因为它更容易使用,所以我可以直接将模型作为子节点添加到这个锚点。但我也添加了一个ARAnchor,位于相同的位置,到现场的锚,以加强跟踪围绕这一点。这是必要的吗?
问:有人能帮我澄清这两种不同之处,并用例吗?
发布于 2019-08-23 16:27:12
更新日期:2022年7月10日。
ARAnchor和AnchorEntity类都是为了同一个神圣的目的而创建的--将3D模型与你的现实世界中的物体捆绑在一起。
RealityKit AnchorEntity极大地扩展了ARKit ARAnchor的功能。这两者之间最重要的区别是AnchorEntity自动跟踪现实世界的目标,但是ARAnchor需要session(...)实例方法(或SceneKit的renderer(...)实例方法)来实现这一点。考虑到ARAnchors的集合存储在ARSession对象中,AnchorEntities的集合存储在场景中。
此外,生成ARAchors需要手动Session config,而生成AnchorEntities需要最少的开发人员参与。
等级差异:

RealityKit的主要优点是能够同时使用不同的AnchorEntities,例如.plane、.body或.object。在automaticallyConfigureSession中有RealityKit实例属性。当启用时,ARView会自动运行一个配置ARSession,该配置将根据相机模式和场景锚点得到更新。禁用时,需要使用您自己的配置手动运行会话。
arView.automaticallyConfigureSession = true // default在ARKit中,如您所知,您只能在当前会话中运行一个配置: World、Body或Geo。然而,ARKit有一个例外--您可以一起运行两个信任-- FaceTracking和WorldTracking (其中一个必须是驱动程序,另一个是驱动)。
let config = ARFaceTrackingConfiguration()
config.isWorldTrackingEnabled = true
arView.session.run(config)苹果开发人员的文档显示:
在
anchors collection框架中,您使用AnchorEntity实例作为实体层次结构的根,并将其添加到场景实例的AnchorEntity中。这使ARKit能够将锚实体及其所有层次结构的后代放置到现实世界中。除了锚实体继承自Entity类的组件之外,锚实体还符合HasAnchoring协议,为它提供了一个AnchoringComponent实例。
AnchorEntity有三个构建块:
world、body或image)所有实体都有Synchronization component来帮助组织协作会话()。

AnchorEntity 有九种特定的锚点类型,用于九种不同用途
您可以在应用程序ARAnchor中同时使用、、和。或者您可以只使用AnchorEntity类,因为它已经足够了。
有关
ARAnchor和AnchorEntity的更多信息,请查看THIS POST。
https://stackoverflow.com/questions/57593960
复制相似问题