玩转ARKit_01初体验

ARKit介绍

是什么?

  • ARKit是2017年6月6日,苹果发布iOS11系统所新增框架,它能够帮助我们以最简单快捷的方式实现AR技术功能。

  • ARKit框架提供了两种AR技术,一种是基于3D场景(SceneKit)实现的增强现实,一种是基于2D场景(SpriktKit)实现的增强现实

对ARKit不是很了解的伙伴可以移步这里。传送门

ARKit官方文档翻译 //www.greatytc.com/p/e373f7f96b5c

做什么?

  • 通过摄像头和虚拟世界进行联通,改变人机的交互方式。

怎么做?

开发环境介绍
  • Xcode9(最新版的是Xcode9 beta6 如果是最新Xcode 要macOS High Sierra 10.12.6版本)

  • A9硬件iOS手机设备从6s开始使用

  • ios 11 下载地址 https://developer.apple.com/download/ 升级iOS11时可用手机Safari打开下载安装较为方便

废话不多说,先来几张效果图
  • 系统提供的飞机模型
IMG_1937.PNG
  • 立方体
IMG_1942.PNG
  • 球体
IMG_1944.PNG

猝不及防 - 实战开始

  • Xcode9 新建AR项目 如图两步就OK了


    屏幕快照 2017-09-03 15.42.51.png
屏幕快照 2017-09-03 15.43.16.png
此刻只需要运行你的Xcode就ok了 ,没意外你就能看到图一的场景了 ,这么简单就没了,当然不是,我们要做的是在虚拟现实中多创建几个节点,细心的同学就会看到第一张图的左下角有个不明物体

首先来熟悉一下即将出现的陌生类

  • ARSCNView 用来显示3D模型的视图视图容器
  • SCNScene 3D的场景
  • ARSessionConfiguration 增强现实的配置会话
  • ARWorldTrackingSessionConfiguration全球配置追踪 比较重要 ARKit常用类
  • SCNPlane 平面
  • SCNNode 节点 在虚拟世界里面 万物皆节点
屏幕快照 2017-09-03 16.18.20.png
屏幕快照 2017-09-03 14.50.08.png

3D世界的坐标系

屏幕快照 2017-09-03 14.49.12.png

代码如下

实现 : 对飞机模型的AR场景 进行截图 在增强现实的场景中创建多个节点(模型)

Tip - 在虚拟世界中万物皆模型

步骤
  • 1.判断能不能获取到当前的Frame
  • 2.创建一张截图
  • 3.对创建的图片进行截图
  • 4.通过截图创建一个节点并加到AR场景的根节点上
  • 5.追踪相机的位置
//
//  ViewController.swift
//  ARKit初体验
//
//  Created by cwb on 2017/9/1.
//  Copyright © 2017年 cwb. All rights reserved.
//

import UIKit
import SceneKit
import ARKit

class ViewController: UIViewController, ARSCNViewDelegate {
   
   //用来展示3D模型的视图
   @IBOutlet var sceneView: ARSCNView!
   
   override func viewDidLoad() {
       super.viewDidLoad()
       
       // Set the view's delegate
       //设置3D场景视图的的代理
       sceneView.delegate = self
       
       // Show statistics such as fps and timing information
       //显示统计数据 如fps
       sceneView.showsStatistics = true
       
       // Create a new scene
       //创建一个场景 named: "art.scnassets/ship.scn" 读取一个模型
       let scene = SCNScene(named: "art.scnassets/ship.scn")!
       
       // Set the scene to the view
       sceneView.scene = scene
   }
   override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       
       // Create a session configuration
       //设置全局追踪
       let configuration = ARWorldTrackingConfiguration()
       
       // Run the view's session
       //启动追踪
       sceneView.session.run(configuration)
       
       
       //创建一个手势
       
      let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.creatImageNode(tapGesture:)))
       view.addGestureRecognizer(tapGesture)
   }
   
   @objc func creatImageNodeWithTap(tapGesture:UITapGestureRecognizer) -> () {
       /*
        实现 : 对飞机模型的AR场景 进行截图 在增强现实的场景中创建多个节点(模型) 在虚拟世界中万物皆模型
        1.判断能不能获取到当前的Frame
        2.创建一张截图
        3.对创建的图片进行截图
        4.通过截图创建一个节点并加到AR场景的根节点上
        4.追踪相机的位置
        
        */
       //守护  如果满足条件就往下执行 否则执行 return语句
       guard let currentFrame = sceneView.session.currentFrame else {
           return
       }
       
       //  创建一张图片
       //SCNPlane
       //  A rectangular, one-sided plane geometry of specified width and height.   API
       //翻译 SCNPlane创建的对象是一个有指定宽高的平面矩形
       let imagePlane = SCNPlane(width: sceneView.bounds.width / 8000, height: sceneView.bounds.height / 8000)
       //  渲染图片
       /*
        SCNMaterial 渲染器
        API  A set of shading attributes that define the appearance of a geometry's surface when rendered.
        翻译  用来定义 几何表面被渲染时候的阴影属性
        firstMaterial 获取几何上的第一个渲染物
        diffuse
        Specifies the receiver's diffuse property
        diffuse 接收特定的属性
        */
   /*
    lightingModel  环境的光感变量 (以下来自百度翻译和自己的理解 不足及错误之处请指正)

    blinn:
    Shading that incorporates ambient, diffuse, and specular properties, where specular highlights are calculated using the Blinn-Phong formula.

    阴影包含三个要素 : 环境 漫射 和 镜面 blinn属性是用Blinn-Phong公式计算的高光效果
    constant:
    Uniform shading that incorporates ambient lighting only.
    均匀的环境  只包含了光线

    lambert:
    Shading that incorporates ambient and diffuse properties only.
    仅包含环境属性和漫射属性

    phong:

    Shading that incorporates ambient, diffuse, and specular properties, where specular highlights are calculated using the Phong formula.
    明暗结合环境,扩散,和镜面反射特性,在高光使用Phong公式计算
    physicallyBased:
    Shading based on a realistic abstraction of physical lights and materials.
    基于物理光线和材质的真实抽象的阴影。
    */
       // 在创建的图片平面上截屏
       imagePlane.firstMaterial?.diffuse.contents = sceneView.snapshot()
       imagePlane.firstMaterial?.lightingModel = .constant  
       //   在图片的几何平面上創建一個節點
       let planNode = SCNNode(geometry: imagePlane)
       //把该节点添加到AR场景的根节点上
       sceneView.scene.rootNode.addChildNode(planNode)
       //      追蹤相機的位置 (参考z轴)
       /*
        4X4的矩阵
        matrix_identity_float4x4
        columns.3.z  3代表3轴 xyz
        */
       var translate = matrix_identity_float4x4
       //在z轴的-0.1米的方向  在面前能显示  正数的话显示在后脑勺
       translate.columns.3.z = -0.1
       //      追蹤相機的位置
       //把截图显示在相机的前方10公分处
       planNode.simdTransform = matrix_multiply(currentFrame.camera.transform, translate)
   }
 
   override func viewWillDisappear(_ animated: Bool) {
       super.viewWillDisappear(animated)

       // Pause the view's session

       //暂停追踪
       sceneView.session.pause()
   }
实现效果
IMG_1935.PNG

总结

  • 简单粗暴的实现了对系统的飞机模型的增强现实世界的截屏,并把得到的平面几何作为一个新的节点现实在场景中。

  • 效果图中的正方体和球体由于篇幅问题代码未贴出,用到了SCNBox(正方体),和SCNSphere(球体)

  • 代码下载地址 https://github.com/ichenwanbing/ARKit-

联系我

需要资料的可以私信我或直接邮箱/QQ

欢迎点赞/拍砖

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

推荐阅读更多精彩内容

  • (一) AR(增强现实技术)介绍 增强现实(Augmented Reality,简称 AR),是一种实时地计算摄影...
    NewSongs阅读 2,291评论 5 53
  • 转载请标注出处:http://blog.csdn.net/u013263917/article/details/7...
    Jonath阅读 457评论 0 1
  • ARKit ARKit框架通过集成iOS设备摄像头和运动功能,在您的应用程序或游戏中产生增强现实体验。 概述 增强...
    暗夜夜夜行路阅读 5,773评论 0 17
  • 说到OPPO系列手机,很多消费者都表示不会购买,毕竟配置较低,而手机价格一点也不亲民。但是,纵观OPPO R9的销...
    喇叭兔阅读 433评论 0 0
  • 今天是周一,女儿要开始第三天的幼儿园生活了。 八点了,我已经把自己整理妥当,然后叫儿子女儿起床。儿子说...
    玲萍阅读 196评论 4 2