iOS - 上手AR

2,047 阅读1分钟

Apple-WWCD23-Vision-Pro-glass-230605_big.jpg.large_2x.jpg

我正在参加「掘金·启航计划」

前言

随着 Apple Vision Pro 的发布,势必掀起新一波的Ar潮,简单了解一下来个小Demo

开始

要在iOS中创建一个的AR物体,你可以使用 ARKitSceneKit 来实现

首先,确保你的项目已经导入了 ARKit 和 SceneKit 框架。你可以在 Xcode 中的项目设置中添加 ARKit.framework 和 SceneKit.framework 到 "Frameworks, Libraries, and Embedded Content" 部分

image.png

然后,在你的程序文件中,导入 ARKit 和 SceneKit

import UIKit
import ARKit

接下来,创建一个 ARSCNView,并将其添加到你的视图层次结构中:

// 创建 ARSCNView 实例
sceneView = ARSCNView(frame: view.bounds)
view.addSubview(sceneView)
sceneView.delegate = self

// 创建 SCNScene 实例,并设置为 sceneView 的场景
let scene = SCNScene()
sceneView.scene = scene

然后,在视图控制器的生命周期方法中,配置 ARSession 并启动 AR 会话:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // 配置 AR 会话并启动
    let configuration = ARWorldTrackingConfiguration()
    sceneView.session.run(configuration)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    // 暂停 AR 会话
    sceneView.session.pause()
}

现在,已经设置好 ARKit 和 AR 会话已经开始运行。接下来,我们将创建3D 模型:

func createBallNode() {
    // 创建球体几何体
    let ballGeometry = SCNSphere(radius: 0.1)
    let ballMaterial = SCNMaterial()
    ballMaterial.diffuse.contents = UIImage(named: "cxkj.webp") // 使用纹理图片
    ballGeometry.materials = [ballMaterial]

    // 在屏幕范围内生成随机位置坐标
    let randomX = Float.random(in: -1.0...1.0) // 在屏幕宽度范围内生成随机 X 坐标
    let randomY = Float.random(in: -1.0...1.0) // 在屏幕高度范围内生成随机 Y 坐标
    let randomZ = Float.random(in: -3.0...0.0) // 在屏幕深度范围内生成随机 Z 坐标
    ballNode = SCNNode(geometry: ballGeometry)
    ballNode.position = SCNVector3(randomX, randomY, randomZ)

    // 将球体节点添加到场景的根节点上
    sceneView.scene.rootNode.addChildNode(ballNode)
}

最后我们通过点击事件将3D模型添加到场中

@objc func handleTap(_ gesture: UITapGestureRecognizer) {
    if gesture.state == .ended {
        createBallNode() // 创建球体节点
    }
}

效果

RPReplay_Final1687340743.gif