ARKit初探笔记(结合SceneKit)

ARKit 是对真实世界的捕捉与追踪

 

img1

其中ARKit有两个主要功能:

1.3D空间内的摄像机位置,假定手机相机为可移动的摄像机,所以在任意位置放置 3D 虚拟对象都会锚定在真实 3D 空间中对应的点上。

2. 水平面的检测,ARKit 可以检测诸如桌子这样的水平面,然后就可以在上面放置对象。

那么 ARKit 是怎么做到的呢?这是一项叫做视觉惯性里程计(VIO)的技术。从摄像头帧画面中追踪运动是通过检测特征点实现的,也可以说是高对比度图像中的边缘点——就像蓝色花瓶和白色桌子之间的边缘。通过检测两帧画面间特征点的相对移动距离,就可以估算出设备在 3D 空间里的位置。所以如果用户面对一面缺少特征点的白墙,或者设备移动过快导致画面模糊,ARKit 都会无法正常工作。

ARKit的基本知识:

捕捉真实世界:

ARSession

ARSession 是一个单例,用来管理、配置整个AR体验的主要流程,它包括:

从设备的运动传感器读取数据
控制摄设备内置摄像头,利用AVCaptureSession捕获实时的图像
对捕获到的图像进行分析,并对外输出ARFrame实例
综合运动数据和图像分析结果,建立起真实世界和虚拟世界的对应关系

每一个基于ARKit的AR项目都需要一个ARSession对象。

ARFrame
ARFrame实例是带有位置追踪信息(position-tracking information)的视频图像,对于ARFrame有以下三个要点:

正在运行的AR session会不断捕捉设备摄像头的视频帧。
对于每一帧,ARKit都会结合来自设备运动传感硬件的数据进行分析,以估算设备的实际位置
ARKit通过ARFrame向外传递当前帧的位置信息和图像参数

世界追踪:

ARWorldTrackingConfiguration
ARWorldTrackingConfiguration可以将虚拟世界和真实世界联系起来,这样当虚拟世界和真实世界同时渲染在屏幕上的时候,用户会产生虚拟内容是真实世界的一部分的错觉。

维护真实世界和虚拟世界的对应关系,我们还需要获取设备的移动信息。ARWorldTrackingConfiguration类从6个自由度(degrees of freedom)来追踪设备的运动:具体来说,三个旋转轴(滚动,俯仰和偏航)以及三个平移轴(在X,Y和Z中的移动)

planeDetection
设置这个属性,可以指定是否检测当前摄像头捕获图像中的平面。

ARSCNViewDelegate
接收捕获的视频帧图像
处理内容更新

场景理解
平面检测(Plane detection)
碰撞测试(Hit-testing)
光照估计 (Lighting estimation)

ARKit的坐标系是右手坐标系(包括世界坐标系、摄像机坐标系、投影坐标系,这里的摄像机指渲染虚拟元素的摄像机),z轴指向自己,x轴向右,y轴向左。

在这里插入图片描述

ARKit还有不少功能:

ARKit初探笔记(结合SceneKit)_第1张图片

ARKit初探笔记(结合SceneKit)_第2张图片

参考:

ARKit之路-运动跟踪原理_arkit坐标系__DavidWang_的博客-CSDN博客

ARKit之路-ARKit概述之一_arkit是什么__DavidWang_的博客-CSDN博客

ARKit和SceneKit实现3D模型交互swift scn dae_ios arkit实现模型驱动_最后的轻羽的博客-CSDN博客

ARKit原理了解:

ARKit原理_萝卜头敲代码的博客-CSDN博客

你可能感兴趣的:(swift,swift,ios,xcode,开发语言,ar)