WWDC 2017 - ARKit 简介

构建了新的本地 MarkDown 工具
MWeb + 七牛图床
拿这篇文章测试一下

这篇文章是 ARKit \ Session 602 的一些整理。【基于OC】
转自我的 Blog: Danny's Dream

这应该是这届 WWDC 发布的最酷的几个功能之一了。也是最吸引我的几个功能之一,所以在看完预览介绍之后,就直接看了这个视频。

上来展示了两个应用场景,一个是幼儿教育的视频,能把童话故事展示到床上。还有一个是宜家的家具展示,可以把宜家的家具放到你家中,并且尺寸还是真实的大小。

支持的设备

  • A9及及以上的处理器 【6s 及 以上设备,估计是需要较高的运算,我用的测试设备是 se ,跑起来手机热量及耗电感人】
  • iOS 11

AR技术的主要技术点

追踪

追踪手机本身的变化,包括角度,空间位置等。

场景理解

  • 平面探测 【AR物体,需要展示的界面】
  • Hit-testing 【当没有规则平面的时候,进行的操作,类似于点击直接的hit-test,判断图像中的模块是否为平面】
  • 光影推测 【相当酷的一个功能,为了能让 AR 渲染出来的更加逼真,ARKit 会先去判断当前的光影结构,并渲染在物体画面上】

渲染

顾名思义,就是怎么把 3D 的物体以一种立体的模式渲染到平面图像上,提供了 SceneKit,SpriteKit,Metal 等三种渲染方式,当然你也可以通过 Unity ,Unreal 等引擎做渲染。这一步的开放,意味着开发的成本更低。
主要的结构如下:

WWDC 2017 - ARKit 简介_第1张图片
screenshot

代码介绍

画面捕捉

画面通过摄像头来获取,通过 AVFoundation 和 CoreMotion,所以 AR 应用要获取摄像头的权限。

ARSession

ARKit 中最主要的类,它的用法和 NSUrlSession 的模式很像,应该是相似的设计思想。

首先构造 ARSessionConfiguration ,它和 NSURLSessionTask 一样是抽象的接口
实现分为以下:

  • ARWorldTrackingSessionConfiguration 提供 6 个维度空间的设备追踪参数,一旦 Session pause 了,不能恢复追踪。
    ARWorldTrackingSessionConfiguration 提供 isSupported 来判断当前设备是否支持 AR。
开始
  // Create a session configuration
    ARWorldTrackingSessionConfiguration *configuration = [ARWorldTrackingSessionConfiguration new];
    
    // Run the view's session
    [self.session runWithConfiguration:configuration];

通过 ARSession 的 run 方法来开始追踪。

停止

当不再使用的时候,如 viewWillDisappear 的时候,执行 pause 方法停止追踪。

  // Pause the view's session
    [self.session pause];
恢复

需要恢复的时候调用要重新 run 一个 Configuration 。

重置

在需要重置的时候,调用如下方法

[self.session runWithConfiguration:configuration options:ARSessionRunOptionResetTracking]

ARSessionDelegate

ARSession 提供的代理方法

@protocol ARSessionDelegate 


@optional


/**
 当一个新的 frame 绘制的时触发
 */
- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame;


/**
当一个新的 ARAnchor 加到 Session 的时触发
 */
- (void)session:(ARSession *)session didAddAnchors:(NSArray*)anchors;


/**
当 ARAnchor 刷新的时候触发
 */
- (void)session:(ARSession *)session didUpdateAnchors:(NSArray*)anchors;


/**
 当 ARAnchor 被移除的时候触发
 */
- (void)session:(ARSession *)session didRemoveAnchors:(NSArray*)anchors;


@end

关键参数介绍

ARFrame

Scense understanding 场景的理解

Plane detection

Hit-testing

Light estimate 渲染

你可能感兴趣的:(WWDC 2017 - ARKit 简介)