增强现实交互

在真实世界场景中显示虚拟物体可能是很有趣的,但是你想做得更多而不仅仅是在一个场景上覆盖静态图片。另外在场景中显示虚拟物体,ARKit也可以使得虚拟物体在屏幕上移动,给用户与虚拟物体交互的能力,通过触摸手势,例如点击或者滑动。

例如,一个用户可能想点击一个虚拟物体来使得它移动或者以某种方式响应,例如改变它的外观或者在屏幕上移动。通过制作增强现实交互,你的应用可能更感兴趣和赞同。

注意 你仅仅可以测试和运行ARKit应用在iPhone 6s或者更高,或者一个iPad Pro上。

让我们创建一个新的增强现实应项目,命名为ARGesture。这个项目将包含一个AppDelegate.swift文件,一个ViewController.swift文件和一个Main.storyboard文件,还有art.scnassets文件夹,它包含了一个ship.scn对象和一个texture.png文件。

我们的目标是创建一个几何模型并在屏幕上显示它。然后用户可以在那个模型上滑动并使得它旋转。为了做到这点,我们将需要学习一些技能。

首先,大多数人熟悉操作几何模型使用角度,但是苹果的SceneKit框架使用弧度。我们可以编写我们自己的公式去转换角度到弧度,但是苹果提供了一个数学框架叫作GLKit,它包含了一个可以执行这个计算的函数。作为一个通用的规则,尽可能依赖苹果框架总是最好的,而不是编写你自己的函数,因为苹果框架被测试过,而你讲不得不花费时间调试和测试你自己的函数。

在ViewController.swift文件的顶部,添加以下行导入GLKit框架

1
import GLKit

你的ViewController.swift文件应该导入GLKit,UIKit,SceneKit和ARKit框架总共四个import语句。

接下来,我们需要创建一个节点,该节点代表我们想添加到屏幕上的几何模型。这意味着创建一个SCNNode对象。因为我们将需要访问这个对象在不止一个方法中,创建这个作为一个IBOutlet属性,所以ViewController.swift文件顶部应当看起来像这样:

1
2
3
4
5
6
7
8
import UIKit
import SceneKit
import ARKit
import GLKit

class ViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
let node = SCNNode()

在viewDidLoad函数中,我们可以添加调试选项,将在屏幕上显示世界原点。你可能不想显示世界原点在最终的应用中,但是它可以当你开发应用时是有用的,显示给你虚拟物体出现在屏幕的位置。添加以下行在viewDidLoad函数中:

1
sceneView.debugOptions = [ARSCNDebugOptions.showWorldOrigin, ARSCNDebugOptions.showFeaturePoints]

存储和访问图形资产

现在我们需要创建一个几何模型。在这种情况下,我们想创建一个金字塔,所以我们将需要定义它的宽,高和长。另外,我们也想去应用一个纹理到我们的金字塔上。

增强现实应用项目引入了两个图像文件:ship.scn和texture.png。我们将不显示ship.scn文件,所以你可以删除代码,显示这个ship.scn在屏幕上。然而,我们想去使用texture.png文件。

在前一章节中,你看到了如何使用一个纹理图像图片通过简单地定义它的名字像这样:

1
2
let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "stone.jpg")
文章作者: Boyka·Yuri
文章链接: https://zhaolilong.com/2018/06/20/增强现实交互/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博伊卡の楼閣
支付宝打赏
微信打赏