ARKit从入门到精通(9)-ARKit让飞机跟着镜头飞起来
1001.gif
1.1-ARKit物体跟随相机移动流程介绍
-
1.点击屏幕添加物体,已经在第三小节
ARKit从入门到精通(3)-ARKit自定义实现
中介绍 -
2.监听ARSession的代理
-
相机的移动是由AR会话来监听的
-
3.在ARSession的相机移动代理中获取相机的当前位置,修改物体的位置与相机位置一致,即可实现物体跟随相机移动而移动
-
核心代码介绍
#pragma mark -ARSessionDelegate //会话位置更新(监听相机的移动),此代理方法会调用非常频繁,只要相机移动就会调用,如果相机移动过快,会有一定的误差,具体的需要强大的算法去优化,笔者这里就不深入了
- (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);
}
}
1.2-完整代码
#import "ARSCNViewViewController.h" //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];
}
文章来源:中国AR网
原文地址:http://www.chinaar.com/ARKit/5219.html
原文地址:http://www.chinaar.com/ARKit/5219.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?