ARKit 开发系列(1)----Xcode开发ARKit应用

AR开发者社区http://www.arparticles.com/


ARKit 开发系列(1)----Xcode开发ARKit应用

ARKit 开发系列(1)----Xcode开发ARKit应用

AlbertLee

AlbertLee

2 个月前

原文链接(关注我们网站:AR开发者社区):ARKit 开发系列(1)----Xcode开发ARKit应用

苹果在 WWDC 上发布了ARKit 全新的AR框架,使得开发者可以更快速的为iphone或ipad 构建增强现实应用,这也毫无疑问的使得ios成为全球最大的AR开发平台。所以了我们也开设了ARkit技术分享与开发教程这一全新系列帮助大家更好的了解ARKit。这一次给大家带来 通过Xcode快速的为iphone或ipad构建AR应用(翻译并整理于:Next Reality " Augmented & Mixed Reality News, Rumors & Dev Guides)

预览:

ARKit 开发系列(1)----Xcode开发ARKit应用

开发准备

在Mac电脑上下载并安装MacOS 10.13和Xcode 9的测试版本。并使你的iphone或ipad升级ios 11版本

首先在Xcode里创建一个新的项目。

选择增强现实应用程序图标,然后单击“下一步”按钮,按顺序操作。

一切都加载完毕后,我们就进入到项目里:

修改模型

ps:以下操作其实也无关紧要,因为sample 中苹果已经准备好了默认的模型在项目里,这里教大家如何替换模型

我们需要准备一些dae格式的3d模型,在本次案例的演示中,我们使用一个类似广告牌的模型。我们可以在TurboSquid网站上进行下载(free billboard games 3d model)。

下载完成之后,我们需要解压来完成广告牌上纹理的替换。首先我们准备一张图片:

然后打开我们下载的模型文件夹,可以看到billboard.dae文件和纹理的“tex”子文件夹。打开“tex”文件夹。

将“pict1.jpg”和“pict2.jpg”替换我们所准备好的图片。

效果如图:

Xcode默认的AR项目自带了一个3D模型,我们需要用我们刚创建的模型替换它。查看我们的Project Navigator,找到一个名为art.scnassets的文件夹。

选择“ship.scn”和“texture.png”,然后删除。

按住Control键,选择“art.scnassets”文件夹。然后选择“Add Files to art.scnassets”。

现在我们事先准备好的模型就已经导入完毕了。

接下来,我们需要对模型的位置等信息进行设置。点击下面的截图中的红色箭头指向的小图标。

我们需要手动输入我们的设置(大家可以参考下数值)

Position x:0.255 y: - 57 z:-87

Scale x:0.09 y:0.09 z:0.09

我们需要在ViewController.swift文件中更改一行代码。双击该文件在主窗口中打开代码。向下滚动代码到具有下面突出显示的文本的行。把“ship.scn”改成“billboard.dae”。

let scene = SCNScene(named: art.scnassets/billboard.dae")!

然后我们运行测试,就会实现此效果。

代码分析(1)

对于ARKit,我们需要重点了解ARSession。它是管理创建AR体验所需的运动跟踪和图像处理的对象。

在 AR 场景中,首先就是要配置一个 ARSession对象,用来管理摄像头拍摄和对设备动作进行处理。

1.从 Session 中检索视频帧和追踪信息;

2.将这些帧图像作为背景,渲染到自定义视图当中;

3.使用追踪信息,在相机图像上方定位并绘制 AR 内容。

在ARSession中有两个重要的类,分别是:ARSCNView与ARSKView。前者主要通过3D SceneKit内容增强了相机视图,后者2D SpriteKit内容的相机视图。

我们启动ARSession

override func viewWillAppear(_ animated: Bool) {

super.viewWillAppear(animated)

// 创建 Session 配置

let configuration = ARWorldTrackingSessionConfiguration()

configuration.planeDetection = .horizontal

// 运行视图 Session

sceneView.session.run(configuration)

}

然后使用SceneKit或SpriteKit将虚拟内容放置在视图中。

ARKit会将SceneKit 自动匹配到现实世界中,所以放置一个虚拟对象,为了使其看起来保持真实的位置,这要求你适当地设置模型的位置。例如,在默认配置中,以下代码将10厘米的立方体放置在相机初始位置前20厘米处:

letcubeNode =SCNNode(geometry:SCNBox(width:0.1, height:0.1, length:0.1, chamferRadius:0))

cubeNode.position =SCNVector3(0,0, -0.2)

sceneView.scene.rootNode.addChildNode(cubeNode)

当然你可以使用ARAnchor类来跟踪现实世界的位置,例如,当启用平面检测时,ARKit会为每个检测到的平面添加并更新锚点。要为这些锚点添加可视化内容,可以执行以下方法:ARSCNViewDelegate

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

guard let planeAnchor = anchor as? ARPlaneAnchor else { return }

let plane = SCNPlane(width: CGFloat(planeAnchor.extent.x), height: CGFloat(planeAnchor.extent.z))

let planeNode = SCNNode(geometry: plane)

planeNode.position = SCNVector3Make(planeAnchor.center.x, 0, planeAnchor.center.z)

planeNode.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)

node.addChildNode(planeNode)

}

SpriteKit 的操作就简单许多,它可以显示浮动的2D图像在3D空间中。

var translation = matrix_identity_float4x4

translation.columns.3.z = -0.2

let transform = simd_mul(view.session.currentFrame.camera.transform, translation)

let anchor = ARAnchor(transform: transform)

view.session.add(anchor: anchor)

func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? {

return SKLabelNode(text:"👾")

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • ARkit Introducing ARKit iOS 11引入ARKit,这是 个全新的框架,允许开发者轻松地为...
    坤哥爱卿阅读 1,323评论 0 1
  • iOS ARKit 教程:不触摸屏幕,用空气中的手势作画 本文翻译自 iOS ARKit Tutorial: Dr...
    零度_不结冰阅读 1,782评论 0 6
  • 一、AR简介: 多媒体捕捉现实图像:如摄像头 三维建模:3D立体模型 传感器追踪:主要追踪现实世界动态物体的六轴变...
    DeerRun阅读 1,414评论 0 2
  • 无挂碍,故无有恐怖,远离颠倒黑白! 记不清是清晨还是黄昏!周而复始! “叮铃铃,闹钟一响,小中就起床了,没有丝毫的...
    乱世安家呀阅读 458评论 0 0
  • 昨晚的梦 昨天和一个女孩(上大学)聊天,说了很多话。关于学校、社会、生活、梦想、工作,她的身上...
    于小鱼_3618阅读 156评论 2 1