[Xcode10 实际操作]七、文件与数据-(21)ARKit增强现实框架的使用

本文将演示ARKit增强现实框架的使用。

创建一个新的项目:【Create a new Xcode project】

->在打开的模板选择中,选择增强现实应用模板【Augmented Reality App】

->【Next】->【Product Name】:ARDemo 。保持其他参数不变

->【Next】->选择项目存放目录->【Create】

在左侧的文档框架区,点击查看模板自带的场景资源【art.scnassets】

在右侧的属性面板,可以看出场景的Y轴朝上,X轴朝右,Z轴向内。

并且三维模型优先使用同名的、压缩后的贴图。

在资源【art.scnassets】文件夹下,包含一个三维场景【ship.scn】,和一个贴图文件【texture.png】

点击打开三维场景【ship.scn】。

当前的三维场景拥有一驾喷气式飞机的三维模型,场景在默认情况下处于转盘模式。

点击右下角第一个图标,弹出操作列表,选择【Fly】

鼠标按下并向下方拖动,观察飞机模型的位置变化。

点击右下角第一个图标,弹出操作列表,选择【Arcball】轨迹球选项

鼠标按下并向下方拖动,观察飞机模型的位置变化。

点击右下角第一个图标,弹出操作列表,选择【Pan】平移选项

鼠标按下并向下方拖动,观察飞机模型的位置变化。

点击右下角第一个图标,弹出操作列表,选择【Truck】转向选项

鼠标按下并向右侧拖动,观察飞机模型的位置变化。

接着修改三维场景的【显示模式列表】,点击右下角第四个图标,

勾选列表中的【Wireframe】线框选项:使三维模型处于线框的显示状态。

勾选列表中的【Grid】网格选项:可以在三维场景中显示辅助的网格线。

在列表外部点击,关闭【显示模式列表】

接着修改三维场景的【视图类型】,点击左下角第四个图标,弹出【视图类型】列表

【Top】:顶视图,模拟摄像机从顶部向下看的效果。

【Bottom】:底视图

【Left】:左视图

【Right】:右视图

【Front】:前视图

【Back】:后视图

接着点击三维物体的贴图文件【texture.png】

在贴图文件中,包含了三维飞机模型在多个视图中的投影所对应的贴图。

接着点击故事版文件【Main.storyboard】

在故事版中包含了一个三维场景视图,点击选择该视图对象

打开右侧的属性设置面板。

三维场景视图同样拥有一些属性,可以设置它的名称、行为、渲染参数和动画参数等。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

在视图加载完成的方法中,分别设置了:

1.三维场景视图的代理对象

2.统计状态

3.需要加载的三维场景

在视图即将显示或消失的方法中,对三维场景视图的会话周期,进行了不同方式的调用。

接着打开模拟器列表【ARDDemo>Generic iOS Device】

在列表里选择一款真机设备,将在真机设备上运行该应用程序。

运行程序后,点击允许应用程序访问设备。

此时在屏幕上显示了一个三维的飞机模型。

可以移动手机,在各个角度查看飞机的状态。

点击手机屏幕左下角打开状态面板。

在状态面板中显示了刷新率、面数等信息。

使用【Command】+【Tab】切换并打开浏览器软件

输入苹果提供的三维场景包的下载地址:

https://developer.apple.com/documentation/arkit/building_your_first_ar_experience

压缩包下载后,将自动解压并打开解压后的文件夹。

找到三维场景模型的资源文件Resources->Models.scnassets

将三维场景模型的资源文件夹拖动到自己的项目中

点击【Finish】确认文件夹的导入

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

重新修改一下三维场景的代码

 1 import UIKit
 2 import SceneKit
 3 import ARKit
 4 
 5 class ViewController: UIViewController, ARSCNViewDelegate {
 6 
 7     @IBOutlet var sceneView: ARSCNView!
 8     
 9     override func viewDidLoad() {
10         super.viewDidLoad()
11         
12         // Set the view's delegate
13         //三维场景视图的代理对象
14         sceneView.delegate = self
15         
16         // Show statistics such as fps and timing information
17         //统计状态
18         sceneView.showsStatistics = true
19         
20         // Create a new scene
21         //需要加载的三维场景
22         //加载三维场景的代码,修改为已添加的三维场景模型的资源文件
23         let scene = SCNScene(named: "Models.scnassets/chair/chair.scn")!
24         
25         // Set the scene to the view
26         sceneView.scene = scene
27     }
28 
29     override func viewWillAppear(_ animated: Bool) {
30         super.viewWillAppear(animated)
31         
32         // Create a session configuration
33         let configuration = ARWorldTrackingConfiguration()
34         // Run the view's session
35         sceneView.session.run(configuration)
36     }
37     
38     override func viewWillDisappear(_ animated: Bool) {
39         super.viewWillDisappear(animated)
40         
41         // Pause the view's session
42         sceneView.session.pause()
43     }
44     
45     override func didReceiveMemoryWarning() {
46         super.didReceiveMemoryWarning()
47         // Release any cached data, images, etc that aren't in use.
48     }
49 
50     //在视图即将显示或消失的方法中,对三维场景视图的会话周期,进行了不同方式的调用。
51     
52     func session(_ session: ARSession, didFailWithError error: Error) {
53         // Present an error message to the user
54         
55     }
56     
57     func sessionWasInterrupted(_ session: ARSession) {
58         // Inform the user that the session has been interrupted, for example, by presenting an overlay
59         
60     }
61     
62     func sessionInterruptionEnded(_ session: ARSession) {
63         // Reset tracking and/or remove existing anchors if consistent tracking is required
64         
65     }
66 }

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10052565.html