1.1-AR技术简介
增强现实技术,它是一种将真实世界信息和虚拟世界信息“无缝”集成的新技术,是把原本在现实世界的一定时间空间范围内很难体验到的实体信息(视觉信息,声音,味道,触觉等),通过电脑等科学技术,模拟仿真后再叠加,将虚拟的信息应用到真实世界,被人类感官所感知,从而达到超越现实的感官体验。真实的环境和虚拟的物体实时地叠加到了同一个画面或空间同时存在。
一个最简单地AR场景实现所需要的技术以及步骤包含如下
1.多媒体捕捉现实图像:如摄像头
2.三维建模:3D立体模型
3.传感器追踪:主要追踪现实世界动态物体的六轴变化,这六轴分别是X、Y、Z轴位移及旋转。其中位移三轴决定物体的方位和大小,旋转三周决定物体显示的区域。
4.坐标识别及转换:3D模型显示在现实图像中不是单纯的frame坐标点,而是一个三维的矩阵坐标。这基本上也是学习AR最难的部分,好在ARKit帮助我们大大简化了这一过程。
4.除此之外,AR还可以与虚拟物体进行一些交互。
1.2-ARKit概述及特点介绍
苹果在 2017年WWDC 上发布了ARKit 全新的AR框架,使得开发者可以更快速的为iphone或ipad 构建增强现实应用,这也毫无疑问的使得ios成为全球最大的AR开发平台。
开发环境:
1.Xcode版本:Xcode9及以上
2.iOS系统:iOS11.0及以上
3.iOS设备:处理器A9及以上(6S机型及以上)
4.MacOS系统:10.12.4及以上(安装Xcode9对Mac系统版本有要求)
特点:
ARKit框架提供了两种AR技术,一种是基于3D场景(SceneKit)实现的增强现实,一种是基于2D场景(SpriktKit)实现的增强现实一般主流都是基于3D实现AR技术,ARKit不仅支持3D游戏引擎SceneKit还支持2D游戏引擎SpriktKit,这一点出乎笔者意料之外要想显示AR效果,必须要依赖于苹果的游戏引擎框架(3D引擎SceneKit,2D引擎SpriktKit),主要原因是游戏引擎才可以加载物体模型。虽然ARKit框架中视图对象继承于UIView,但是由于目前ARKit框架本身只包含相机追踪,不能直接加载物体模型,所以只能依赖于游戏引擎加载ARKit。
1.3-ARKit初体验
使用ARKit需要理解有2个东西:
1、ARSCNView 一种显示AR体验的视图,它通过3D SceneKit内容增强了相机视图。
2、ARSKView 一种显示AR体验的视图,增加了2D SpriteKit内容的相机视图。
这里先演示第一个,增加一个3D效果的视图。
在使用前,首先得需要再viewWillAppear方法里面实例化一个会话配置类,在配置类对象里设置会话如何将真实的设备运动映射到3D场景的坐标系统里,这里默认是使用重力,应该是使用陀螺仪;还需要制定其他几个值。最后再把配置类对象设置到视图的会话中。如下:
- (void)viewWillAppear:(BOOL)animated {
[superviewWillAppear:animated];
ARWorldTrackingSessionConfiguration *configuration = [ARWorldTrackingSessionConfiguration new];
configuration.worldAlignment= ARWorldAlignmentGravity;
configuration.planeDetection= ARPlaneDetectionHorizontal;
[self.sceneView.sessionrunWithConfiguration:configuration];
}
接下来在viewDidLoad方法里面设置了ARSCNView的代理,然后在下述这个方法里添加在视图里要显示的内容:
- (void)renderer:(id)renderer didAddNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor{
ARPlaneAnchor *planeAnchor = anchor;
SCNPlane *plane = [SCNPlane planeWithWidth:planeAnchor.extent.xheight:planeAnchor.extent.z];
SCNNode *planeNode = [SCNNode nodeWithGeometry:plane];
planeNode.position= SCNVector3Make(planeAnchor.center.x,0, planeAnchor.center.z);
planeNode.transform= SCNMatrix4MakeRotation(- M_PI/2,1,0,0);
[node addChildNode:planeNode];
}
这里添加一个系统的视图ARPlaneAnchor,其实系统还内置了很多视图,可以用作基本使用。在这个代理方法设置好 视图的各种属性后,就添加到ARSCNView对象中。