美文网首页
ARKit - 第一个AR项目

ARKit - 第一个AR项目

作者: Onlyoner | 来源:发表于2017-09-02 00:26 被阅读0次

    移动AR平台
    高级API
    支持A9以上设备(不支持模拟器)
    Xcode9及以上 iOS 11及以上
    移动设备:SE 6S 6SP 7 7SP...

    三大特性

    追踪

    1、全局追踪
    2、视觉惯性测距VIO
    3、没有外部设备
    

    场景理解

    1、平面检测(现实世界的理解)
    2、命中测试(动作)
    3、光估计
    

    渲染

    简单集合
    。。。
    SceneKit
    SpriteKit
    Metal
    

    相机捕捉现实世界 ARKit
    3D
    SceneKit


    QQ截图20170901210224.png

    ARSession


    QQ截图20170901210720.png
    QQ截图20170901210840.png

    开始 创建项目

    QQ20170901-232414@2x.png
    QQ20170901-232540@2x.png

    ARKit 入门掌握的四大点

    1、几何

    2、节点

    3、渲染

    4、手势

    //先实例化一个空的SCNScene类
    let scene = SCNScene()
    

    1、几何

    //创建几何实例,定义一个SCNBox类的几何实例,然后创建盒子,并将其作为根节点的子节点,根节点就是scene  
     let box = SCNBox(width:0.1,height:0.1,length:0.1,chamferRadius:0)
    

    2、节点

    //创建子节点
    let boxNode = SCNNode(geometry:box)
    //x,y,z轴   -0.2就是前边
    boxNode.position = SCNVector3(0,0,-0.2)
    //把节点添加到根节点scene上
    scene.rootNode.addChildNode(boxNode)
    

    3、渲染

    let material = SCNMaterial()//先创建一个渲染器
    // material.diffuse.contents = UIColor.red//设置颜色
    material.diffuse.contents = UIImage(named:"1.png")//设置图片到节点上
    box.materials = [material]//使用这个渲染器渲染
    

    4、手势

    registerGestureRe();//调用
    func registerGestureRe() {
    //创建手势
            let tap = UIGestureRecognizer(target:self ,action: #selector(tapPed))
    //将手势添加到sceneView上
            self.sceneView.addGestureRecognizer(tap)
        }
     
    
    {
    //球体 加上手势
            let scene = SCNScene()
            let sphere = SCNSphere(radius:0.3)//0.3米
            let material = SCNMaterial()
            material.diffuse.contents = UIImage(named:"1.png")
            sphere.materials = [material]
            
            let sphereNode = SCNNode(geometry:sphere)
            sphereNode.position = SCNVector3(0,0,-0.5)
            scene.rootNode.addChildNode(sphereNode)
            sceneView.scene = scene
    registerGestureRe();//调用
    }
    @objc func tapPed(gestureRecognizer:UIGestureRecognizer){
            
            let sceneView = gestureRecognizer.view as!ARSCNView
            let touchLocation = gestureRecognizer.location(in: sceneView)
            let hitRersults = sceneView.hitTest(touchLocation, 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
            }
            
    

    OVER!

    探索:

    除了立方体、球体还有什么形状的图形可以尝试一把呢?
    碳原子模型
    参考文章:http://www.cocoachina.com/ios/20141113/10205.html

    渲染上:视频、 gif

    渲染视频:要用到SpriteKit框架中的一个类SKVideoNode,这个类主要用来在2D游戏中渲染视频的,今天我们就借助这个类,实现在3D场景中播放视频
    参考:http://www.jianshu.com/p/be06bf357564

    //1
    let scnView = SCNView(frame: self.view.bounds);
     scnView.scene = SCNScene()
     self.view.addSubview(scnView);
    // 2创建一个摄像机
    let cameraNode = SCNNode()
     scnView.scene?.rootNode.addChildNode(cameraNode);
    //3创建一个节点并绑定一个平面几何对象
      let boxNode = SCNNode()
      scnView.scene?.rootNode.addChildNode(boxNode);
    //4创建一个2D游戏场景和一个播放视频的对象
    let url = Bundle.main.url(forResource: "123-pad", withExtension: "mp4")
    let videoNode = SKVideoNode(url: url!)
    let skScene = SKScene()
    skScene.addChild(videoNode)
    //5 给平面体设置渲染内容
     plane.firstMaterial?.diffuse.contents = skScene
    //6 播放视频
     videoNode.play()
    //7打开摄像头控制查看效果
     scnView.allowsCameraControl = true;
    
    

    渲染 gif:nill😄

    相关文章

      网友评论

          本文标题:ARKit - 第一个AR项目

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