美文网首页
ARKit学习

ARKit学习

作者: comsubin | 来源:发表于2017-08-07 14:33 被阅读0次

什么是ARKit

1.追踪

QQ20170804-135612.png
  • world tracking 全局追踪
    识别现实场景要显示的东西应该放在哪里 .

  • Visual inertial odometry 视觉惯性测距
    就像平常我们看东西一样.近大远小.

  • No external setup 没有外部设置
    苹果的意思就是说有一台iPhone就够了,不需要其他外设

2.场景理解

QQ20170804-140739.png
  • Plane detection 平面检测
    对现实平面是否水平面,斜面,垂直面进行检测

  • Hit-testig 命中测试
    当确定这个平面的时候,给虚拟物体加上重力计数,它会平放在那里

  • Light estimation 光估量
    摄像头传感器评估现场的光度,给你的虚拟物品加上阴影之类的

3.渲染

QQ20170804-141503.png
  • Easy integration 简单集合
  • AR views AR视图
  • Custom rendering 自定义渲染

简单来说 ARKit 就是利用相机捕捉现实世界然后在屏幕上显示3D模型.

  • 相机捕捉现实世界 ---->ARkit来实现
  • 显示自己的3D模型 ---->SceneKit

底层体系

006.png
  • ScenneKit iOS8后出来用来做游戏用的3D
  • SpriteKit iOS7把2D coco 再进行封装
  • Metal 操作GPU CPU的API 进行纹理,材质上的改变
007.png
  • AVFoudation 数据采集捕捉
  • CoreMotion 侦测手机移动,3d画面以怎样的角度显示等等

整个步骤

  • First step
    • ARSession //这是个单例,是ARKit的核心类,用于控制设备摄像头
      处理传感器数据,对捕捉的图像进行分析等等
  • Configurations
    • ARSessionConfiguration //跟踪设备方向的一个基本配置,在运行时候需要指定AR运行的配置

    • class ARWorldTrackingSessionConfiguration //配置跟踪设备的方向和位置,以及检测设备摄像头所看到的现实世界的表面

  • Standard Views
    • ARSCNView //用来增加相机通过3D Scenekit所捕捉到的内容并展示AR效果的一个View

    • ARSKView //用来增强相机通过2D SpriteKit所捕捉到的内容并展示AR效果的一个View

  • Real-World Objects and Positions
    • ARAnchor //真实世界的位置和方向,用于在一个AR场景中放置物体

    • APPlaneAnchor //在一个AR Session会话中检测一个真实世界的位置和方向的相关信息

    • ARHitTestResult //在一个AR Session会话中通过检测相机视图中的一个点来获取真是世界中表面的相关信息

  • Camera and Scene Details
    • ARFrame //捕获一个视频图像和位置追踪信息作为一个AR会话的一部分

    • ARCamera //在一个AR会话中摄像机的位置和成像特征信息为捕获视频帧

    • ARLightEstimate //在一个AR会话中估计场景照明信息关联到一个捕获的视频帧

Demo练习one

添加一个白色的球体到屏幕中

    //初始化配置
  override func viewDidLoad() {
      super.viewDidLoad()
      
      //设置追踪
      let configuration = ARWorldTrackingSessionConfiguration();
      
      //检测水平面
      configuration.planeDetection = .horizontal;
      
      //开始配置运行
      sceneView.session.run(configuration);
      
      // Do any additional setup after loading the view, typically from a nib.
  }

  func addCube(_ sender: Any) {
      //镜头前后的位置
      let zCoords = -0.5;

      print(zCoords);
      //单位米 0.1米 
      let culbeNode = SCNNode(geometry:SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0.1) );
       
      //出现在3维空间的位置
      culbeNode.position = SCNVector3(0,0,zCoords);
      
      //添加到根节点
      sceneView.scene.rootNode.addChildNode(culbeNode);
  }
demo1.jpg

Demo2

添加3D素材到屏幕上,这里用到的素材取自苹果的Demo,后面会给出的Demo链接和苹果的官方Demo链接

     //获取相机的坐标

   struct myCamraCoordinaties {
        
        var x = Float();
        var y = Float();
        var z = Float();
        
    }
   func getCamraCoordinaties(sceneViewm: ARSCNView) -> myCamraCoordinaties {
        
        let cameraTransForm = sceneView.session.currentFrame?.camera.transform;
        let cameraCoodrdiantes = MDLTransform(matrix: cameraTransForm!)
        
        var cc  = myCamraCoordinaties()
        
        cc.x = cameraCoodrdiantes.translation.x
        cc.y = cameraCoodrdiantes.translation.y
        cc.z = cameraCoodrdiantes.translation.z
        
        return cc;

    }
   func addCup(_ sender: Any) {
        
        let cupNode = SCNNode();
        
        let cc = getCamraCoordinaties(sceneViewm: sceneView);
        cupNode.position = SCNVector3(cc.x,cc.y,cc.z);
        
        guard let vitualObjectSecne = SCNScene(named:"cup.scn" ,inDirectory:"Models.scnassets/cup")else{
            
            return
        }
        let wrapperNode = SCNNode()
        
        for child in vitualObjectSecne.rootNode.childNodes {
            
            child.geometry?.firstMaterial?.lightingModel = .physicallyBased
            wrapperNode.addChildNode(child)
        }
        cupNode.addChildNode(wrapperNode);
        
        sceneView.scene.rootNode.addChildNode(cupNode);
        
    }

Demo.jpg

下载地址
[^官方Demo] https://developer.apple.com/sample-code/wwdc/2017/PlacingObjects.zip
[^文中Demo] https://github.com/FineaX/arkitDemoPractice

相关文章

  • 学习ARKit(三)

    前言 在前面两小节中(学习ARKit(一)、学习ARKit(二)),我们介绍了简单的介绍了AR与ARKit的相关概...

  • ARKit入门

    分享收藏关于ARKit的文章集 适合新手入门学习ARKit从入门到精通(1)-ARKit初体验ARKit从入门到精...

  • ARKit3.5 框架学习 (一)核心类简介(上)

    @[TOC] ARKit3.5 框架学习 (一)核心类简介(上) 1. ARKit框架简介 ARKit整合iOS...

  • 详解iOS之ARkit为何碾压对手(一)

    在这篇文章中,我们能学习到 1,ARKit简介与基本了解 2,ARKit的基本技术原理,平面检测 3,ARKit的...

  • ARKit学习 - ARKit介绍

    转载请注明出处Apple 原文地址:https://developer.apple.com/arkit/ Intr...

  • 学习ARKit(二)

    前言 前面一节学习ARKit(一)简单的介绍了AR与ARKit的相关概念,下面将深入到ARKit中来了解一下ARK...

  • ARKit学习

    什么是ARKit 1.追踪 world tracking 全局追踪识别现实场景要显示的东西应该放在哪里 . Vis...

  • ARKit-动画

    在ARKit中实现动画 一,SCNAction 二,核心动画 整理的一些ARKit 学习资料http://www....

  • ARKit教程09_第二部分:门户应用

    前言 对ARKit感兴趣的同学,可以订阅ARKit教程专题源代码地址在这里 正文 第一部分我们主要学习了ARKit...

  • 8月iOS Library Top5 ---2017.08

    1.ARKit-CoreLacation ARKit-CoreLacation将ARKit和CoreLocatio...

网友评论

      本文标题:ARKit学习

      本文链接:https://www.haomeiwen.com/subject/yttalxtx.html