一.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. 【转载】jquery实现勾选复选框触发事件给input赋值+回显复选框

    引用:https://blog.csdn.net/rui276933335/article/details/45717461 JSP: <td class="as1"> ...

  2. python应用:爬虫框架Scrapy系统学习第三篇——初识scrapy

    scrapy的最通用的爬虫流程:UR2IM U:URL R2:Request 以及 Response I:Item M:More URL 在scrapy shell中打开服务器一个网页 cmd中执行: ...

  3. Linux服务器安全检测维护基础汇总/持续更新

    登陆系统查询可以用户 w命令可以显示在线用户,passwd -l xxx可以锁定xxx用户无法登陆,如果此时可以用户在线,使用kill命令踢下线 查看可疑进程 ps -ef命令锁定pid,或者pido ...

  4. C程序设计语言笔记-第一章

     The C Programming language notes 一 基础变量类型.运算符和判断循环         char                 字符型  character      ...

  5. C语言实现 "谁是凶手?"

    日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个.以下为4个嫌疑犯的供词.A说:不是我.   a=0B说:是C.   c=1 C说:是D.      d=1D说:C在胡说    ...

  6. Linux C语言编程基本原理与实践

    Linux C语言编程基本原理与实践(2018-06-16 19:12:15) Linux C语言编程基本原理与实践 高效的学习带着目的性: 是什么 -> 干什么 -> 怎么用 重识C语言 ...

  7. Java设计模式(18)——行为模式之迭代子模式(Iterator)

    一.概述 概念 UML简图 // Aggregate:聚集(集合) 角色 抽象迭代子:定义遍历元素所需要的接口 具体迭代子:实现抽象迭代子接口,保持游标 聚集/具体聚集:定义/实现创建迭代子对象的接口 ...

  8. 【NIS】深入了解NIS

    1  简介 NIS( NetworkInformation Service)提供了一个网络黄页的功能,当用户登录系统时,Linux系统会到NIS主机上去寻找用户使用的帐号密码信息加以比对,以提供用户登 ...

  9. meta-data获取小结

    android 开发中:   在AndroidManifest.xml中,<meta-data>元素可以作为子元素,   被包含在<activity>.<applicat ...

  10. hdu1203I NEED A OFFER!(01背包)

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...