ARAnchor
关注对象在物理环境中的位置和方向。
@interface ARAnchor : NSObject
概念
要跟踪真实或虚拟对象相对于相机的静态位置和方向,请创建锚对象并使用 addAnchor: 方法将它们添加到您的 AR 会话中。
提示:在会话中添加锚点有助于 ARKit 优化该锚点周围区域的世界跟踪精度,以便虚拟对象相对于现实世界似乎保持在原位。 如果虚拟对象移动,则从旧位置移除相应的锚点,并在新位置添加一个。
一些 ARKit 功能会自动将特殊锚点添加到会话中。 World-tracking 会话可以添加 ARPlaneAnchor、ARObjectAnchor 和 ARImageAnchor 对象,如果您启用相应的功能; 面部跟踪会话添加 ARFaceAnchor 对象。
除了创建自己的 ARAnchor 实例来跟踪虚拟内容的真实位置之外,您还可以将 ARAnchor 子类化以将自定义数据与您创建的锚点相关联。 确保当 ARKit 更新帧或在 ARWorldMap 中保存和加载锚点时,您的锚点类行为正确:
(1) 锚子类必须满足 ARAnchorCopying 协议的要求。 ARKit 调用 initWithAnchor:(在后台线程上)将锚类的实例从每个 ARFrame 复制到下一个。 您的此初始化程序的实现应复制您的子类添加的任何自定义属性的值。
(2) Anchor 子类也必须采用 NSSecureCoding 协议。 覆盖 encodeWithCoder: 和 initWithCoder: 以在 ARKit 在世界地图中保存和加载它们时保存和恢复子类的自定义属性的值。
(3) 基于它们的标识符属性,锚被认为是相等的。
(4) 保存世界地图时,仅包含不采用 ARTrackable 的锚点。
创建锚点
- initWithTransform:
使用指定的变换创建一个新的锚对象。
- initWithName:transform:
使用指定的变换和描述性名称创建一个新的锚对象。
name
锚点的描述性名称。
跟踪锚
identifier
锚点的唯一标识符。
sessionIdentifier
拥有此锚点的会话的唯一标识符。
transform
一个矩阵,编码锚点相对于放置锚点的 AR 会话的世界坐标空间的位置、方向和比例。
网友评论