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

  • 1.1-ARKit物体围绕相机旋转流程介绍
  • 1.2-完整代码
  • 1.3-代码下载地址
  • 废话不多说,先看效果

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

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

文章来源:中国AR网
  原文地址:http://www.chinaar.com/ARKit/5220.html

时间: 2024-07-29 10:18:51

ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来的相关文章

ARKit从入门到精通(8)-ARKit捕捉平地

转载:http://blog.csdn.net/hdfqq188816190/article/details/73360287 1.1-ARKit捕捉平地实现流程介绍 1.2-完整代码 1.3-代码下载地址 在介绍完ARKit详细的工作原理以及所有的API之后,最令人期待的干货终于要来了! 废话不多说,先看效果 桌子上的绿萝太孤独了,给它来一个郁金香陪伴一下吧~ 0901.gif 在椅子上摆瓶花吧~ 0902.gif 1.1-ARKit捕捉平地实现流程介绍 平地捕捉需要一点时间,ARKit内部会

ARKit从入门到精通(11)-ARKit开发常见问题及解决方案

转载请注明出处:ARKit从入门到精通(11)-ARKit开发常见问题及解决方案 本文主要介绍ARKit开发过程中一些常见问题 1.ARKit框架无法导入问题 2.ARKit运行黑屏或者白屏问题:Unable to run the session, configuration is not supported on this device: <ARWorldTrackingSessionConfiguration 3.ARKit添加虚拟物体无法显示问题:ARSession不支持打断点 1.1-A

ARKit从入门到精通(5)-ARScnView介绍

转载请注明出处:ARKit从入门到精通(5)-ARScnView介绍 AR视图,在第一小节笔者介绍过,ARKit支持3D的AR场景和2D的AR场景,ARSCNView是3D的AR场景视图 API介绍 @interface ARSCNView : SCNView /** 代理 */ @property (nonatomic, weak, nullable) id<ARSCNViewDelegate> delegate; /** AR会话 */ @property (nonatomic, stro

Web前端从入门到精通-10 css简介

上节课呢,我们介绍了一个很重要的概念——盒模型 主要介绍了盒模型的一些基础知识:margin padding的概念 以及margin:0 auto;和margin的塌陷 如果对上述知识点还有不清楚的地方大家一定要弄懂 要不然再往下看的话比较费劲 这节课的话我们接着上节课的话题继续扯 实际上关于margin的话题还远远不止我们上节课说的那些问题 我们再看下面一个布局: <!DOCTYPE html> <html lang="en"> <head> &l

xmake从入门到精通10:多个子工程目标的依赖配置

xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验. 本文主要详细讲解下,如果在一个项目中维护和生成多个目标文件的生成,以及它们之间的依赖关系设置. 项目源码 官方文档 target到底是什么? xmake的概念定义里,一个独立的项目工程可能会有多个子工程组织在一起,每个子工程对应只能生成一个唯一的目标文件,例如:可执行程序,静态库或者动态库等. 而这里所说的每个子工程就是xmake里面所说的targ

C语言学习从入门到精通书籍,10万读者都认可

C语言程序设计从入门到精通 10万读者认可的编程图书精粹 零基础自学编程的入门图书 详解C语言编程思想和核心技术 很多初学者,对C语言.c++的概念都是模糊不清的,C语言.c++是什么,能做什么,学的时候该按照什么线路去学习,学完往哪方面发展,想深入了解,详情可以点击有道云笔记链接了解:http://note.youdao.com/noteshare?id=bd7b6584fb92a7af9851901d7af4dd77 原文地址:https://www.cnblogs.com/ITbianch

从入门到精通C++需要学的10本书

学习C++从入门到精通的的十本最经典书籍  文章来源中国IT实验室收集整理作者佚名更新时间2009-5-16 12:27:05 保存本文保存本文推荐给好友推荐给好友收藏本页收藏本页 欢迎进入C/C++编程社区论坛,与300万技术人员互动交流>>进入     (发表于2004年)贴子增多太快,现以个人之见对C++十大学习书籍做简要描述,希望能对初学者起到一定的帮助.  这十本书我都或翻或看过,有不同程度的了解,如果您对某本书的评论感到不满意,肯请在下面留言,谢谢指教!  另外,强调一下发此贴的本

SaltStack 入门到精通 - 第一篇: 安装SaltStack

实际环境的设定: 系统环境: centos6 或centos5 实验机器: 192.168.1.100 软件需求: salt 套件,及其需求环境 实验目的: 成功安装salt,并实现salt主从间通讯 特殊设置: 其它目的: 安装SaltStack(下面简称为salt) epel安装:salt安装需要epel源支持,所以在安装salt前需要先安装epel包 # centos5 下载下面rpm  wget -O    epel.rpm https://dl.fedoraproject.org/pu

SaltStack 入门到精通 - 第七篇: Targeting

什么是Targeting? Targeting minions 是指那些minion会作为运行命令或是执行状态的目标.这些目标可以是一个主机名,系统信息,定义的分组,甚至是自定义的绑定的对象. 例如命令  salt web1 apache.signal restart 可以重启ID 为web1的minion的apache.当然也可以在top文件中使用web1来作为目标匹配的内容: base:   'web1':     - webserver Targing 有哪些匹配方式? Minion Id