| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> ARKit 初探 -> 正文阅读 |
|
[游戏开发]ARKit 初探 |
本篇主要介绍 ARKit,如何创建出 AR 项目,创建 AR 项目后的代码解读 1. AR 与 VR 的区别VR 是 Virtual Reality,也就是虚拟现实,而 AR 是 Augmented Reality,增强现实。 AR 是对现实世界的一种补充,一种增强,你的大部分精力还是放在现实世界中,AR 被用来丰富化现实世界的图像。 AR 和 VR 都是创造虚拟图像的技术,但前者是基于现实世界的,没有现实世界的图像,AR 创造出来的图像是没什么意义的,而 VR 是完全虚拟的,它会在虚拟世界中虚拟出一面桌子,然后在虚拟的桌子上在创造一个虚拟的城堡。 对于 AR 这样一个神奇的技术,Apple 在 WWDC 2017 上顺势推出了 AR 引擎和开发框架,这个框架就叫做 ARKit。 2.ARKit的简单介绍2.1?ARKit 框架提供了两种AR技术,一种是基于 3D 场景(SceneKit)实现的增强现实,一种是基于2D 场景(SpriktKit)实现的增强现实。 2.2 要想显示 AR 效果,必须要依赖于苹果的游戏引擎框架(3D引擎SceneKit,2D引擎SpriktKit),主要原因是游戏引擎才可以加载物体模型。 ARKit 不是一个独立就能够运行的框架,要与 SceneKit?或者 SpriktKit?一起用。换句话说,如果只有 ARKit 2.3 ARKit可以调用iOS设备中的两个摄像头,并且可以选择增强任意一个。但是每次只能展示一个摄像头的内容给用户。 ARWorldTrackingConfiguration 后置摄像头 ARFaceTrackingConfiguration 前置摄像头 3.ARKit 工作原理(很重要)3.1 ARKit 要与 SceneKit 或者 SpriktKit 连用原因是 AR 技术叫做虚拟增强现实,也就是在相机捕捉到的现实世界的图像中显示一个虚拟的3D模型。这一过程可以分为两个步骤: 一:相机捕捉现实世界 ?-> ?ARKit实现 二:显示虚拟 3D 模型 ?-> ?SceneKit实现 3.2 ARKit 与 ScneneKit 关系(1)
这个转变的过程主要分为两个环节:由 ARCamera (4)在一个完整的虚拟增强现实体验中,将虚拟物体现实在 3D 场景中是由 SceneKit 每一个虚拟的物体都是一个节点 SCNNode,每一个节点构成了一个场景? 3.3 ARSCNView 与 ARSession上面提到? 其实 ARSCNView 与 ARCamera 两者之间并没有直接的关系,它们之间是通过 AR 会话,也就是ARKit 框架中的一个类 ARSession 来搭建沟通桥梁的.(个人理解有点类似于MVC 中的 Controller) 要想运行一个? 4. ARKit 工作流程1?ARSCNView 加载场景 SCNScene 2?SCNScene 启动相机 ARCamera 开始捕捉场景 3?捕捉场景后 ARSCNView 开始将场景数据交给 Session 4 Session 通过管理 ARSessionConfiguration 实现场景的追踪并且返回一个 ARFrame(相机的位置数据) 5?给 ARSCNView 的 scene 添加一个子节点(3D物体模型) 5.ARKit初体验打开xcode,新建project,选择 Augmented Reality APP ?在包含技术选项中选择SceneKit ?fine,此时 Xcode 帮助我们生成了一段简单的 AR 代码(效果在最后) 我们先来分析一下这些代码
这就是 Xcode 帮我们创建好的一个 ARSceneView 对象
我们之前在资源文件里看到了,有一个飞船的场景文件,这个场景文件也是在这里被载入的。使用 SCNScene 的初始化方法?
在创建好配置类的对象后,就可以使用 sceneView 的 session 来启动一次 AR session,这里的 session 就是每一个 AR 进程所需要的 session 对话,使用 run() 方法来启动一个 session。
当然,你可以使用 pause() 来停止一次 session,还可以再一次使用 run 来启动新的 session 剩下的代码是ARSCNViewDelegate 中的代理方法,可以简单了解一下 (当然对于代理方法,我本人的代码习惯更喜欢用 extension 拓展一下这个类)
1. renderer(:nodeFor:):新建一个 Anchor(锚点)时调用 2. session(:didFailWithError:):出现错误时调用,此时会终止 session 3. sessionWasInterrupted(:):中断 session 时调用 4. sessionInterruptionEnded(:):中断结束时调用 演示效果? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/17 4:09:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |