ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来

  • 1.1-ARKit物体围绕相机旋转流程介绍

  • 1.2-完整代码

  • 1.3-代码下载地址

  • 废话不多说,先看效果

    ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来 ARKit教程 第1张

    • 其实是会一直围着你转圈的,只不过笔者不好意思暴露家里的场景,所以请读者朋友们见谅~

    • 由于是晚上,笔者选择的是一个台灯

    ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来 ARKit教程 第2张

    1101.gif


    1.1-ARKit物体围绕相机旋转流程介绍


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

    • 2.实现物体的围绕相机旋转(这里主要会用到SceneKit框架中内容)

      • 1.为什么要在相机的位置创建一个空节点呢?因为你不可能让相机也旋转

      • 2.为什么不直接让台灯旋转呢? 这样的话只能实现台灯的自转,而不能实现公转

      • 注意:绕相机旋转的关键点在于:在相机的位置创建一个空节点,然后将台灯添加到这个空节点,最后让这个空节点自身旋转,就可以实现台灯围绕相机旋转

    • 核心代码介绍

    #pragma mark- 点击屏幕添加飞机
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{  
         [self.planeNode removeFromParentNode];    
         //1.使用场景加载scn文件(scn格式文件是一个基于3D建模的文件,使用3DMax软件可以创建,这里系统有一个默认的3D飞机)--------在右侧我添加了许多3D模型,只需要替换文件名即可   
         SCNScene *scene = [SCNScene sceneNamed:@"Models.scnassets/lamp/lamp.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);   
          }    
          self.planeNode.position = SCNVector3Make(0, 0, -20);    
          //3.绕相机旋转   
          //绕相机旋转的关键点在于:在相机的位置创建一个空节点,然后将台灯添加到这个空节点,最后让这个空节点自身旋转,就可以实现台灯围绕相机旋转   
          //1.为什么要在相机的位置创建一个空节点呢?因为你不可能让相机也旋转   
          //2.为什么不直接让台灯旋转呢? 这样的话只能实现台灯的自转,而不能实现公转   
          SCNNode *node1 = [[SCNNode alloc] init];    
          //空节点位置与相机节点位置一致   
          node1.position = self.arSCNView.scene.rootNode.position;    
          //将空节点添加到相机的根节点   
          [self.arSCNView.scene.rootNode addChildNode:node1];    
          // !!!将台灯节点作为空节点的子节点,如果不这样,那么你将看到的是台灯自己在转,而不是围着你转   
          [node1 addChildNode:self.planeNode];    
          //旋转核心动画   
          CABasicAnimation *moonRotationAnimation = [CABasicAnimation animationWithKeyPath:@"rotation"];    
          //旋转周期   
          moonRotationAnimation.duration = 30;    
          //围绕Y轴旋转360度  (不明白ARKit坐标系的可以看笔者之前的文章)   
          moonRotationAnimation.toValue = [NSValue valueWithSCNVector4:SCNVector4Make(0, 1, 0, M_PI * 2)];    
          //无限旋转  重复次数为无穷大   
          moonRotationAnimation.repeatCount = FLT_MAX;    
          //开始旋转  !!!:切记这里是让空节点旋转,而不是台灯节点。  理由同上   
          [node1 addAnimation:moonRotationAnimation forKey:@"moon rotation around earth"];
    //3D游戏框架
     #import <SceneKit/SceneKit.h>
     //ARKit框架
     #import <ARKit/ARKit.h>
     @interface ARSCNViewViewController ()<ARSCNViewDelegate,ARSessionDelegate>
     //AR视图:展示3D界面
     @property(nonatomic,strong)ARSCNView *arSCNView;
     //AR会话,负责管理相机追踪配置及3D相机坐标
     @property(nonatomic,strong)ARSession *arSession;
     //会话追踪配置:负责追踪相机的运动
     @property(nonatomic,strong)ARSessionConfiguration *arSessionConfiguration;
     //飞机3D模型(本小节加载多个模型)
     @property(nonatomic,strong)SCNNode *planeNode;@end@implementation ARSCNViewViewController
     - (void)viewDidLoad {   
     [super viewDidLoad];    
      // Do any additional setup after loading the view.
    }
    - (void)back:(UIButton *)btn{   
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    - (void)viewDidAppear:(BOOL)animated{  
         [super viewDidAppear:animated];    
         //1.将AR视图添加到当前视图  
          [self.view addSubview:self.arSCNView];    
          //2.开启AR会话(此时相机开始工作)   
          [self.arSession runWithConfiguration:self.a



    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 1
      评论
    课程介绍 本套课程从技术理念到项目实践,教大家系统掌握ARKit技术开发,随心打造iOS端AR增强现实应用。由一开始的开发环境搭建,到Unity ARKit Plugin、ARFoundation ARKit等不同时期技术的讲解。从平面模型放置、识别图片、手势交互、3D物体识别、面部AR贴纸、光照估计、环境探针、多人AR技术,甚至包含ARKit3.0的动作捕捉技术等。除了以上课程内容,更加入了随着技术更新与时俱进更新的ARKit连载技术教学内容。课程收益 轻松理解ARKit的技术原理,从零到一创建自己的第一个AR项目。学习UnityARKit Plugin经典技术,了解ARKit中的常见概念和原理。学会在 ARFoundation 中使用ARKit,进行企业级AR项目开发。学会如何在AR项目里播放模型动画,通过触屏手势交互实现模型的旋转和缩放。 了解ARKit的图片识别,掌握AR卡片、AR书籍的实现方法。 学会使用面部增强技术,实现热门短视频应用的AR贴纸效果,实现面部表情追踪。学会使用ARKit物体检测技术,实现3D物体识别,可以广泛应用于工业、建筑、古董、玩具手办、艺展览等不同场景。学习ARKit中的经典交互案例,优化AR项目的用户体验。熟练使用环境纹理、光照估计技术,让AR内容随当前现实场景自动变化调节,看起来更加真实。基于WorldMap、CollaborativeSession AR技术,实现AR场景的持久化及多人AR体验效果。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值