• 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效果


     
     
  • 相关阅读:
    基于 HTML5 WebGL 的发动机 3D 可视化系统
    基于 HTML + WebGL 结合 23D 的疫情地图实时大屏 PC 版
    用 HTML5 造个有诚意的 23D 招聘稿
    基于 HTML5 Canvas 的 3D 热力云图效果
    基于 HTML5 和 Canvas 实现的 3D 垃圾分类系统
    xcode10 改动
    __NSArrayI __NSArray0 __NSSingleObjectArrayI __NSPlaceholderArray __NSArrayM
    iOS开发之Found a swap file by the name ".podfile.swp" owned by: Netban dated:...file name: ~N...
    关于程序的测试
    ios the request was denied by service delegate for reason unspecified
  • 原文地址:https://www.cnblogs.com/zj901203/p/7478736.html
Copyright © 2020-2023  润新知