ARKit入门01

简介

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

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

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

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

原理图

坐标

这里写图片描述

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

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

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
    这里写图片描述

  2. 选择SceneKit
    这里写图片描述

  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的正方体盒子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值