目錄:[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 }