第一次写简书,鉴于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
网友评论