初探ARKit

作者: TSL的开发博客 | 来源:发表于2017-09-04 12:29 被阅读0次

    一、什么是ARKit

    AR(Augmented Reality),即虚拟增强现实技术,也就是将虚拟的计算机图形和真实环境结合的技术

    ARKit能支持苹果所谓的“世界追踪”(world tracking)特性。以识别场景图像中的显著特征,从视频的每一帧中跟踪这些特征位置的差异,并将该信息与运动感测数据进行比较,从而得到设备的位置和运动的高精度模型。

    “World tracking”还可以分析和理解场景中的内容。寻找与相机画面中的点对应的真实世界表面,检测相机画面中的平面,并报告位置和尺寸,然后在这个平面放置内容,并与场景中的虚拟内容进行交互。

    在iOS11系统上,ARKit正式成为iOS系统框架,让开发者能够使用OC或swift语言就能开发AR App。

    二、ARKit开发要求

    Xcode 9或以上,iOS 11以及硬件设备A9处理器以上(6s以上机型)

    三、ARKit实现原理

    相机捕捉现实世界(ARkit),显示3D模型(sceneKit)
    其中ARSession用于管理设备相机的共享对象和增强现实体验所需运动处理
    ARSessionConfiguration跟踪设备方向,ARFrame捕获图像,追踪场景信息

    原理如下图:

    ARKit原理图.png
    1. 打开xcode 9,新建一个工程,选择Augmented Rdeality App
    1.png
    1. 选择SceneKit
    2.png
    1. 创建一个新的SCNScene
      let scene = SCNScene() sceneView.scene = scene

    2. 创建几何模型

    let sphere = SCNSphere(radius: 0.1)

    1. 渲染
     let material = SCNMaterial()
     material.diffuse.contents = UIImage(named:"earth.jpg")
     sphere.materials = [material]
    
    1. 设置根节点
    let sphereNode = SCNNode(geometry: sphere)
    //设置节点位置,z轴为负数
    sphereNode.position = SCNVector3(x: 0, y: 0, z: -0.5)
    scene.rootNode.addChildNode(sphereNode)
    

    AR视觉位置如下图

    AR视觉位置.png

    中间的盒子代表手机相机,从+Z这边看的话,AR模型在我们后脑勺位置,从-Z方向看才是在我们正前方位置。所以节点位置第三个参数Z为负数。

    7.添加手势

    func registerGestureRecognizers(){
            let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapped))
            self.sceneView.addGestureRecognizer(tapGestureRecognizer)
        }
        
        @objc func tapped (recognizer: UIGestureRecognizer){
            
            let sceneView = recognizer.view as! ARSCNView
            let touchLoaction = recognizer.location(in: sceneView)
            let hitRersults = sceneView.hitTest(touchLoaction, options: [:])
    //        一開始的時候 index = 0
            if  !hitRersults.isEmpty {
                if index == self.textures.count {
                    index = 0
                }
                
                guard let hitRersult = hitRersults.first else {
                    return
                }
                
                let node = hitRersult.node
                node.geometry?.firstMaterial?.diffuse.contents = UIImage(named: textures[index])
                
                index += 1
            }
        }
    
    1. AR效果
    AR.PNG

    五、总结

    通过ARKit实现AR记住四步就可以了:
    创建几何 -> 渲染 -> 设置节点 -> 添加手势

    相关文章

      网友评论

        本文标题:初探ARKit

        本文链接:https://www.haomeiwen.com/subject/ijasjxtx.html