专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

ARKit从入门到精通-ARKit工作原理及流程介绍

Cocoa开发者社区  · 公众号  · ios  · 2017-06-15 11:01

正文

转载请注明出处: http://www.jianshu.com/p/0492c7122d2f

1.1-写在前面的话

  • 初次接触 ARKit ,很多人会为其复杂的架构关系而感到畏惧。这里笔者将以最基础简介的方式带领一下一睹苹果原生AR(虚拟增强现实)的风采

  • ARKit并不是一个独立就能够运行的框架,而是必须要SceneKit一起用才可以,换一句话说,如果只有 ,而没有 ,那么ARKit和一般的相机没有任何区别

  • 由于笔者从事多年的iOS应用开发,并没有从事过3D游戏的开发(只是业余爱好写了一个3D打飞机的游戏),所以在本篇介绍 ARKit 的过程中,我们将以最小的篇幅来介绍 SceneKit ,毕竟如果没有丰富的3D游戏开发经验,那么光是相机捕捉到的2D界面如果转化为3D世界的矩阵都非常难以理解

    • 关于3D系统X/Y/Z,与4x4矩阵等之间的转换及关系,不会过多深入,笔者将保证每一个不懂3D游戏开发的人都可以学习如何使用ARKit

    • 笔者认为:ARKit最难的部分在于3D坐标的矩阵转换

  • 笔者介绍ARKit的流程大概如下

    • 笔者没有单独的3D模型,这里主要以苹果官方给出的参考3D模型(飞机)来实现

    • 1.介绍ARKit的工作原理及流程(本篇)

    • 2.通过对ARKit的原理及流程的了解,我们自定义实现ARKit

    • 3.介绍ARKit框架中的所有API,PS:是翻译官方整个ARKit框架中所有的API………………~

    • 4.介绍ARKit框架中几个重量级的类 ARScnView , ARSession , ARCamera

    • 5.ARKit实现捕捉现实世界中的平地,并将虚拟物体添加到平地中

    • 6.ARKit实现让虚拟物体跟随相机移动

    • 7.ARKit实现让虚拟物体围绕摄像机(拿着iPhone的人)旋转

1.2-ARKit与SceneKit的关系

  • 1.在上一小节中介绍过,AR技术叫做虚拟增强现实,也就是在相机捕捉到的现实世界的图像中显示一个虚拟的3D模型。这一过程可以分为两个步骤:

    • SceneKit 来实现

    • ARKit 来实现

    • 一:相机捕捉现实世界图像

    • 二:在图像中显示虚拟3D模型

  • 2.下图是一个 框架关系图,通过下图可以看出

    • 今后在介绍使用 ARSCNView 时将不再累述这一关系,可以简单的理解为: ARSCNView 所有跟场景和虚拟物体相关的属性及方法都是自己父类 SCNView

    • ARSession的作用及原理将在本篇下一小节介绍

    • UIView的作用是将视图显示在iOS设备的window中,SCNView的作用是显示一个3D场景,ARScnView的作用也是显示一个3D场景,只不过这个3D场景是由摄像头捕捉到的现实世界图像构成的

    • 继承:子类拥有父类所有的属性及方法

    • 1. 框架中中显示3D虚拟增强现实的视图 ARSCNView 继承于 框架中的 SCNView ,而 SCNView 又继承于 框架中的 UIView

    • 2. ARSCNView 只是一个视图容器,它的作用是管理一个 ARSession ,笔者称之为AR会话。

    • 3.在一个完整的虚拟增强现实体验中, 框架只负责将真实世界画面转变为一个3D场景,这一个转变的过程主要分为两个环节: ARCamera 负责捕捉摄像头画面,由 ARSession 负责搭建3D场景。

    • 4.在一个完整的虚拟增强现实体验中,将虚拟物体现实在3D场景中是由 框架来完成中: 每一个虚拟的物体都是一个节点 SCNNode ,每一个节点构成了一个场景 SCNScene ,无数个场景构成了3D世界

    • 5.综上所述,ARKit捕捉3D现实世界使用的是自身的功能,这个功能是在iOS11新增的。而ARKit在3D现实场景中添加虚拟物体使用的是父类 SCNView 的功能,这个功能早在iOS8时就已经添加(SceneKit是iOS8新增)


0301.png

1.3-ARKit工作原理

1.3.1-ARSCNView与ARSession

  • 1.ARKit提供两种虚拟增强现实视图,他们分别是3D效果的 ARSCNView 和2D效果的 ARSKView (关于3D效果和2D效果区别以及在上一小节介绍),无论是使用哪一个视图都是用了相机图像作为背景视图(这里可以参考iOS自定义相机中的预览图层),而这一个相机的图像就是由 框架中的相机类 ARCamera 来捕捉的。

  • 2. ARSCNView ARCamera 两者之间并没有直接的关系,它们之间是通过AR会话,也就是ARKit框架中非常重量级的一个类 ARSession 来搭建沟通桥梁的

    • context与session不同之处是:一般与硬件打交道,例如摄像头捕捉ARSession,网卡的调用NSURLSession等使用的都是session后缀。没有硬件参与,一般用context,如绘图上下文,自定义转场上下文等

    • 在iOS框架中,凡是带session或者context后缀的,这种类一般自己不干活,作用一般都是两个:1.管理其他类,帮助他们搭建沟通桥梁,好处就是解耦 2.负责帮助我们管理复杂环境下的内存

  • 3.要想运行一个 ARSession 会话,你必须要指定一个称之为 会话追踪配置 的对象: ARSessionConfiguration , ARSessionConfiguration 的主要目的就是负责追踪相机在3D世界中的位置以及一些特征场景的捕捉(例如平面捕捉),这个类本身比较简单却作用巨大

    • ARSessionConfiguration 是一个父类,为了更好的看到增强现实的效果,苹果官方建议我们使用它的子类 ARWorldTrackingSessionConfiguration ,该类只支持 A9 芯片之后的机型,也就是iPhone6s之后的机型


0302.png

1.3.2-ARWorldTrackingSessionConfiguration与ARFrame

  • 1.ARSession搭建沟通桥梁的参与者主要有两个 ARWorldTrackingSessionConfiguration ARFrame







请到「今天看啥」查看全文