流程
- 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
}()
lazy var arSCNView: ARSCNView = {
let v = ARSCNView(frame: self.view.bounds)
v.delegate = self
v.session = self.arSession
v.automaticallyUpdatesLighting = true
return v
}()
//这个是swift的方法 OC方法 - (void)runWithConfiguration:(ARConfiguration *)configuration NS_SWIFT_UNAVAILABLE("Use run(_:options:) instead");
self.arSession.run(self.arSessionConfiguration, options: ARSession.RunOptions.resetTracking)
//获取虚拟物体的场景 这个是系统自带的小飞机 自己导入素材的时候如果获取场景失败记得查看 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)
网友评论