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模型了。结构图如下:


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()
    }

效果如下:


CC211523FACD6914778A55FF5F90D337.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、AR简介: 多媒体捕捉现实图像:如摄像头 三维建模:3D立体模型 传感器追踪:主要追踪现实世界动态物体的六轴变...
    DeerRun阅读 5,337评论 0 2
  • 转载文章:ARKit从入门到精通(2)-ARKit工作原理及流程介绍 1.1-写在前面的话 1.2-ARKit与S...
    泥孩儿0107阅读 4,097评论 0 3
  • Blade 帮助扩展能让你写更少的代码并且写得更优雅。 使用标准的 @else 标签来处理有角色或权限限制的对立情况。
    伍源辉阅读 2,338评论 0 0
  • 从昨天开始,我把微信以及qq的所有朋友空间设为“不看”,并且把我空间设为仅自己可见。 其实几个月钱就有看到各方大神...
    Singaforever阅读 2,383评论 0 1
  • 执一支素笔 填一阙旧词 寄一笺相思 念一生牵挂 许一世情深 千山万水 笔墨相逢 唯与你相约 野草诗会:雪花体原创诗...
    姝瑾儿阅读 2,338评论 23 33