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

如何在ARKit场景中添加来自图片选择器的UIImage?

在AR会话中添加从图片选择器获取的UIImage的解决方案

你已经能在AR会话里添加SCNText和3D对象,现在想加入从图片选择器选的UIImage对吧?其实很容易实现,核心思路是用SCNPlane作为图片的载体,把UIImage赋值给平面的材质,再把这个平面节点加到AR场景中。

这里有个现成的实现函数,你可以直接用:

func insertImage(image: UIImage, width: CGFloat = 0.3, height: CGFloat = 0.3) -> SCNNode {
    // 创建指定尺寸的平面作为图片载体
    let plane = SCNPlane(width: width, height: height)
    // 将UIImage设置为平面材质的漫反射内容
    plane.firstMaterial!.diffuse.contents = image
    // 创建承载平面的节点
    let node = SCNNode(geometry: plane)
    // 添加Billboard约束,让图片始终朝向相机
    node.constraints = [SCNBillboardConstraint()]
    return node
}

// 使用示例:假设你已经从图片选择器获取到了addedImage
let imageNode = insertImage(image: addedImage)
// 将图片节点添加到AR场景的目标节点(比如根节点或你指定的父节点)
arView.scene.rootNode.addChildNode(imageNode)

简单解释下这段代码:

  • 我们用SCNPlane来承载图片,你可以通过参数调整图片在AR空间里的尺寸;
  • 把UIImage赋值给平面材质的diffuse.contents,这样图片就会显示在平面上;
  • 添加SCNBillboardConstraint是为了让图片始终面向用户的相机,避免出现图片侧对镜头的情况;
  • 最后把生成的节点添加到AR视图的场景节点中,就能在AR空间里看到这张图片了。

别忘了先通过UIImagePickerController获取用户选择的图片(也就是示例里的addedImage),确保你已经正确处理了图片选择器的代理方法拿到UIImage对象哦。

内容的提问来源于stack exchange,提问作者Ruslan Pitula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:00:00