ARKit入門01

簡介

增強現實技術(Augmented Reality,簡稱 AR),是一種實時地計算攝影機影像的位置及角度並加上相應圖像、視頻、3D模型的技術,這種技術的目標是在屏幕上把虛擬世界套在現實世界並進行互動。

ARKit是基於AVFoundation框架和CoreMotion框架的

所需

  1. A9以上設備 (不支持模擬器)se 6s 6sp 7 7p
  2. xcode9 bates,iOS11,xcode9

特性

  1. 追蹤:追蹤現實和虛擬場景
    • 全局追蹤:追蹤現實場景和虛擬場景,就像真實的存在現實中
    • 視覺慣性測距VIO:肉眼看到效果,遠離所需,拉近放大
    • 沒有外部設置:不需要外部設備(投影儀等)
  2. 場景理解:
    • 平面監測:現實世界都是有細小的平面構成
    • 命中測試:兩個物件發生接觸,產生一些反應
    • 光估計:用光照的方法,讓物體更逼真。比如影子
  3. 渲染
    • 簡單集合:用xcode自帶的可以實現渲染。SceneKit(iOS8出現、3d場景)、SpriteKit(iOS7出現,2d場景)2D、Metal(iOS7出現,不支持模擬器)
    • AR視圖:ARview,物件以arView的形式出現
    • 自定義渲染:可以使用其他引擎渲染,支持(Unity、Unreal)

運行原理

相機捕捉顯示世界->arkit
顯示3D模型->SceneKit
通過AR回話->ARSession使兩者交互

原理圖

座標

這裏寫圖片描述

x,y,z
是以相機的位置爲中心,所以軸的負值標識我們正前方,正值表示我們的後方(後腦勺)
單位是米

ARSession

  • 使用之前設置一個追蹤ARSessionConfiguration(來追蹤設備方向的基本配置)
  • 通過run方法啓用
  • 來處理是用來管理設備相機的共享對象(AVCaptureSession)和增強現實所需的處理(CMMotionmanager)
  • 最終生成一個一個的frame展示

Arssion

基本步驟

  1. ARSCNView加載場景SCNScene
  2. SCNScene啓動相機ARCamera開始捕捉場景
  3. 捕捉場景後ARSCNView開始將場景數據交給Session
  4. Session通過管理ARSessionConfiguration實現場景的追蹤並且返回一個ARFrame
  5. 給ARSCNView的scene添加一個子節點(3D物體模型)

入門掌握四大基礎點

  1. 幾何
  2. 節點
  3. 渲染
  4. 手勢

demo

  • 用到的關鍵類:
    • 場景視圖(ARSCNView)
    • 場景(SCNScene)
    • 幾何(SCNGeometry)
    • 節點(SCNNode)
    • 渲染器(SCNMaterial)
  • 如何在空間中放一個平面
    1. 創建場景視圖 ARSCNView,設置代理
    2. 創建一個場景 SCNScene,給場景視圖綁定場景
    3. 創建一個平面幾何形狀 (box,plane)
    4. 基於幾何形狀創建一個節點SCNNode
    5. 創建一個渲染器SCNMaterial,用其對平面幾何進行渲染
    6. 添加節點到場景的根節點中

demo1

  1. 打開Xcode9bete版本,新建一個工程,選擇Augmented Reality APP(Xcode9新增),點擊next
    這裏寫圖片描述

  2. 選擇SceneKit
    這裏寫圖片描述

  3. 此時,Xcode會自動爲我們生成一段極其簡潔的AR代碼
    效果圖後面補上

demo2

 override func viewDidLoad() {
        super.viewDidLoad()

        // Set the view's delegate
         //1.設置場景代理
        sceneView.delegate = self

        // Show statistics such as fps and timing information
        sceneView.showsStatistics = true

        //2.創建場景
        let scene = SCNScene()
        //3.創建幾何
        let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)

        //4. 渲染  渲染器可以決定怎樣渲染,這個 contents屬性可以設置很多東西,UILabel, UIImage,甚至 AVPlayer都可以
        let material = SCNMaterial() //
        material.diffuse.contents = UIColor.red
//        material.diffuse.contents = UIImage(named: "brick.png")
      //5.對幾何進行渲染
        box.materials = [material]

//       6. 創建節點
        let boxNode = SCNNode(geometry: box)
//       7.設置節點位置
        boxNode.position = SCNVector3(0,0,-0.2)
//       8. 把節點放到根節點上
        scene.rootNode.addChildNode(boxNode)

        sceneView.scene = scene

    }

這樣就能我們面前就有一個紅色的長寬高都是0.1m的正方體盒子

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章