ARKit入门

流程

  • 1 . ARConfiguration(建议用ARWorldTrackingConfiguration负责追踪相机的运动)
lazy var arSessionConfiguration:ARWorldTrackingConfiguration = {
        let c = ARWorldTrackingConfiguration()
        c.planeDetection = .horizontal //追踪方向 目前就这一种
        c.isLightEstimationEnabled = true//自适应灯光
        return c
}()
  • 2 . ARSession(负责管理相机追踪配置及3D相机坐标)
lazy var arSession: ARSession = {
        let s = ARSession()
        return s
}()
  • 3 . ARSCNView(展示3D界面)
  lazy var arSCNView: ARSCNView = {
        let v = ARSCNView(frame: self.view.bounds)
        v.delegate = self
        v.session = self.arSession
        v.automaticallyUpdatesLighting = true
        return v
}()
  • 4 . 开启AR相机扫描
//这个是swift的方法  OC方法 - (void)runWithConfiguration:(ARConfiguration *)configuration NS_SWIFT_UNAVAILABLE("Use run(_:options:) instead");

 self.arSession.run(self.arSessionConfiguration, options: ARSession.RunOptions.resetTracking)
  • 5 . 添加虚拟物体
//获取虚拟物体的场景  这个是系统自带的小飞机 自己导入素材的时候如果获取场景失败记得查看 BuildPhase 的CopyBundleResource 添加上
guard let scene = SCNScene(named: "art.scnassets/ship.scn") else{return}
//AR世界万物皆节点 -有位伟人这么说过 
//每个Scene中有且只有一个节点,里面的所有物体都是其子节点!
let shipNode = scene.rootNode.childNodes.first!
//将这个节点添加到我们视图的Scene中 位置默认是相机位置
//可以为其设置一个位置    其属性  open var position: SCNVector3
arSCNView.scene.rootNode.addChildNode(shipNode)

你可能感兴趣的:(ARKit入门)