ARKit入门01
来源:互联网 发布:医美缩小毛孔知乎 编辑:程序博客网 时间:2024/06/08 10:13
简介
增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像、视频、3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。
ARKit是基于AVFoundation框架和CoreMotion框架的
所需
- A9以上设备 (不支持模拟器)se 6s 6sp 7 7p
- xcode9 bates,iOS11,xcode9
特性
- 追踪:追踪现实和虚拟场景
- 全局追蹤:追踪现实场景和虚拟场景,就像真实的存在现实中
- 视觉惯性测距VIO:肉眼看到效果,远离所需,拉近放大
- 没有外部设置:不需要外部设备(投影仪等)
- 场景理解:
- 平面监测:现实世界都是有细小的平面构成
- 命中测试:两个物件发生接触,产生一些反应
- 光估计:用光照的方法,让物体更逼真。比如影子
- 渲染
- 简单集合:用xcode自带的可以实现渲染。SceneKit(iOS8出现、3d场景)、SpriteKit(iOS7出现,2d场景)2D、Metal(iOS7出现,不支持模拟器)
- AR视图:ARview,物件以arView的形式出现
- 自定义渲染:可以使用其他引擎渲染,支持(Unity、Unreal)
运行原理
相机捕捉显示世界->arkit
显示3D模型->SceneKit
通过AR回话->ARSession使两者交互
坐标
x,y,z
是以相机的位置为中心,所以轴的负值标识我们正前方,正值表示我们的后方(后脑勺)
单位是米
ARSession
- 使用之前设置一个追踪ARSessionConfiguration(来追踪设备方向的基本配置)
- 通过run方法启用
- 来处理是用来管理设备相机的共享对象(AVCaptureSession)和增强现实所需的处理(CMMotionmanager)
- 最终生成一个一个的frame展示
基本步骤
- ARSCNView加载场景SCNScene
- SCNScene启动相机ARCamera开始捕捉场景
- 捕捉场景后ARSCNView开始将场景数据交给Session
- Session通过管理ARSessionConfiguration实现场景的追踪并且返回一个ARFrame
- 给ARSCNView的scene添加一个子节点(3D物体模型)
入门掌握四大基础点
- 几何
- 节点
- 渲染
- 手势
demo
- 用到的关键类:
- 场景视图(ARSCNView)
- 场景(SCNScene)
- 几何(SCNGeometry)
- 节点(SCNNode)
- 渲染器(SCNMaterial)
- 如何在空间中放一个平面
- 创建场景视图 ARSCNView,设置代理
- 创建一个场景 SCNScene,给场景视图绑定场景
- 创建一个平面几何形状 (box,plane)
- 基于几何形状创建一个节点SCNNode
- 创建一个渲染器SCNMaterial,用其对平面几何进行渲染
- 添加节点到场景的根节点中
demo1
打开Xcode9bete版本,新建一个工程,选择Augmented Reality APP(Xcode9新增),点击next
选择SceneKit
此时,Xcode会自动为我们生成一段极其简洁的AR代码
效果图后面补上
demo2
override func viewDidLoad() { super.viewDidLoad() // Set the view's delegate //1.设置场景代理 sceneView.delegate = self // Show statistics such as fps and timing information sceneView.showsStatistics = true //2.创建场景 let scene = SCNScene() //3.创建几何 let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0) //4. 渲染 渲染器可以决定怎样渲染,这个 contents属性可以设置很多东西,UILabel, UIImage,甚至 AVPlayer都可以 let material = SCNMaterial() // material.diffuse.contents = UIColor.red// material.diffuse.contents = UIImage(named: "brick.png") //5.对几何进行渲染 box.materials = [material]// 6. 创建节点 let boxNode = SCNNode(geometry: box)// 7.设置节点位置 boxNode.position = SCNVector3(0,0,-0.2)// 8. 把节点放到根节点上 scene.rootNode.addChildNode(boxNode) sceneView.scene = scene }
这样就能我们面前就有一个红色的长宽高都是0.1m的正方体盒子
阅读全文
0 0
- ARKit入门01
- ARKit入门 先占坑
- ARKit从入门到精通(1)-ARKit初体验
- ARKit从入门到精通(3)-ARKit自定义实现
- ARKit从入门到精通(1)-ARKit初体验
- ARKit从入门到精通(3)-ARKit自定义实现
- ARKit从入门到精通(8)-ARKit捕捉平地
- ARKit从入门到精通(1)-ARKit初体验
- ARKit从入门到精通(3)-ARKit自定义实现
- ARKit从入门到精通(8)-ARKit捕捉平地
- ARKit从入门到精通(1)-ARKit初体验
- ARKit从入门到精通(1)-ARKit初体验
- ARKit从入门到精通(3)-ARKit自定义实现
- ARKit从入门到精通(8)-ARKit捕捉平地
- ARKit从入门到精通(1)-ARKit初体验
- ARKit从入门到精通(1)-ARKit初体验
- ARKit从入门到精通(3)-ARKit自定义实现
- ARKit从入门到精通(8)-ARKit捕捉平地
- 表不存在1146:table 'xxx.xxx' doesn't exist
- Python 是增长最快的主流编程语言;C ++ 17 正式获得批准
- lineRenderer画曲线
- Error Code: 1044. Access denied for user 'root'@'%' to database
- SpringMVC 记录我遇到的坑 (一) AOP注解无效,切面不执行
- ARKit入门01
- 突然想写点什么..
- hello,world
- java获得当前文件路径
- vim常用设置
- 2017特许加盟展武汉站会刊(参展商名录)
- FTP主动被动模式(PORT PASV)
- [LeetCode] Add Two Numbers
- java自制链式调用