ARKit:初识AR

第一次写,鉴于ARKit网上相关资料比较少,写一套实战教程,希望能帮到需要的人吧。表达能力捉急,写的不好的请留言提意见。两个图是盗的


1、写在前面:

本文开发语言OC。

开发环境需要满足以下条件

1.Xcode版本:Xcode9及以上

2.iOS系统:iOS11及以上

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

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

2、最终效果预览


3、AR运行模式简介

AR 运作流程图(盗的)

AR 运作流程图

蓝色表示 ARKit ,绿色表示 SceneKit 。

ARKit负责捕捉现实世界的信息,SceneKit通过ARkit得到的信息,建立一个虚拟世界。之后通过ARKit将虚拟世界与现实世界实时维系起来。


ARKit 和 SceneKit 关系图

ARKit和SceneKit关系图

介绍一下主要的类:

ARSCNView:渲染虚拟世界和呈现现实世界,我们手机上获得的在现实世界中放置的虚拟物品的效果的就是它。

ARSession:会话配置,追踪现实世界信息,并更新SCNView场景,

ARCamera:相机当前的位置信息,通过四元数给出。(四元数 这个比较抽象,我不是很懂,读者可以自行百度一下,一般就用第三列,是xyz坐标信息,ARAnchor也是)。

ARAnchor:锚点,通过相机捕捉到的现实世界中的点

SCNNode:节点,我们添加上去的点,一般先确定锚点,然后再锚点点位置上添加节点

ARConfiguration:一般就用ARWorldTrackingConfiguration,6自由度追踪,比较准确。AROrientationTrackingConfiguration,3自由度追踪,旋转,精度不如ARWorldTrackingConfiguration。ARFaceTrackingConfiguration,人脸追踪,得IPhone X才行,注释太长,咱不管他,需要了解的直接看Xcode里注释吧。

4,第一架AR飞机

打开Xcode,新建工程,选择AR

下一步,这里选sceneKit。我们用的场景渲染是sceneKit

下一步,创建好了之后,可以看到,苹果给我们生成的一些初始代码:

上面用sb拉了一个SceneView

@property (nonatomic, strong) IBOutlet ARSCNView *sceneView;


- (void)viewDidLoad {

[super viewDidLoad];

// Set the view's delegate

self.sceneView.delegate = self;

// 显示fps,帧频等信息

self.sceneView.showsStatistics = YES;

// 创建一个场景,加载飞机的模型

SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/ship.scn"];

// Set the scene to the view

self.sceneView.scene = scene;

}

- (void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

// Create a session configuration:世界会话追逐配置,一般用ARWorldTrackingConfiguration这个就行了

ARWorldTrackingConfiguration *configuration = [ARWorldTrackingConfiguration new];

// Run the view's session

[self.sceneView.session runWithConfiguration:configuration];

}

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

// Pause the view's session

[self.sceneView.session pause];

}

跑一下,体验一下第一架飞机。

系统生成的飞机demo

嗯,太假了。我们来给他加个光影效果:

//添加光照节点

SCNNode *lightNode = [SCNNode node];

lightNode.light = [SCNLight light];

lightNode.light.type = SCNLightTypeOmni;

lightNode.position = SCNVector3Make(0, 10, 10);

[self.sceneView.scene.rootNode addChildNode:lightNode];

效果:

添加了光照节点的效果

看着是不是好多了。


5......没有5了,字数限制到这里了。下一篇吧。

本文Demo地址:https://github.com/HalfOfSunshine/AR-Distance-Calculator

你可能感兴趣的:(ARKit:初识AR)