zoukankan      html  css  js  c++  java
  • 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( 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效果


     
     
  • 相关阅读:
    Codeforces Round #649 (Div. 2) D. Ehab's Last Corollary
    Educational Codeforces Round 89 (Rated for Div. 2) E. Two Arrays
    Educational Codeforces Round 89 (Rated for Div. 2) D. Two Divisors
    Codeforces Round #647 (Div. 2) E. Johnny and Grandmaster
    Codeforces Round #647 (Div. 2) F. Johnny and Megan's Necklace
    Codeforces Round #648 (Div. 2) G. Secure Password
    Codeforces Round #646 (Div. 2) F. Rotating Substrings
    C++STL常见用法
    各类学习慕课(不定期更新
    高阶等差数列
  • 原文地址:https://www.cnblogs.com/zj901203/p/7478736.html
Copyright © 2011-2022 走看看