ARKit----学习一

一.ARKit的简介

开始进入正题吧

ARKit在iOS 11上推出的一个AR移动平台,支持A9以上的处理器,不支持模拟器。ARKit使用相机捕捉现实世界,使用SceneKit,SpriteKit或者Metal显示3D模型


 

 

ARKit的简单显示流程,而且在任何SCNScene他都有一个RootNode,就是根节点

 


AR场景中一个模型的3D显示坐标


 

ARKit中渲染场景的过程如下:

1.ARSCNView加载场景SCNScene

2.SCNScene启动相机ARCamera开始捕捉场景

3.捕捉场景后ARSCNView开始将场景数据交给Session

 

4.Session通过管理ARSessionConfiguration实现场景的追踪并且返回一个ARFrame

5.给ARSCNView的scene添加一个子节点(3D物体模型)


 

二.废话不多说,直接开始撸代码

1.新建项目工程,使用版本 xcode9.0 beta 手机系统 iOS 11 beta 9。在xcode中选择Augmented Reality App创建新的项目


 
 

2.创建完成之后在StoryBoard中视图中多出了一个ARSCNView

 


 
 

3.在ViewController中默认创建了ARCSCNView的一个连接,工程默认会加载一个飞机的模型在视图中显示

 

import UIKit
import SceneKit
import ARKit

class ViewController: UIViewController, ARSCNViewDelegate {

    @IBOutlet var sceneView: ARSCNView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        sceneView.delegate = self
//显示帧率和配置信息 sceneView.showsStatistics = true let scene = SCNScene(named: "art.scnassets/ship.scn")! sceneView.scene = scene } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let configuration = ARWorldTrackingSessionConfiguration() sceneView.session.run(configuration) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) sceneView.session.pause() } // MARK: - ARSCNViewDelegate /* // Override to create and configure nodes for anchors added to the view's session. func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { let node = SCNNode() return node } */ func session(_ session: ARSession, didFailWithError error: Error) { // Present an error message to the user } func sessionWasInterrupted(_ session: ARSession) { // Inform the user that the session has been interrupted, for example, by presenting an overlay } func sessionInterruptionEnded(_ session: ARSession) { // Reset tracking and/or remove existing anchors if consistent tracking is required } }

  

4.添加自己的3D模型

/// 创建视图
    func createSceneForView()  {
        //初始化场景
        let scene = SCNScene()
        //创建一个半径为0.1的球
        let sphere = SCNSphere(radius: 0.1)
        //添加纹理
        let material = SCNMaterial()
        //添加的内容可以是图片 颜色 gif 视频等等
        material.diffuse.contents = UIImage(named:"earth")
        sphere.materials = [material]
        //创建节点
        let sphereNode = SCNNode(geometry: sphere)
        //设置节点位置
        sphereNode.position = SCNVector3(0,0,-0.5)
        //添加到根节点
        scene.rootNode.addChildNode(sphereNode)

        //添加一个箱子
        let boxSphere = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
        let boxMaterial = SCNMaterial()
        boxMaterial.diffuse.contents = UIImage(named:"brick")
        boxSphere.materials = [boxMaterial]
        let boxNode = SCNNode(geometry: boxSphere)
        boxNode.position = SCNVector3(0.4,0,-0.7)
        scene.rootNode.addChildNode(boxNode)
        mySCNView.scene = scene
    }

  

5.显示的AR效果

 


 

 

 

 

posted @ 2017-09-05 15:11  蓝色的风1203  阅读(411)  评论(0编辑  收藏  举报