2017-10-09 Cocoa开发者社区

开发环境

Xcode9, 使用语言Swift4

目的

本教程旨在帮助您通过构建ARKit演 示应 用程序来熟悉使 用SceneKit的ARKit的基础知识。

现在是时候弄湿你的脚了,你看到建立一个ARKit应用程序的过程,让你通过你的设备与AR世界互动。

本教程的全部想法是通过构建应用程序来学习该技术及其API。通过这个过程,您将了解ARKit如何在真实设备中工作,与您创建3D对象进行交互。

先决条件

本教程建议您深入了解iOS开发的基础知识。这是一个中级教程。您还需要Xcode 9或更高版本。

要测试您的ARKit应用程序,您将需要一个Apple的ARKit兼容设备,它们是具有Apple A9处理器或更高版本的设备。

现在你有一切都准备好了,你适应了。我们来吧!以下是我将走过的事情:

为ARKit应用程序创建新项目

设置ARKit SceneKit视图

使用View Controller连接ARSCNView连接

IBOutlet配置ARSCNView会话

允许相机使用

将3D对象添加到ARSCNView

将手势识别器添加到ARSCNView

从ARSCNView中删除对象将多个对象添加到

ARSCNView

创建新项目

打开Xcode。在Xcode菜单中,选择文件>新建>项目...选择单一视图应用程序,然后按next。Xcode具有ARKit模板,但实际上,您只需使用单 一视图应用程序模板来构建AR应用程序。


您可以为您的项目命名任何您想要的。我命名我的项目ARKitDemo。然后按next创建新项目。

设置ARKit SceneKit视图

现在打开Main.storyboard。在对像库中查看ARKit SceneKit视图。将ARKit SceneKit视图拖动到View Controller上。


然后给出您的ARKit SceneKit View约束以填充整个View Controller。它应该看起来像这样:


酷!这个ARKit SceneKit视图是我们将用增强现实显示SceneKit内容的地方。

连接IBOutlet

我们仍然在Main.storyboard文件。进入工具栏,打开助手编辑器。在ViewController.swift文件顶部添加导入语句以导入ARKit:


从ARKit SceneKit视图拖动到该ViewController.swift文件。当提示时,命名IBOutlet sceneView 。随意删除该didReceiveMemoryWarning() 方法。我们在本教程中不需要它。


配置ARSCNView会话

我们希望我们的应用程序通过相机镜头开始探索世界,并开始检测我们周围的环境。这是一个非常疯狂的技术,如果你想到它。苹果已经为开发人员提供了增强的现实,而无需从头开发整个技术。感谢苹果为ARKit祝福我们。

好的。现在是配置ARKit SceneKit视图的时候了。将以下代码插入到ViewController类中:


在该 viewWillAppear(_:) 方法中,我们初始化了一个名为AR 的配置

ARWorldTrackingConfiguration 。这是一个运行世界跟踪的配置。

但等等,什么是世界跟踪?根据苹果的文档:

> 世界跟踪配置跟踪设备的方向和位置。它还可以通过设备的相机检测现实世界的表面。

现在我们设置sceneView的AR会话来运行刚刚初始化的配置。AR会话管理视图内容的运动跟

踪和摄像机图像处理。

现在添加另一种方法 ViewController


在该 viewWillDisappear(_: )方法中,我们只需告诉我们的AR会话,停止跟踪视图内容的运动和处理图像。

允许相机使用

现在我们可以运行我们的应用程序,我们需要通知我们的用户,我们将利用他们的设备的相机

增强现实。这是自iOS 10发布以来的一个要求。因此,打开Info.plist。右键单击空白区域,然

后选择添加行。设置隐私密钥- 相机使用说明。设置增值现实的价值。


在继续之前,让我们确保您一切正确设置到此为止。

拿出你的设备。挂在你的Mac上 在Xcode上构建并运行该项目。应用程序应该提示您允许相机访问。点击确定。


现在你应该可以看到你的相机的视图。

我们已经配置了sceneView的会话来运行世界跟踪配置。现在是激动人心的时刻。增强现实!

将3D对象添加到ARSCNView

时机已到。我们一直在等待的那一刻。

不用多说,让我们增加现实。我们要开始添加一个框。将以下代码插入到 ViewController中:


我们首先创建一个盒子形状。1= 1米。

之后,我们创建一个节点。节点表示3D空间中对象的位置和坐标。节点本身没有可见的内容。

我们可以通过给它一个形状来给节点一个可见的内容。我们通过将节点的几何设置为框来实现。

之后,我们给我们的节点一个位置。这个位置是相对于相机。正面x在右边。负x在左边。积极的y是up。负y是关闭的。正z向后。负z是向前的。

然后我们创建一个场景。这是要在视图中显示的SceneKit场景。然后我们将盒子节点添加到场景的根节点。场景中的根节点定义了由SceneKit呈现的现实世界的坐标系。

基本上,现在我们的场景有一个盒子。盒子以设备的相机为中心。相对于相机是向前0.20米。

最后,我们设置sceneView的场景来显示我们刚创建的场景。

现在宣告addBox()在viewDidLoad():


构建并运行应用程序 你应该可以看到一个浮动框!


您也 addBox() 可以简单地重构:


单独封装一些组件更容易。

好的。现在是添加手势的时候了。

将手势识别器添加到ARSCNView

在addBox()方法之下,添加以下代码:


在这里,我们初始化点击手势识别器,目标设置为ViewController,动作选择器设置为

didTap(withGestureRecognizer:) 回调函数。然后我们将tap手势识别器添加到sceneView中。

现在是时候用点击手势识别器的回调函数来做某事了。

从ARSCNView中删除对象

在 ViewController.swift 文件中插入以下方法:


在这里,我们创建了一个

didTap(withGestureRecognizer:) 方法。我们检索用户相对于sceneView的点击位置,并进行

测试,看看我们是否点击任何节点。

之后,我们安全地从我们的第一个节点展开 hitTestResults 。如果结果至少包含一个节点,我们将删除从其父节点点击的第一个节点。

在我们测试对象删除之前,请更新viewDidLoad() 方法以添加对该方法的调用

addTapGestureToSceneView():


现在,如果您构建并运行项目,您应该可以点击框节点并将其从场景视图中删除。

看起来我们回到了一个。

好。现在是添加多个对象的时候了。

将多个对象添加到ARSCNView

现在我们的盒子有点孤独。我们给盒子一些盒子。我们将从特征点的检测中添加对象。

那么什么是功能点?

根据苹果,这里是一个特征点的定义:

> 由ARKit自动识别的点是连续表面的一部分,但没有相应的锚点。

它基本上是现实世界对象表面上的检测点。所以回到执行添加框。在我们这样做之前,让我们

在 ViewController 课程结尾创建一个扩展名


这个扩展基本上将矩阵转换成 float3 。它给出了矩阵中的x,y和z。

另外,我们需要修改 addBox() 如下


我们基本上添加了初始化 addBox() 函数的参数。我们还给出了默认参数值。这意味着我们可以调用, addBox() 而不必像其中一样指定x,y和z坐标 viewDidLoad() 。

酷。

现在我们需要修改 didTap(withGestureRecognizer:) 方法。如果有一个对象可以检测到,我们要添加一个对像到特征点。

所以在我们的 guard let 声明和我们的 return 声明之前。添加以下代码


首先,我们执行一个命中测试,类似于我们第一次测试。除此之外,我们.featurePoint为types

参数指定一个结果类型。该types参数要求命中测试搜索通过AR会话处理相机图像检测到的真实世界对像或曲面。结果类型有很多种类型。但是,我们将仅关注本教程中的特征。

特征点的测试后,我们可以安全地展开第一个测试结果。这很重要,因为可能并不总是有一个特点。ARKit可能并不总是能够检测现实世界中的真实世界对像或表面。

如果第一个命中测试结果可以安全地展开,那么我们将类型的矩阵转换matrix_float4x4为float3。

这是可能的,因为我们之前创建的扩展。这很方便地给出了我们感兴趣的x,y和z真实世界坐标。

然后,在点击检测到的特征点时,x,y和z添加一个新框。

你的 didTap(withGestureRecognizer:) 方法应该是这样的


构建并运行您的项目。除了以前做过的一切,您现在应该可以在功能点上添加一个框。


摘自:http://mp.weixin.qq.com/s/-yVpvZV5dvsQxTDlS8dt6w

良心教程:用户交互的黑科技ARKitQQQ1相关推荐

  1. 首届零一科技节震撼来袭 汇集100+黑科技企业、3万平沉浸空间

    7月5日,由中国人工智能产业发展联盟指导.零一科技网络公司主办的"零一科技节"在深圳价值工厂拉开了帷幕.据悉,本届零一科技节将持续至7月8日,为众多科技爱好者.创业者打造出多领域融 ...

  2. 那些年Android黑科技③:干大事不择手段

    2019独角兽企业重金招聘Python工程师标准>>> "我在发抖么? 你开什么玩笑.我只是在跳愉快的尬舞. 暗影是不会向邪恶势力低头的. 万岁(≧▽≦)/!!" ...

  3. 那些年Android黑科技①:只要活着,就有希望

    前言: 这个世界上手机有三大系统,苹果. 安卓. 中国安卓 .本篇强烈呼吁大家不要去做哪些违反用户体验的黑科技功能,研究研究玩玩就好了啦.全当增长技术,在真实的项目开发中尽量能不用就不要用得好.道理大 ...

  4. 五大新品+两大黑科技,看华为云如何升级基础设施让用户“躺平”

    摘要:继在业界首次提出"分布式云×云原生"云基础设施新范式后,华为云进一步对计算.存储.网络等基础能力进行全面升级,发布全新一代计算实例C7.独享型ELB等五大新品,并面向实景三维 ...

  5. 苹果侧边滑动返回_iPhone X侧边按键使用教程,满满都是黑科技啊

    iPhone X上市也已经有一段时间了,众所周知它去除了我们熟悉的睡眠/唤醒按钮--home 键. 很多用户肯定对觉得这个设计很反人类,其实现实是恰恰相反,苹果只是简单地把home键的功能分配到了Si ...

  6. 揭秘360手机助手未经用户同意,自动开启辅助功能的“黑科技”

    转载自:https://www.freebuf.com/articles/terminal/121253.html 0×00 概述 Android为正常使用手机有障碍的用户提供了辅助功能,即Acces ...

  7. Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

    转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 黑 ...

  8. 输入法黑科技:语音识别准确率98% 用户超过6亿

    图为6月12日,讯飞输入法联合创始人翟吉博在"爱输入·更懂你"的媒体见面会上展示黑科技. 消息 一分钟打出400字,是什么样的体验?以往只有专业速录员能实现的打字速度,如今运用了大 ...

  9. 12个黑科技网站,每个都是十分良心了 zt – 步行街主干道 – 虎扑社区

    文章目录[隐藏] 12个黑科技网站,每个都是十分良心了 zt 社区 » 步行街 » 步行街主干道 12个黑科技网站,每个都是十分良心了 zt 972回复 /26亮  366618 浏览 1234567 ...

最新文章

  1. 【透明版九宫格背景图片】仅依靠background的几个属性组合搭配出酷炫的透明背景卡片效果→适用于大数据可视化、数据大屏展示页面
  2. consul 命令行参数
  3. CoreText入门
  4. hive复合数据类型之struct
  5. 瑞幸咖啡股价再大涨超36% 目前总市值约13.87亿美元
  6. kafka producer发送消息 Failed to update metadata after问题
  7. Python接口自动化之动态数据处理
  8. php反射API 获取属性/注释/方法 执行方法 实例
  9. 设计系统测试用例时应考虑的类型
  10. 吴伯凡-认知方法论-认知是一个长期修炼的过程
  11. virtual box ubuntu20.04 ros安装摄像头驱动
  12. 2011年度全球移民国家移民条件浅析
  13. TCP协议:RST标志位
  14. Dynamics CRM2013 Server2012下部署ADFS和IFD遇到的问题No Organization were retrived
  15. 《暗时间》读后感(一)——确实需要学习一些心理学有关的内容
  16. 进入 32 位时代,谁能成为下一个8051?
  17. 安装kubernetes_如何在Kubernetes中安装和使用Linkerd
  18. 揭开小额信贷业务系统的秘密
  19. 语音识别开源库 FastARS 移植到GEC6818开发版
  20. 串行 RapidIO接口介绍

热门文章

  1. 【庖丁解牛】Starting MySQL.. ERROR! The server quit without updating PID file (/tmp/mysqld.pid)
  2. 生产过程精确控制系统
  3. c语言数据结构逆波兰算法,[分享]表达式二叉树逆波兰式的转换程序源代码(C++)...
  4. 2019年首月沪指上涨3.64%实现开门红
  5. Python数据可视化的例子——直方图(hist)和核密度曲线(kde)
  6. Windows 史前一万年
  7. python腾讯课堂自动签到_网课终结者——基于auto.js的腾讯课堂,雨课堂等各大网课自动签到以及auto.js新手教程...
  8. 为什么企业需要 RPA?RPA将赋予企业什么?
  9. 使用FreeMarker给word文档里生成柱状图
  10. YH-AS608指纹识别模块介绍