AR开发-接触AR

明天凌晨苹果17年秋季发布会就开始了,相信大家都已经知道了发布会的一大亮点-AR,本文就介绍一下iOS AR开发,(第一次写文章,有什么问题大家多担待)

一、认识AR

首先让我们了解一下AR,VR以及MR的含义。

1、VR(Virtual Reality 虚拟现实),是近年来出现的高新技术。虚拟现实是利用电脑模拟产生一个三维空间的虚拟世界,提供视觉、听觉、触觉的感官模拟,让使用者如身临其境。

2、AR(Augmented Reality 增强现实),它通过电脑技术,将虚拟的信息应用到真实世界,真实的环境和虚拟的物体实时地叠加到了同一个画面或空间同时存在。 之后的文章主要介绍的就是学习在iOS手机端上如何开发AR效果的app。

3、MR(Mix reality 混合现实)通过全息图,将现实环境与虚拟环境相互混合,也可以看成是VR与AR的混合。

这里的AR技术就是在摄像机里把虚拟世界的产物与现实世界进行交互。

二、一个最最简单的AR项目

项目准备

Xcode9可以直接创建AR项目,如下图选中项:

ARProject.png

这里语言用的是swift,content technology用的SceneKit

SceneKit 是 iOS中的一个3D引擎框架,代码中的一些类都是这个框架里面的。

此时,Xcode会自动为我们生成一段极其简洁的AR代码 代码如下:

设置场景

@IBOutlet var sceneView: ARSCNView!//这个是AR场景类

override func viewDidLoad() {
    super.viewDidLoad()

    // Set the view's delegate
    sceneView.delegate = self //设置代理
    
    // Show statistics such as fps and timing information
    sceneView.showsStatistics = true//是否显示底部的fps
    
    // Create a new scene
    let scene = SCNScene(named: "art.scnassets/ship.scn")!//场景赋予一张图片
    
    // Set the scene to the view
    sceneView.scene = scene//给场景视图添加场景
} 

AR场景跑起来

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    // Create a session configuration
    //创建一个追踪设备配置(ARWorldTrackingSessionConfiguration主要负责传感器追踪手机的移动和旋转)
    let configuration = ARWorldTrackingConfiguration()
    // 开始启动ARSession会话(启动AR)
    // Run the view's session
    sceneView.session.run(configuration)
}

最简单的AR效果的demo就出来了

IMG_0423.PNG

扩展一下

UIImageView *imgView = [UIImageView new];
imgView.image = [UIImage imageNamed:@"one"];//声明一张图片
创建一个平面几何图形,高为0.1米,宽为0.1米
SCNPlane *plane = [SCNPlane planeWithWidth:0.1 height:0.1];// 基于几何图形创建节点
SCNNode *node = [SCNNode nodeWithGeometry:plane]; //  节点的创建不仅仅是基于平面,根据SCNGeometry头文件里可见,长方体、圆球、圆锥、圆环、金字塔形 等等都可以创建。有兴趣的可以换着尝试一下。
node.position = SCNVector3Make(0, 0, -0.3); // 节点设置位置
 创建渲染器
SCNMaterial *material = [SCNMaterial material];
material.diffuse.contents = imgView.image;   // contents 属性可以设置很多东西,UILabel, UIImage,AVPlayer
node.position = SCNVector3Make(0, 0, -0.2);//设置图形的位置
plane.materials = @[material];//用渲染器对几何图形进行渲染
[scene.rootNode addChildNode:node];//添加节点

一个小猫的图片就在你的面前了


IMG_D6DA77656715-1.jpeg

弄个球体视频怎么样?

SCNSphere *sphere = [SCNSphere sphereWithRadius:0.1];//创建半径为10cm的球体
NSURL *url = [NSURL URLWithString:@"http://images.apple.com/media/cn/apple-events/2016/5102cb6c_73fd_4209_960a_6201fdb29e6e/keynote/apple-event-keynote-tft-cn-20160908_1536x640h.mp4"];
AVPlayer *avplayer = [[AVPlayer alloc]initWithURL:url];
material.diffuse.contents = sphere

[avplayer play];
IMG_9C147C98A3CF-1.jpeg

IMG_9BB29F78D41F-1.jpeg

最后提醒一下大家,设置模型的位置要注意,为了让模型在我们面前显示,坐标z要设置为负的(单位是米)

6271687-d17fec5e5c5fb628.png
  node.position = SCNVector3Make(0, 0, -0.4);

三、介绍一下AR效果实现、ARKit相关

基础技术视觉惯性测量计

ARKit 使用视觉惯性测量计 (Visual Inertial Odometry, VIO) 来精准追踪周围的世界。VIO将摄像头的传感器数据同 Core Motion 数据进行融合。这两种数据允许设备能够高精度地感测设备在房间内的动作,而且无需额外校准。

场景识别与光亮估量

借助 ARKit,iPhone 和 iPad 可以分析相机界main中所呈现的场景,并在房间当中寻找水平面。 ARKit 不仅可以检测诸如桌面和地板之类的水平面,还可以在较宵特征点 (feature points) 上追踪和放置对象。ARKit 还利用摄像头传感器来估算场景当中的可见光总亮度,并为虚拟对象添加符合环境照明量的光量。

高性能硬件与渲染优化

ARKit 运 在 Apple A9 和 A10 处 器上。这些处理器能够为 ARKit 提供突破性的性能,从而可以实现快速场景识别,并且还可以让您基于现实世界场景,来构建详细并引人注目的虚拟内容。 您可以 Metal、Scenekit 以及诸如 Unity、虚幻引擎之类的第三方工具,来对 ARKit 进行优化。

ARKit的主要类别

1. ARSession类

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

2. ARSessionConfiguration类

跟踪设备方向的一个基本配置, 在运行时,需要指定AR运行的配置

3. ARWorldTrackingSessionConfiguration类

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

4. ARSCNView类

用来增强相机通过 3D SceneKit 所捕捉到的内容并展示 AR 效果的一个 view

5. ARSKView类

来增强相机通过 2D SpriteKit 所捕捉到的内容并展 AR 效果的一个 view

6. ARAnchor类

真实世界的位置和方向, 用于在一个AR场景中放置一个物体

7. ARPlaneAnchor类

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

8. ARHitTestResult类

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

9. ARFrame类

捕获一个视频图像和位置追踪信息作为一个AR 会话的一部分。

10. ARCamera类

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

11. ARLightEstimate类

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

ARKit工作完整流程

(以下转自http://blog.csdn.net/u013263917/article/details/73038519)
1.ARSCNView加载场景SCNScene
2.SCNScene启动相机ARCamera开始捕捉场景
3.捕捉场景后ARSCNView开始将场景数据交给Session
4.Session通过管理ARSessionConfiguration实现场景的追踪并且返回一个ARFrame
5.给ARSCNView的scene添加一个子节点(3D物体模型)

ARSessionConfiguration捕捉相机3D位置的意义就在于能够在添加3D物体模型的时候计算出3D物体模型相对于相机的真实的矩阵位置
在3D坐标系统中,有一个世界坐标系和一个本地坐标系。类似于UIView的Frame和Bounds的区别,这种坐标之间的转换可以说是ARKit中最难的部分

ARKit框架工作流程可以参考下图:


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

推荐阅读更多精彩内容