ARKit中如何创建可跟踪自定义锚点 实现移动3D对象内容绑定
ARKit自定义可跟踪锚点实现方案
ARKit 6.0及以上版本支持自定义实现符合ARTrackable协议的锚点,无需依赖VNHandPoseRequest等系统预置的视觉检测能力,即可实现对人手、肢体、宠物、动态物体等任意目标的3D点位跟踪,完全匹配你的需求场景。
实现步骤
- 自定义锚点类
你需要创建继承自ARAnchor、同时遵守ARTrackable协议的自定义锚点类,必须实现isTracked属性存储跟踪状态,同时可自定义属性存储你的模型输出的目标信息,示例代码如下:class CustomDynamicAnchor: ARAnchor, ARTrackable { // 标记当前锚点是否处于有效跟踪状态 var isTracked: Bool = false // 存储自定义跟踪目标的关联信息,可按需扩展 var targetId: String init(transform: simd_float4x4, targetId: String) { self.targetId = targetId super.init(transform: transform) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } - 初始化添加锚点
当你的自有模型输出目标对象的初始精确3D位置时,生成对应CustomDynamicAnchor实例,调用arView.session.add(anchor:)方法将锚点加入当前AR会话即可。 - 实时更新跟踪状态
在ARSession的每帧回调session(_:didUpdateFrame:)中,结合你的目标跟踪模型的实时输出结果更新锚点:- 若模型检测到目标仍在视野内,将最新的3D变换值赋值给锚点的
transform属性,同时将isTracked设为true,绑定的SceneKit节点会自动同步锚点位置 - 若目标丢失,将
isTracked设为false,可自行选择隐藏对应渲染节点
- 若模型检测到目标仍在视野内,将最新的3D变换值赋值给锚点的
- 绑定SceneKit渲染节点
实现ARSCNViewDelegate的renderer(_:nodeFor:)代理方法,当识别到锚点类型为你自定义的CustomDynamicAnchor时,返回需要展示的SceneKit节点即可,ARKit会自动维持节点与锚点的变换同步。
注意事项
- 自定义
ARTrackable锚点的位置精度完全由你的自有跟踪模型决定,ARKit不会做额外的位置修正,可根据需求对模型输出的3D坐标做平滑滤波处理,减少渲染抖动 - AR会话使用默认的
ARWorldTrackingConfiguration即可,无需开启额外的人体、动物检测相关配置项 - 若需要跟踪多个不同目标,可通过自定义锚点的
targetId属性区分不同跟踪对象。
内容的提问来源于stack exchange,提问作者user12942
相关产品推荐
相关产品推荐

