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
ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来的更多相关文章
- ARKit从入门到精通(1)-ARKit初体验
ARKit从入门到精通(1)-ARKit初体验 转载自:http://blog.csdn.net/u013263917/article/details/72903174 该系列文章共十篇,笔者将由易到 ...
- ARKit从入门到精通
ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来 ARKit从入门到精通(9)-ARKit让飞机跟着镜头飞起来 ARKit从入门到精通(8)-ARKit捕捉平地 ARKit从入门到精通(7 ...
- ARKit从入门到精通(11)-ARKit开发常见问题及解决方案
转载请注明出处:ARKit从入门到精通(11)-ARKit开发常见问题及解决方案 本文主要介绍ARKit开发过程中一些常见问题 1.ARKit框架无法导入问题 2.ARKit运行黑屏或者白屏问题:Un ...
- ARKit从入门到精通(9)-ARKit让飞机跟着镜头飞起来
1.1-ARKit物体跟随相机移动流程介绍 1.2-完整代码 1.3-代码下载地址 废话不多说,先看效果 1001.gif 1.1-ARKit物体跟随相机移动流程介绍 1.点击屏幕添加物体,已经在第三 ...
- ARKit从入门到精通(8)-ARKit捕捉平地
转载:http://blog.csdn.net/hdfqq188816190/article/details/73360287 1.1-ARKit捕捉平地实现流程介绍 1.2-完整代码 1.3-代码下 ...
- ARKit从入门到精通(3)-ARKit自定义实现
转载:http://blog.csdn.net/u013263917/article/details/73038566 在上一小节中ARKit从入门到精通(2)-ARKit工作原理及流程介绍,我们完整 ...
- ARKit从入门到精通(2)-ARKit工作原理及流程介绍
转载:http://blog.csdn.net/u013263917/article/details/73038519 1.1-写在前面的话 1.2-ARKit与SceneKit的关系 1.3-ARK ...
- ARKit从入门到精通(7)-ARCamera介绍
ARCamera是一个相机,它是连接虚拟场景与现实场景之间的枢纽.在ARKit中,它是捕捉现实图像的相机,在SceneKit中它又是3D虚拟世界中的相机.(一般第一人称3D游戏,主角其实就是一个3D相 ...
- ARKit从入门到精通(5)-ARScnView介绍
转载:http://blog.csdn.net/u013263917/article/details/73156918 AR视图,在第一小节笔者介绍过,ARKit支持3D的AR场景和2D的AR场景,A ...
随机推荐
- mac使用phpize进行安装的时候碰到的问题
问题: grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/include/php/Zend/zend_mo ...
- SSM框架配置文件
1.Spring <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns=&quo ...
- 初识SolrJ开发, schema.xml的配置与服务初始化.
schema.xml位于solr/collection1/conf/目录下,是Solr中用户定义字段类型及字段的配置文件. Solr版本: 4.6.0 第一步: Schema.xml说明 实例sche ...
- 《JAVA与模式》之解释器模式 (转载)
一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用 ...
- SharePoint 2013 Disaster Recovery——迁移内容数据库
安装和配置SharePoint Farm时,一定要注意将内容数据库不要放在C盘,除非你的C盘能足够承受起日益增长的数据.由于在安装SQL SERVER中没有注意,我将数据库存放在默认的 C:\Prog ...
- [转]Java中使用Runtime和Process类运行外部程序
帖子1: 使用Runtime.getRuntime().exec()方法可以在java程序里运行外部程序. 1. exec(String command) 2. exec(String comma ...
- 向量运算 与 JavaScript
二维向量都包含两个值:方向(direction)及大小(magnitude) 这两个值可以表达出各种各样的物理特性来,比如力和运动.如两个物体间的碰撞检测. 向量的大小 虽说二维向量是对大 ...
- 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题
前几天在新闻区看到富士康卖二手iPhone的新闻,今天又看到说今天中午12点开抢.一大早就发现富连网无法访问了.前几天刚看到新闻的时候注册了个账号进去看了看,发现页面加载速度非常慢,今天中午基本无法打 ...
- 使用C#和Thrift来访问Hbase实例
今天试着用C#和Thrift来访问Hbase,主要参考了博客园上的这篇文章.查了Thrift,Hbase的资料,结合博客园的这篇文章,终于搞好了.期间经历了不少弯路,下面我尽量详细的记录下来,免得大家 ...
- elk 使用中遇到的问题(kafka 重复消费)
问题描述: 在使用过程中,当遇到大量报错的时候,我们到eagle后台看到报错的那个consumer的消费情况到到lag 远远大于0(正常情况应该为0),activie 节点没有,kibana面板上没 ...