ARKit入门01

简介

增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像、视频、3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。

ARKit是基于AVFoundation框架和CoreMotion框架的

所需

  1. A9以上设备 (不支持模拟器)se 6s 6sp 7 7p
  2. xcode9 bates,iOS11,xcode9

特性

  1. 追踪:追踪现实和虚拟场景
  • 全局追蹤:追踪现实场景和虚拟场景,就像真实的存在现实中
  • 视觉惯性测距VIO:肉眼看到效果,远离所需,拉近放大
  • 没有外部设置:不需要外部设备(投影仪等)
  1. 场景理解:
  • 平面监测:现实世界都是有细小的平面构成
  • 命中测试:两个物件发生接触,产生一些反应
  • 光估计:用光照的方法,让物体更逼真。比如影子
  1. 渲染
  • 简单集合:用xcode自带的可以实现渲染。SceneKit(iOS8出现、3d场景)、SpriteKit(iOS7出现,2d场景)2D、Metal(iOS7出现,不支持模拟器)
  • AR视图:ARview,物件以arView的形式出现
  • 自定义渲染:可以使用其他引擎渲染,支持(Unity、Unreal)

运行原理

相机捕捉显示世界->arkit
显示3D模型->SceneKit
通过AR回话->ARSession使两者交互

ARKit入门01_第1张图片
原理图

坐标

ARKit入门01_第2张图片
这里写图片描述

x,y,z
是以相机的位置为中心,所以轴的负值标识我们正前方,正值表示我们的后方(后脑勺)
单位是米

ARSession

  • 使用之前设置一个追踪ARSessionConfiguration(来追踪设备方向的基本配置)
  • 通过run方法启用
  • 来处理是用来管理设备相机的共享对象(AVCaptureSession)和增强现实所需的处理(CMMotionmanager)
  • 最终生成一个一个的frame展示
ARKit入门01_第3张图片
Arssion

基本步骤

  1. ARSCNView加载场景SCNScene
  2. SCNScene启动相机ARCamera开始捕捉场景
  3. 捕捉场景后ARSCNView开始将场景数据交给Session
  4. Session通过管理ARSessionConfiguration实现场景的追踪并且返回一个ARFrame
  5. 给ARSCNView的scene添加一个子节点(3D物体模型)

入门掌握四大基础点

  1. 几何
  2. 节点
  3. 渲染
  4. 手势

demo

  • 用到的关键类:
    • 场景视图(ARSCNView)
    • 场景(SCNScene)
    • 几何(SCNGeometry)
    • 节点(SCNNode)
    • 渲染器(SCNMaterial)
  • 如何在空间中放一个平面
    1. 创建场景视图 ARSCNView,设置代理
    2. 创建一个场景 SCNScene,给场景视图绑定场景
    3. 创建一个平面几何形状 (box,plane)
    4. 基于几何形状创建一个节点SCNNode
    5. 创建一个渲染器SCNMaterial,用其对平面几何进行渲染
    6. 添加节点到场景的根节点中

demo1

  1. 打开Xcode9bete版本,新建一个工程,选择Augmented Reality APP(Xcode9新增),点击next


    ARKit入门01_第4张图片
    这里写图片描述
  2. 选择SceneKit


    ARKit入门01_第5张图片
    这里写图片描述
  3. 此时,Xcode会自动为我们生成一段极其简洁的AR代码
    效果图后面补上

demo2

 override func viewDidLoad() {
        super.viewDidLoad()
        
        // Set the view's delegate
         //1.设置场景代理
        sceneView.delegate = self
        
        // Show statistics such as fps and timing information
        sceneView.showsStatistics = true
    
        //2.创建场景
        let scene = SCNScene()
        //3.创建几何
        let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
 
        //4. 渲染  渲染器可以决定怎样渲染,这个 contents属性可以设置很多东西,UILabel, UIImage,甚至 AVPlayer都可以
        let material = SCNMaterial() //
        material.diffuse.contents = UIColor.red
//        material.diffuse.contents = UIImage(named: "brick.png")
      //5.对几何进行渲染
        box.materials = [material]

//       6. 创建节点
        let boxNode = SCNNode(geometry: box)
//       7.设置节点位置
        boxNode.position = SCNVector3(0,0,-0.2)
//       8. 把节点放到根节点上
        scene.rootNode.addChildNode(boxNode)

        sceneView.scene = scene

    }

这样就能我们面前就有一个红色的长宽高都是0.1m的正方体盒子

你可能感兴趣的:(ARKit入门01)