一.ARKit的简介

开始进入正题吧

ARKit在iOS 11上推出的一个AR移动平台,支持A9以上的处理器,不支持模拟器。ARKit使用相机捕捉现实世界,使用SceneKit,SpriteKit或者Metal显示3D模型

 

ARKit的简单显示流程,而且在任何SCNScene他都有一个RootNode,就是根节点

AR场景中一个模型的3D显示坐标

 

ARKit中渲染场景的过程如下:

1.ARSCNView加载场景SCNScene

2.SCNScene启动相机ARCamera开始捕捉场景

3.捕捉场景后ARSCNView开始将场景数据交给Session

4.Session通过管理ARSessionConfiguration实现场景的追踪并且返回一个ARFrame

5.给ARSCNView的scene添加一个子节点(3D物体模型)

二.废话不多说,直接开始撸代码

1.新建项目工程,使用版本 xcode9.0 beta 手机系统 iOS 11 beta 9。在xcode中选择Augmented Reality App创建新的项目

 
 

2.创建完成之后在StoryBoard中视图中多出了一个ARSCNView

 
 

3.在ViewController中默认创建了ARCSCNView的一个连接,工程默认会加载一个飞机的模型在视图中显示

import UIKit
import SceneKit
import ARKit class ViewController: UIViewController, ARSCNViewDelegate { @IBOutlet var sceneView: ARSCNView! override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
//显示帧率和配置信息
sceneView.showsStatistics = true
let scene = SCNScene(named: "art.scnassets/ship.scn")!
sceneView.scene = scene
} override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let configuration = ARWorldTrackingSessionConfiguration()
sceneView.session.run(configuration)
} override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
sceneView.session.pause()
} // MARK: - ARSCNViewDelegate /*
// Override to create and configure nodes for anchors added to the view's session.
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
let node = SCNNode() return node
}
*/ func session(_ session: ARSession, didFailWithError error: Error) {
// Present an error message to the user
} func sessionWasInterrupted(_ session: ARSession) {
// Inform the user that the session has been interrupted, for example, by presenting an overlay
} func sessionInterruptionEnded(_ session: ARSession) {
// Reset tracking and/or remove existing anchors if consistent tracking is required
}
}

  

4.添加自己的3D模型

/// 创建视图
func createSceneForView() {
//初始化场景
let scene = SCNScene()
//创建一个半径为0.1的球
let sphere = SCNSphere(radius: 0.1)
//添加纹理
let material = SCNMaterial()
//添加的内容可以是图片 颜色 gif 视频等等
material.diffuse.contents = UIImage(named:"earth")
sphere.materials = [material]
//创建节点
let sphereNode = SCNNode(geometry: sphere)
//设置节点位置
sphereNode.position = SCNVector3(0,0,-0.5)
//添加到根节点
scene.rootNode.addChildNode(sphereNode) //添加一个箱子
let boxSphere = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
let boxMaterial = SCNMaterial()
boxMaterial.diffuse.contents = UIImage(named:"brick")
boxSphere.materials = [boxMaterial]
let boxNode = SCNNode(geometry: boxSphere)
boxNode.position = SCNVector3(0.4,0,-0.7)
scene.rootNode.addChildNode(boxNode)
mySCNView.scene = scene
}

  

5.显示的AR效果

 
 

ARKit----学习一的更多相关文章

  1. ios 学习路线总结

    学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...

  2. ARKit从入门到精通(4)-ARKit全框架API大全

    转载:http://blog.csdn.net/u013263917/article/details/73156679 1.1-ARKit框架简介 1.2-ARAnchor 1.3-ARCamera ...

  3. ARKit从入门到精通(2)-ARKit工作原理及流程介绍

    转载:http://blog.csdn.net/u013263917/article/details/73038519 1.1-写在前面的话 1.2-ARKit与SceneKit的关系 1.3-ARK ...

  4. ARKit从入门到精通(1)-ARKit初体验

    ARKit从入门到精通(1)-ARKit初体验 转载自:http://blog.csdn.net/u013263917/article/details/72903174 该系列文章共十篇,笔者将由易到 ...

  5. AR资料汇总学习

    ARKit 从入门到精通 http://www.chinaar.com/ARKit/5210.html ARKit 框架的学习 http://blog.csdn.net/biangabiang/art ...

  6. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  7. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  8. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  9. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  10. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. 通过samba服务将centos7指定文件挂载到window下

    做嵌入式开发,windows下编辑代码,虚拟机上编译,为了方便打算在虚拟机下搭一个samba服务器,将文件夹映射到windows下,搜索网上的方法,内容大同小异,试了半天终于成功了.特此记录一下步骤, ...

  2. C语言实现冒泡排序算法

    新人新气象,又一个学习C的新人来了. 冒泡排序,基础中的基础,原理不啰嗦了. 代码中display()为数组展示函数,sort_bubble()为直接实现排序,details()为带动画展示. #in ...

  3. SpaceVim 语言模块 elixir

    原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属快捷键 交互式编程 运行当前脚本 模块简介 这一模块为 ...

  4. OpenCV 3.2 Tracking 物体跟踪

    跟踪就是在连续视频帧中定位物体,通常的跟踪算法包括以下几类: 1. Dense Optical Flow 稠密光流 2. Sparse Optical Flow 稀疏光流 最典型的如KLT算法(Kan ...

  5. springboot 常用依赖

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...

  6. webpack loader 生成虚拟文件的方案

    此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 使用 webpack 的时候,难免需要写一些 loader,接着就会遇到一个很纠结的问题.该 loade ...

  7. jenkins--Jenkins+Git+coding+maven 实现自动化测试持续集成

    1.打开Jenkins官网,下载jenkins.war https://jenkins.io/download/ 2.将该war包直接放置到Tomcat的webapp下. 3.查看自己Tomcat的端 ...

  8. 第三篇 JavaScript基础

    知识预览 BOM对象 DOM对象(DHTML) 实例练习 转:https://www.cnblogs.com/yuanchenqi/articles/5980312.html#_label2 一.Ja ...

  9. Java开发工程师(Web方向) - 03.数据库开发 - 第5章.MyBatis

    第5章--MyBatis MyBatis入门 Abstract: 数据库框架的工作原理和使用方法(以MyBatis为例) 面向对象的世界与关系型数据库的鸿沟: 面向对象世界中的数据是对象: 关系型数据 ...

  10. Android 修改系统默认density

    如你所知在Anroid N 中,系统添加了多个级别的密度值供用户选择. 系统的默认的值就是 ro.sf.lcd_density 同时其他级别的默认值的大小基础也是以默认值为基础,然后乘以不同的比例得到 ...