react和vue的比较
相同
1)vitual dom
2)组件化
3)props,单一数据流
不同点
1)react是jsx和模板;(jsx可以进行更多的js逻辑和操作)
2)状态管理(react)
3)对象属性(vue)
4)vue:view——medol之间双向绑定
5)vue:组件之间的通信(props,callback,emit)
-
初次接触
ARKit
,很多人会为其复杂的架构关系而感到畏惧。这里笔者将以最基础简介的方式带领一下一睹苹果原生AR(虚拟增强现实)的风采 -
ARKit并不是一个独立就能够运行的框架,而是必须要SceneKit一起用才可以,换一句话说,如果只有
<ARKit>
,而没有<SceneKit>
,那么ARKit和一般的相机没有任何区别 -
由于笔者从事多年的iOS应用开发,并没有从事过3D游戏的开发(只是业余爱好写了一个3D打飞机的游戏),所以在本篇介绍
ARKit的过程中,我们将以最小的篇幅来介绍
SceneKit,毕竟如果没有丰富的3D游戏开发经验,那么光是相机捕捉到的2D界面如果转化为3D世界的矩阵都非常难以理解
-
关于3D系统X/Y/Z,与4x4矩阵等之间的转换及关系,不会过多深入,笔者将保证每一个不懂3D游戏开发的人都可以学习如何使用ARKit
-
笔者认为:ARKit最难的部分在于3D坐标的矩阵转换
-
笔者介绍ARKit的流程大概如下
-
1.介绍ARKit的工作原理及流程(本篇)
-
2.通过对ARKit的原理及流程的了解,我们自定义实现ARKit
-
3.介绍ARKit框架中的所有API,PS:是翻译官方整个ARKit框架中所有的API………………~
-
4.介绍ARKit框架中几个重量级的类
ARScnView
,ARSession
,ARCamera
-
5.ARKit实现捕捉现实世界中的平地,并将虚拟物体添加到平地中
-
6.ARKit实现让虚拟物体跟随相机移动
-
笔者没有单独的3D模型,这里主要以苹果官方给出的参考3D模型(飞机)来实现
-
7.ARKit实现让虚拟物体围绕摄像机(拿着iPhone的人)旋转
-
1.在上一小节中介绍过,AR技术叫做虚拟增强现实,也就是在相机捕捉到的现实世界的图像中显示一个虚拟的3D模型。这一过程可以分为两个步骤:
-
一:相机捕捉现实世界图像
-
由
ARKit
来实现 -
二:在图像中显示虚拟3D模型
-
由
SceneKit
来实现 -
2.下图是一个
<ARKit>
与<SceneKit>
框架关系图,通过下图可以看出 -
继承:子类拥有父类所有的属性及方法
-
1.
<ARKit>
框架中中显示3D虚拟增强现实的视图ARSCNView
继承于<SceneKit>
框架中的SCNView
,而SCNView
又继承于<UIKit>
框架中的UIView
-
UIView的作用是将视图显示在iOS设备的window中,SCNView的作用是显示一个3D场景,ARScnView的作用也是显示一个3D场景,只不过这个3D场景是由摄像头捕捉到的现实世界图像构成的
-
2.
ARSCNView
只是一个视图容器,它的作用是管理一个ARSession
,笔者称之为AR会话。 -
ARSession的作用及原理将在本篇下一小节介绍
-
3.在一个完整的虚拟增强现实体验中,
<ARKit>
框架只负责将真实世界画面转变为一个3D场景,这一个转变的过程主要分为两个环节:由ARCamera
负责捕捉摄像头画面,由ARSession
负责搭建3D场景。 -
4.在一个完整的虚拟增强现实体验中,将虚拟物体现实在3D场景中是由
<SceneKit>
框架来完成中:每一个虚拟的物体都是一个节点SCNNode
,每一个节点构成了一个场景SCNScene
,无数个场景构成了3D世界 -
5.综上所述,ARKit捕捉3D现实世界使用的是自身的功能,这个功能是在iOS11新增的。而ARKit在3D现实场景中添加虚拟物体使用的是父类
SCNView
的功能,这个功能早在iOS8时就已经添加(SceneKit是iOS8新增) -
今后在介绍使用
ARSCNView
时将不再累述这一关系,可以简单的理解为:ARSCNView
所有跟场景和虚拟物体相关的属性及方法都是自己父类SCNView
的
0301.png
1.3.1-ARSCNView与ARSession
-
1.ARKit提供两种虚拟增强现实视图,他们分别是3D效果的
ARSCNView
和2D效果的ARSKView
(关于3D效果和2D效果区别以及在上一小节介绍),无论是使用哪一个视图都是用了相机图像作为背景视图(这里可以参考iOS自定义相机中的预览图层),而这一个相机的图像就是由<ARKit>
框架中的相机类ARCamera
来捕捉的。 -
2.
ARSCNView
与ARCamera
两者之间并没有直接的关系,它们之间是通过AR会话,也就是ARKit框架中非常重量级的一个类ARSession
来搭建沟通桥梁的 -
在iOS框架中,凡是带session或者context后缀的,这种类一般自己不干活,作用一般都是两个:1.管理其他类,帮助他们搭建沟通桥梁,好处就是解耦 2.负责帮助我们管理复杂环境下的内存
最后
我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
篇幅有限,仅展示部分截图:
89cd2de0211d347.png)