zoukankan      html  css  js  c++  java
  • ARKit从入门到精通(9)-ARKit让飞机跟着镜头飞起来

    • 废话不多说,先看效果

    1.1-ARKit物体跟随相机移动流程介绍

    • 1.点击屏幕添加物体,已经在第三小节ARKit从入门到精通(3)-ARKit自定义实现中介绍

    • 2.监听ARSession的代理

      • 相机的移动是由AR会话来监听的
    • 3.在ARSession的相机移动代理中获取相机的当前位置,修改物体的位置与相机位置一致,即可实现物体跟随相机移动而移动

    • 核心代码介绍
    • - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
          //1.使用场景加载scn文件(scn格式文件是一个基于3D建模的文件,使用3DMax软件可以创建,这里系统有一个默认的3D飞机)--------在右侧我添加了许多3D模型,只需要替换文件名即可
          SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/ship.scn"];
          //2.获取飞机节点(一个场景会有多个节点,此处我们只写,飞机节点则默认是场景子节点的第一个)
          //所有的场景有且只有一个根节点,其他所有节点都是根节点的子节点
          SCNNode *shipNode = scene.rootNode.childNodes[0];
          
          self.planeNode = shipNode;
      
          //飞机比较大,释放缩放一下并且调整位置让其在屏幕中间
          shipNode.scale = SCNVector3Make(0.5, 0.5, 0.5);
          shipNode.position = SCNVector3Make(0, -15,-15);
      
          //一个飞机的3D建模不是一气呵成的,可能会有很多个子节点拼接,所以里面的子节点也要一起改,否则上面的修改会无效
          for (SCNNode *node in shipNode.childNodes) {
              node.scale = SCNVector3Make(0.5, 0.5, 0.5);
              node.position = SCNVector3Make(0, -15,-15);
              
          }
          
          //3.将飞机节点添加到当前屏幕中
          [self.arSCNView.scene.rootNode addChildNode:shipNode];
      
      }
      - (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame
      {
          NSLog(@"相机移动");
      //    if (self.arType != ARTypeMove) {
      //        return;
      //    }
          //移动飞机
          if (self.planeNode) {
              
              //捕捉相机的位置,让节点随着相机移动而移动
              //根据官方文档记录,相机的位置参数在4X4矩阵的第三列
              self.planeNode.position =SCNVector3Make(frame.camera.transform.columns[3].x,frame.camera.transform.columns[3].y,frame.camera.transform.columns[3].z);
          }  
      } 
  • 相关阅读:
    Something broke! (Error 500)——reviewboard
    linux内核--自旋锁的理解
    I.MX6 mkuserimg.sh hacking
    I.MX6 DNS 查看、修改方法
    I.MX6 android mkuserimg.sh
    I.MX6 AW-NB177NF wifi HAL 调试修改
    I.MX6 wpa_supplicant_8 编译问题
    I.MX6 MAC Address hacking
    I.MX6 MAC地址修改
    I.MX6 U-boot imxotp MAC address 写入
  • 原文地址:https://www.cnblogs.com/weicyNo-1/p/8108127.html
Copyright © 2011-2022 走看看