ARKit入门(一)

1.什么是增强现实(Augmented Reality,简称AR)?

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

增强现实创造了虚拟物体被放置在物理世界的错觉。它是用你的iPhone或iPad作为一个镜头,根据你的相机所看到的,创建一些虚拟的3D模型放在相机所看到的物理世界。

2.ARKit的介绍

(1)苹果在2017年6月6日发布的iOS11系统所新增框架,其中就包括ARKit,它能够帮助我们以最简单快捷的方式实现AR技术功能。

(2)ARKit框架作用就在于将相机捕捉的界面作为3D场景,然后展示在ARSceneView上。ARKit框架是基于`AVFoundation`和`CoreMotion`这两个框架上开发的

3.ARKit的特性

(1)追踪

* 全局跟踪:是ARKit的核心功能。它是能够实时跟踪你的设备的能力。通过全局追踪,我们提供了在物理环境中获得设备相对位置的能力。我们使用视觉惯性的odometry,它使用相机图像,以及来自你的设备的运动数据,以得到你的设备所在位置的精确视图,以及它的方向。

* 视觉惯性测距:使用相机图像,以及来自你的设备的运动数据,以得到你的设备所在位置的精确视图,以及它的方向。

* 没有外部设备:没有预先存在的关于环境的知识,也没有在设备上没有的额外传感器。

(2)场景理解

* 平面检测:是指在物理环境中确定平面或平面的能力。

* 命中测试:得到了一个与现实世界拓扑的交集,这样你就可以把虚拟物体放到物理世界中。

* 光估计:是用来渲染或正确地照亮你的虚拟几何,以与物理世界相匹配。使用所有这些,我们可以无缝地将虚拟内容集成到您的物理环境中。

(3)渲染

* 简单集合:通过一个数组来组合不同的渲染功能集成到虚拟的模型上

* AR视图:使用SceneKit(3D)和SpriteKit(2D)来呈现大部分的AR视图

* 自定义渲染:通过Unity和UnReal来支持AR的全套渲染功能

4.开发环境介绍

1.Xcode版本:Xcode9及以上

2.iOS系统:iOS11及以上

3.iOS设备:处理器A9及以上(6S机型及以上)

4.MacOS系统:10.12.4及以上(安装Xcode9对Mac系统版本有要求)

5.链接地址:https://developer.apple.com/download/

6.注意点:ARKit虽然是iOS11新出的框架,但并不是所有的iOS11系统都可以使用,而是必须要是处理器A9及以上才能够使用,苹果从iPhone6s开始使用A9处理器,也就是iPhone6及以前的机型无法使用ARKit。

5.ARKit初体验之3D效果

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

* 2.在包含技术选项中选择SceneKit

* 3.创建完成项目以后点击 art.scnassets->ship.scn 中,然后就会出现苹果自带了3D的飞机模型

* 4.然后我们在`ViewController.swift`里面可以看到以下代码

```

import UIKit

import SceneKit

import ARKit

class ViewController: UIViewController, ARSCNViewDelegate {

// ARKit框架中用于3D显示的预览视图

@IBOutlet var sceneView: ARSCNView!

override func viewDidLoad() {

super.viewDidLoad()

// Set the view's delegate

// 设置代理

sceneView.delegate = self

// Show statistics such as fps and timing information

// 显示帧率信息的属性

sceneView.showsStatistics = true

// Create a new scene

// 使用模型创建一个新的场景(这里使用系统自带的3D飞机模型创建的场景)

let scene = SCNScene(named: "art.scnassets/ship.scn")!

// Set the scene to the view

// 读取上面所创建的场景(也就是把场景丢到sceneView上,就可以呈现出来)

sceneView.scene = scene

}

override func viewWillAppear(_ animated: Bool) {

super.viewWillAppear(animated)

// Create a session configuration

// 设置一个追踪,任何一个AR都要设置追踪

let configuration = ARWorldTrackingConfiguration()

// Run the view's session

// 通过run方法启动追踪

sceneView.session.run(configuration)

}

override func viewWillDisappear(_ animated: Bool) {

super.viewWillDisappear(animated)

// Pause the view's session

// 暂停追踪(暂停追踪后,可以通过run方法重新启动追踪)

sceneView.session.pause()

}

}

```

* 5.在iOS11的设备上直接运行以上代码,就会在相机上面出现一个3D的小飞机,然后可以看看3D的真实效果。

* 6.体验过3D效果之后,接下来介绍一下ARKit的几个类


(1) ARSession类

    这是一个单例类,是ARKit的核心类,用于控制设备摄像头,处理传感器数据,对捕获的图像进行分析等等。

    每个使用ARKit创建的AR工程必须要有一个ARSession单例对象,如果你使用ARSCNView或者ARSKView来更容易的创建AR工程的一部分,这个View已经包含了一个ARSession实例,如果你使用自己编写的渲染器来渲染AR内容,你必须实例化和持有一个ARSession对象。

    ARSession使用之前需要对它进行一个追踪,设置ARSessionConfiguration的一个追踪,然后通过run方法启动追踪,当你启动追踪的时候,就真正的启动了ARSession,ARSession处理AVFoundation(看得见,听得到的东西)和CoreMotion(动作处理),处理完之后就生成一个一个ARFrame,也就是帧数再展现出来。

(2)SCNScene

    SCNScene:具有连接的几何图形,灯光,照相机和其他属性的节点的层次结构,其一起形成可显示的3D场景。

    ARScnView显示先要创建一个场景,也就是SCNScene,可以从使用外部3D创作工具创建的文件中获取场景。如果在应用程序的资源管理资源目录中包含场景文件,则Xcode会压缩它们以获得最佳的SceneKit加载性能。要加载场景文件,使用init(named:),或方法或实例的类。init(named:inDirectory:options:) or init(url:options:)SCNSceneSource

    在使用AR之前,先看看下面这张图,会对AR里面节点位置的理解有一定的帮助

* 7.说了这么多,接下来我们就来玩一玩AR

在viewDidLoad里面创建一个空场景

```

// 创建一个空场景

let scene = SCNScene()

/**

创建模型(这里可以创建多种模型)

SCNPlane      飞机模型

SCNBox        盒子

SCNPyramid    金字塔

SCNSphere    球体

SCNCylinder  圆柱体

SCNCone      圆锥

SCNTube      管

SCNCapsule    胶囊

SCNTorus      环形半径和管半径

SCNFloor      平面几何

SCNText      文本块

SCNShape      二维形状

*/

// 创建一个盒子的模型,并设置它的长宽高和圆角

let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)

// 创建节点

// 节点的解释:通俗的来说就是在AR场景里面,一个3D物件就代表一个节点

let boxNode = SCNNode(geometry: box)

// 设置节点的位置, x,y,z轴位置(可以根据上面的3D图理解)

boxNode.position = SCNVector3(0,0,-0.2)

// 把节点放到根节点上去

scene.rootNode.addChildNode(boxNode)

// 显示场景

sceneView.scene = scene

```

以上代码,就是我使用SCNBox创建的盒子3D模型,效果图如下


但是现在的盒子还是白色的,接下来我就为它上点颜色,也就是使用SceneKit里面的渲染功能

``````

// 创建渲染器

let material = SCNMaterial()

// 设置渲染属性

material.diffuse.contents = UIColor.blue

// 在这里不仅可以设置颜色,还可以设置图片和gif图等

// material.diffuse.contents = UIImage(named: "brick.png")

// 将渲染添加到盒子上

box.materials = [material]

``````

暂时写到着,稍后有时间再继续更新,大家对本文有什么意见欢迎提出来,我也会及时改善,也希望大家多多关注。谢谢。

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

推荐阅读更多精彩内容

  • 笔者在上篇文章中对ARKit进行了简单介绍,在本篇文章中主要介绍ARKit中经常用到的API及使用方法。了解这些A...
    未明一二阅读 1,167评论 1 7
  • ARKit ARKit框架通过集成iOS设备摄像头和运动功能,在您的应用程序或游戏中产生增强现实体验。 概述 增强...
    暗夜夜夜行路阅读 5,764评论 0 17
  • ARkit Introducing ARKit iOS 11引入ARKit,这是 个全新的框架,允许开发者轻松地为...
    坤哥爱卿阅读 1,311评论 0 1
  • 我要入睡, 安置疲惫的身体, 放灵魂升空, 入幽兰的星海里, 腐败、糜烂, 沉降入夜色, 点亮迷路的人。
    H3190阅读 66评论 0 0
  • 琴音 那一缕 总会飘进 深更梦境 湿枕 唤醒啼眼 咯吱咯吱 在床上辗转 就要 到冬至 云急着往南搬家 呼啸 从高处...
    冷眼加白眼阅读 275评论 2 3