ARKit初识浅谈

AR全称Augmented Reality(增强现实),是一种将虚拟3D场景加入到由摄像机捕捉到的3D现实场景当中的技术。AR是借助于AVFoundation和CoreMotion来实现这一效果的。
分为两个步骤来实现:

  • 1.相机捕捉现实世界图像(由ARKit来完成)
  • 2.在图像中现实3D模型(由Scenekit来完成)

实现原理:
1.ARCamera用相机捕捉真实世界图像,ARSCNView将相机捕捉到的界面图像作为3D场景,他们两者之间通过ARSession连接起来的。而ARSession需要指定一个为会话追踪配置的对象ARSessionConfiguration,我们使用其子类ARWorldTrackingConfiguration来跟踪设备的方向和位置,以及检测设备摄像头看到的现实世界的表面。当ARWorldTrackingSessionConfiguration计算出相机在3D世界中的位置时会交给ARSession去管理,该位置是一个类ARFrame,ARSession有对应的属性currentFrame。
2.ARSCNView继承于SCNView,SCNView是来显示3D场景的,SCNView又继承于UIView。SCNView有个类型为SCNScene的属性scene表示3D世界的场景(万物皆是Scene),SCNScene有个根节点类型为SCNNode的rootNode,任何3D模型都可看作成一个节点然后添加到根节点,这样就可以在3D场景中显示该3D模型了。结构图如下:


ARKit初识浅谈_第1张图片
1798026-50bbc2f9a06fb069.png

相关代码如下:

override func viewDidLoad() {
        super.viewDidLoad()
        // 设置代理
        sceneView.delegate = self
        // 显示数据
        sceneView.showsStatistics = true
        //创建场景
        let scene = SCNScene()
        //创建球体模型,半径为0.1米
        let sphere = SCNSphere(radius: 0.1)
        //为模型添加渲染器
        let material = SCNMaterial() 
        material.diffuse.contents = UIImage(named: "earth.jpg")
        sphere.materials = [material]
        //创建节点
        let sphereNode = SCNNode(geometry: sphere)
        //设置节点的位置
        sphereNode.position = SCNVector3(0,0,-0.5)
        //添加到场景的根节点上
        scene.rootNode.addChildNode(sphereNode)
        sceneView.scene = scene
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let configuration = ARWorldTrackingConfiguration()
        //启动会话
        sceneView.session.run(configuration)
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        //停止会话
        sceneView.session.pause()
    }

效果如下:


ARKit初识浅谈_第2张图片
CC211523FACD6914778A55FF5F90D337.jpg

你可能感兴趣的:(ARKit初识浅谈)