我目前正在用RealityKit做一些实验。
我一直在查看一些示例代码,对于ARAnchor
和AnchorEntity
之间的区别以及何时使用其中一个而不是另一个,我感到有些困惑。
到目前为止我知道:
- 两者都是描述真实的世界中位置的锚点。
AnchorEntity
也可以有其他的Entity
作为子对象,所以你可以直接添加模型对象到锚。你不能用ARAnchor
这样做,你必须“手动”添加模型对象到rootNode
,并使用锚点的位置正确地放置它。- 在文档中它说ARKit使用添加的
ARAnchor
来优化锚周围区域的跟踪。AnchorEntity
的文档没有说明这一点。
现在我添加了一个AnchorEntity
到会话中作为“根节点”,因为它更容易使用,这样我就可以简单地直接添加模型作为子节点到这个锚。但是我也添加了一个ARAnchor
,位于相同的位置,到场景的锚点,以增强围绕这个点的跟踪。这是必要的吗?
1条答案
按热度按时间hc8w905p1#
**
ARAnchor
和AnchorEntity
**类都是为了同一个神圣的目的而创建的--将3D模型与现实世界中的对象联系起来。RealityKit
AnchorEntity
极大地扩展了ARKitARAnchor
的功能,这两者之间最重要的区别是AnchorEntity
自动跟踪真实世界的目标,但是ARAnchor
需要session(...)
示例方法(或SceneKit的renderer(...)
示例方法)来完成此操作。考虑ARAnchors
的集合存储在ARSession对象中,AnchorEntities
的集合存储在场景中。此外,生成ARAchor需要手动配置会话,而生成AnchorEntities需要最少的开发人员参与。
层级差异:
RealityKit的主要优点是能够同时使用不同的AnchorEntity,例如
.plane
、.body
或.object
。RealityKit中有automaticallyConfigureSession
示例属性。启用时,ARView
会自动运行ARSession
,其配置将根据您的相机模式和场景锚点进行更新。禁用时,这会话需要到运行手工与你自己的配置.如您所知,在ARKit中,您只能在当前会话中运行一个配置:然而,ARKit中有一个例外--你可以同时运行两个配置-- FaceTracking和WorldTracking(其中一个必须是driver,另一个必须是driven)。
Apple开发人员文档中指出:
在RealityKit框架中,您使用
AnchorEntity
示例作为实体层次结构的根,并将其添加到Scene示例的**anchors collection
**中。这使ARKit能够将锚实体沿着所有层次后代放置到真实世界中。除了锚点实体从Entity
类继承的组件外,锚实体也符合X1 M19 N1 X协议,从而给予它X1 M20 N1 X示例。AnchorEntity
具有三个构造块:*变换组件(包含平移、旋转和缩放的变换矩阵)
*同步组件(用于多用户体验的实体同步数据)
*锚定组件(允许选择锚定类型-
world
、body
或image
)所有实体都有
Synchronization component
,可帮助组织协作会议。AnchorEntity
有九种特定的锚类型,用于九种不同的用途:您可以在应用中同时使用
ARAnchor
和AnchorEntity
类。或者您也可以只使用AnchorEntity
类,因为它足以满足所有需求。有关
ARAnchor
和AnchorEntity
的其他信息,请查看此帖子。