ARKit学习

什么是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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容

  • 一、AR简介: 增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及...
    rectinajh阅读 2,069评论 0 6
  • 这篇文章来自"Why is ARKit better than the alternatives",作者是Matt...
    郭少悲阅读 1,223评论 0 2
  • ARKit demo传送门 持续优化更新中... ARKit 简介 增强现实技术(Augmented Realit...
    omni_Hsin阅读 2,317评论 1 5
  • 转载请注明出处Apple原文地址:https://developer.apple.com/documentatio...
    小羊快跑阅读 332评论 0 2
  • 每天在现实和理想中挣扎,挣扎什么呢?我不知晓。 抽烟,喝酒,纹身,彻夜不归,那些想改变自己,不想合流,却用着差不多...
    白日梦录像出租店阅读 224评论 0 0