[Xcode 實際操做]7、文件與數據-(21)ARKit加強現實框架的使用

目錄:[Swift]Xcode實際操做html

本文將演示ARKit加強現實框架的使用。swift

建立一個新的項目:【Create a new Xcode project】瀏覽器

->在打開的模板選擇中,選擇加強現實應用模板【Augmented Reality App】session

->【Next】->【Product Name】:ARDemo 。保持其餘參數不變app

->【Next】->選擇項目存放目錄->【Create】框架

在左側的文檔框架區,點擊查看模板自帶的場景資源【art.scnassets】ide

在右側的屬性面板,能夠看出場景的Y軸朝上,X軸朝右,Z軸向內。post

而且三維模型優先使用同名的、壓縮後的貼圖。動畫

在資源【art.scnassets】文件夾下,包含一個三維場景【ship.scn】,和一個貼圖文件【texture.png】ui

點擊打開三維場景【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 }
相關文章
相關標籤/搜索