You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RealityKit中动态更换图像参考锚点?

用网络加载的图像作为ARKit图像锚点的实现方法

RealityKit的AnchorEntity(.image(group:name:))确实仅支持本地资源,但ARKit本身允许动态添加网络加载的图像作为参考锚点,结合RealityKit就能实现你的需求,具体步骤如下:

1. 从网络下载图像并转换格式

先通过网络请求获取图像数据,转为UIImage或CGImage(ARKit的参考图像需要CGImage格式):

func downloadImage(from url: URL, completion: @escaping (UIImage?) -> Void) {
    URLSession.shared.dataTask(with: url) { data, _, error in
        guard let data = data, error == nil else {
            completion(nil)
            return
        }
        DispatchQueue.main.async {
            completion(UIImage(data: data))
        }
    }.resume()
}

2. 创建ARKit动态参考图像并启动追踪

利用ARImageTrackingConfiguration,可以在运行时添加自定义的ARReferenceImage,无需提前打包到资源文件夹:

// 假设已成功下载到image
guard let targetImage = downloadedImage, let cgImage = targetImage.cgImage else { return }

// 创建参考图像,必须设置现实中的物理宽度(比如0.2米,根据实际场景调整)
let referenceImage = ARReferenceImage(cgImage, 
                                      orientation: .up, 
                                      physicalWidth: 0.2)
referenceImage.name = "NetworkAnchor" // 给锚点命名,方便后续识别

// 初始化追踪配置并启动Session
let config = ARImageTrackingConfiguration()
config.trackingImages = Set([referenceImage])
arView.session.run(config)

3. 在RealityKit中挂载物体到动态锚点

通过监听ARSession的锚点事件,当ARKit检测到网络加载的图像时,创建对应的AnchorEntity并挂载3D物体:

// 设置Session代理
arView.session.delegate = self

// 实现ARSessionDelegate处理锚点添加事件
extension YourViewController: ARSessionDelegate {
    func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
        for anchor in anchors {
            guard let imageAnchor = anchor as? ARImageAnchor,
                  imageAnchor.referenceImage.name == "NetworkAnchor" else {
                continue
            }
            // 创建锚点实体
            let anchorEntity = AnchorEntity(anchor: imageAnchor)
            // 加载并添加你的3D模型
            if let model = try? Entity.load(named: "Your3DModel") {
                anchorEntity.addChild(model)
            }
            // 将锚点添加到RealityKit场景
            arView.scene.addAnchor(anchorEntity)
        }
    }
}

注意事项

  • 图像特征要求:网络加载的图像需要有足够的纹理细节(避免纯色、低分辨率),否则ARKit无法稳定追踪。
  • 物理尺寸准确性:physicalWidth必须对应图像在现实中的实际大小,否则追踪位置会出现偏差。
  • 多图像扩展:如果需要同时追踪多个网络图像,可以维护一个Set<ARReferenceImage>集合,添加新图像后重新运行Session(可选择[.resetTracking, .removeExistingAnchors]等选项控制追踪状态)。

内容的提问来源于stack exchange,提问作者Perry Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:55:36