[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 }