良心教程:用户交互的黑科技ARKitQQQ1
开发环境
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应用程序。
![](/assets/blank.gif)
您可以为您的项目命名任何您想要的。我命名我的项目ARKitDemo。然后按next创建新项目。
设置ARKit SceneKit视图
现在打开Main.storyboard。在对像库中查看ARKit SceneKit视图。将ARKit SceneKit视图拖动到View Controller上。
![](/assets/blank.gif)
然后给出您的ARKit SceneKit View约束以填充整个View Controller。它应该看起来像这样:
![](/assets/blank.gif)
酷!这个ARKit SceneKit视图是我们将用增强现实显示SceneKit内容的地方。
连接IBOutlet
我们仍然在Main.storyboard文件。进入工具栏,打开助手编辑器。在ViewController.swift文件顶部添加导入语句以导入ARKit:
![](/assets/blank.gif)
从ARKit SceneKit视图拖动到该ViewController.swift文件。当提示时,命名IBOutlet sceneView 。随意删除该didReceiveMemoryWarning() 方法。我们在本教程中不需要它。
配置ARSCNView会话
我们希望我们的应用程序通过相机镜头开始探索世界,并开始检测我们周围的环境。这是一个非常疯狂的技术,如果你想到它。苹果已经为开发人员提供了增强的现实,而无需从头开发整个技术。感谢苹果为ARKit祝福我们。
好的。现在是配置ARKit SceneKit视图的时候了。将以下代码插入到ViewController类中:
在该 viewWillAppear(_:) 方法中,我们初始化了一个名为AR 的配置
ARWorldTrackingConfiguration 。这是一个运行世界跟踪的配置。
但等等,什么是世界跟踪?根据苹果的文档:
> 世界跟踪配置跟踪设备的方向和位置。它还可以通过设备的相机检测现实世界的表面。
现在我们设置sceneView的AR会话来运行刚刚初始化的配置。AR会话管理视图内容的运动跟
踪和摄像机图像处理。
现在添加另一种方法 ViewController
![](/assets/blank.gif)
在该 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() 可以简单地重构:
![](/assets/blank.gif)
单独封装一些组件更容易。
好的。现在是添加手势的时候了。
将手势识别器添加到ARSCNView
在addBox()方法之下,添加以下代码:
![](/assets/blank.gif)
在这里,我们初始化点击手势识别器,目标设置为ViewController,动作选择器设置为
didTap(withGestureRecognizer:) 回调函数。然后我们将tap手势识别器添加到sceneView中。
现在是时候用点击手势识别器的回调函数来做某事了。
从ARSCNView中删除对象
在 ViewController.swift 文件中插入以下方法:
![](/assets/blank.gif)
在这里,我们创建了一个
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相关推荐
- 首届零一科技节震撼来袭 汇集100+黑科技企业、3万平沉浸空间
7月5日,由中国人工智能产业发展联盟指导.零一科技网络公司主办的"零一科技节"在深圳价值工厂拉开了帷幕.据悉,本届零一科技节将持续至7月8日,为众多科技爱好者.创业者打造出多领域融 ...
- 那些年Android黑科技③:干大事不择手段
2019独角兽企业重金招聘Python工程师标准>>> "我在发抖么? 你开什么玩笑.我只是在跳愉快的尬舞. 暗影是不会向邪恶势力低头的. 万岁(≧▽≦)/!!" ...
- 那些年Android黑科技①:只要活着,就有希望
前言: 这个世界上手机有三大系统,苹果. 安卓. 中国安卓 .本篇强烈呼吁大家不要去做哪些违反用户体验的黑科技功能,研究研究玩玩就好了啦.全当增长技术,在真实的项目开发中尽量能不用就不要用得好.道理大 ...
- 五大新品+两大黑科技,看华为云如何升级基础设施让用户“躺平”
摘要:继在业界首次提出"分布式云×云原生"云基础设施新范式后,华为云进一步对计算.存储.网络等基础能力进行全面升级,发布全新一代计算实例C7.独享型ELB等五大新品,并面向实景三维 ...
- 苹果侧边滑动返回_iPhone X侧边按键使用教程,满满都是黑科技啊
iPhone X上市也已经有一段时间了,众所周知它去除了我们熟悉的睡眠/唤醒按钮--home 键. 很多用户肯定对觉得这个设计很反人类,其实现实是恰恰相反,苹果只是简单地把home键的功能分配到了Si ...
- 揭秘360手机助手未经用户同意,自动开启辅助功能的“黑科技”
转载自:https://www.freebuf.com/articles/terminal/121253.html 0×00 概述 Android为正常使用手机有障碍的用户提供了辅助功能,即Acces ...
- Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)
转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 黑 ...
- 输入法黑科技:语音识别准确率98% 用户超过6亿
图为6月12日,讯飞输入法联合创始人翟吉博在"爱输入·更懂你"的媒体见面会上展示黑科技. 消息 一分钟打出400字,是什么样的体验?以往只有专业速录员能实现的打字速度,如今运用了大 ...
- 12个黑科技网站,每个都是十分良心了 zt – 步行街主干道 – 虎扑社区
文章目录[隐藏] 12个黑科技网站,每个都是十分良心了 zt 社区 » 步行街 » 步行街主干道 12个黑科技网站,每个都是十分良心了 zt 972回复 /26亮 366618 浏览 1234567 ...
最新文章
- 【透明版九宫格背景图片】仅依靠background的几个属性组合搭配出酷炫的透明背景卡片效果→适用于大数据可视化、数据大屏展示页面
- consul 命令行参数
- CoreText入门
- hive复合数据类型之struct
- 瑞幸咖啡股价再大涨超36% 目前总市值约13.87亿美元
- kafka producer发送消息 Failed to update metadata after问题
- Python接口自动化之动态数据处理
- php反射API 获取属性/注释/方法 执行方法 实例
- 设计系统测试用例时应考虑的类型
- 吴伯凡-认知方法论-认知是一个长期修炼的过程
- virtual box ubuntu20.04 ros安装摄像头驱动
- 2011年度全球移民国家移民条件浅析
- TCP协议:RST标志位
- Dynamics CRM2013 Server2012下部署ADFS和IFD遇到的问题No Organization were retrived
- 《暗时间》读后感(一)——确实需要学习一些心理学有关的内容
- 进入 32 位时代,谁能成为下一个8051?
- 安装kubernetes_如何在Kubernetes中安装和使用Linkerd
- 揭开小额信贷业务系统的秘密
- 语音识别开源库 FastARS 移植到GEC6818开发版
- 串行 RapidIO接口介绍
热门文章
- 【庖丁解牛】Starting MySQL.. ERROR! The server quit without updating PID file (/tmp/mysqld.pid)
- 生产过程精确控制系统
- c语言数据结构逆波兰算法,[分享]表达式二叉树逆波兰式的转换程序源代码(C++)...
- 2019年首月沪指上涨3.64%实现开门红
- Python数据可视化的例子——直方图(hist)和核密度曲线(kde)
- Windows 史前一万年
- python腾讯课堂自动签到_网课终结者——基于auto.js的腾讯课堂,雨课堂等各大网课自动签到以及auto.js新手教程...
- 为什么企业需要 RPA?RPA将赋予企业什么?
- 使用FreeMarker给word文档里生成柱状图
- YH-AS608指纹识别模块介绍