今年7月Apple推出了AR工具ARKit,着实闪着了大家的眼睛。从目前的评测可以知道 ARKit已经非常成熟,完全可以进行商用了。 在iOS中,增强现实由ARKit和渲染两部分组成。...ARKit.png SceneKit 的主要作用是将虚拟物体展示在3D场景中。...每个虚拟物体都可以用 SCNNode 来代表,SCNNode 在 SCNScene 中展现,而无数SCNScene 组成 3D 世界。...通过 SCNNode 可以对虚拟物体进行变换和旋转,还可以做几何变换,光照等操作。 SCNScene 在ARKit中它代表一个场景。SCNScene 包括背景 和 虚似物体。...这个 任意门 可以应用在很多场景中,大家可以通过这个实例进行扩展,充份发挥自己的想像力。 其实本节最最关键的是让大家知道 ARKit中的那些基本概念。
下载 软件开发工具包 iOS 11.3+ Xcode 10.0+ Beta 概观 此示例应用程序运行ARKit世界跟踪会话,其内容显示在SceneKit视图中。...重要 如果您的应用需要ARKit作为其核心功能,请使用应用文件部分UIRequiredDeviceCapabilities中的arkit键,使您的应用仅在支持ARKit的设备上可用。...为检测到的平面放置3D内容 设置AR会话后,可以使用SceneKit在视图中放置虚拟内容。 启用平面检测后,ARKit会为每个检测到的平面添加和更新锚点。...中的世界跟踪 发现支持概念,功能和最佳实践,以构建出色的AR体验。...class ARPlaneAnchor 有关在世界跟踪AR会话中检测到的真实世界平面的位置和方向的信息。
因此在进行AR配置之前,首先我们需要确认用户设备是否支持我们将要创建的AR体验 ARFaceTrackingConfiguration.isSupported 对于不支持该ARKit配置的设备,提供其它的备选方案或是降级策略也是一种不错的解决方案...然而如果你的app确定ARKit是其核心功能,在info.plist里将ARKit添加到UIRequiredDeviceCapabilities里可以确保你的app只在支持ARKit的设备上可用。...当我们配置使用ARFaceTrackingConfiguration,session会自动添加ARFaceAnchor对象到其anchor list中。...因此我们需要渲染一个用来遮挡的node并实时更新其几何信息,使用户在头歪向一边的时候3D眼镜的镜架能被人脸正确遮挡。 - (SCNNode *)occlusionMaskNode { if (!...需要注意的是,由于ARKit只对人脸区域进行建模,在3D模型设计的时候还需去掉一些不必要的部件:比如眼镜的模型就不需要添加镜脚,因为耳朵部分并没有东西可以去做遮挡。
ARKit - 检测到平面并映射到楼层 在我们的第一个hello world ARKit应用程序中,我们设置了我们的项目并渲染了一个虚拟3D立方体,可以在现实世界中渲染并在您移动时进行跟踪。...一旦我们在本文中完成了平面检测,在以后的文章中我们将使用它们将虚拟对象放置在现实世界中。...增强现实的目的是能够在特定点将虚拟内容插入到现实世界中,并在您在现实世界中移动时拥有虚拟内容轨道。使用ARKit,其基本过程包括从iOS设备相机读取视频帧,为每个帧处理图像并提取特征点。...渲染飞机 通过上述信息,我们现在可以在虚拟世界中绘制SceneKit 3D平面。为此,我们创建一个继承自SCNNode 的Plane类。...请注意,在ARSCNViewDelegate回调中,您必须处理ARKit在合并平面时删除了ARPlaneAnchor实例的情况。
要向scene中添加内容,要创建SCNGeometry,然后将其包装为SCNNode并添加到SCNScene中。...的功能,下面简单介绍ARKit的工作原理: ARKit工作原理 在ARKit中,创建虚拟3D模型其实可以分为两个步骤: 相机捕捉现实世界图像–由ARKit实现 在图像中显示虚拟3D模型/2D模型–由SceneKit...在一个完整的AR体验中,ARKit框架只负责将真实世界画面转变为一个3D场景,这一个转变的过程主要分为两个环节:由ARCamera负责捕捉摄像头画面,由ARSession负责搭建3D场景,而将虚拟物体显示在...3D场景中则是由SceneKit框架来完成,每个虚拟物体都是一个节点SCNNode,每个节点构成一个场景SCNScene。...ARKit class结构 ARSessionConfiguration的主要目的就是负责追踪相机在3D世界中的位置以及一些特征场景的捕捉(例如平面捕捉),这个类本身比较简单却作用巨大。
因此在进行AR配置之前,首先我们需要确认用户设备是否支持我们将要创建的AR体验 ARFaceTrackingConfiguration.isSupported 对于不支持该ARKit配置的设备,提供其它的备选方案或是降级策略也是一种不错的解决方案...然而如果你的app确定ARKit是其核心功能,在info.plist里将ARKit添加到UIRequiredDeviceCapabilities里可以确保你的app只在支持ARKit的设备上可用。...当我们配置使用ARFaceTrackingConfiguration,session会自动添加ARFaceAnchor对象到其anchor list中。...实测下来在帧率60的情况下,每4帧里有1帧包含深度信息。...需要注意的是,由于ARKit只对人脸区域进行建模,在3D模型设计的时候还需去掉一些不必要的部件:比如眼镜的模型就不需要添加镜脚,因为耳朵部分并没有东西可以去做遮挡。
在iOS 8和OS X Yosemite中,Apple加入了一个名为simd的库,用于为标量,向量和矩阵实现SIMD(单指令,多数据)算法。...它还具有使用Metal在GPU和CPU之间轻松传输数据的好处。...我们将子类化SCNNode并为其赋予title属性,该属性是一个字符串,一个锚属性,它是一个可选的****ARAnchor,在设置时更新位置。...import SceneKit import ARKit import CoreLocation class BaseNode: SCNNode { let title: String...由于我们只需要MKRouteStep指令中的文本,我们应该创建方法: import SceneKit import ARKit import CoreLocation class BaseNode:
首先介绍几个经常出现的类 #ARSCNView #ARSession #ARWorldTrackingConfiguration #SCNScene #SCNNode *** ARSCNView 用于显示虚拟...3D模型常常是.scn .dae .fbx格式 如果你创建了AR的工程 那么工程里会有一个小飞机的3D模型 在art.scnassets文件夹,名为ship.scn *** #ARSession 是用于管理相机类和会话类的...*** #SCNNode 节点,它可以是在美工拿过来的模型(不规则),也可以是你自己用代码创建的模型(常常是规则的) *** #ARKit 这个框架主要是管理相机和相机铺抓到的画面 给SceneKit提供坐标和角度...*** #SceneKit 这个框架才是管理3D模型 如果你想用纯代码创建一个AR工程,那么你应该把系统自动在Main.storyboard创建的ARSCNView给去掉 具体代码如下 // //...All rights reserved. // #import "ViewController.h" //导入框架 #import ARKit/ARKit.h> #import <SceneKit
AR - 使用相机创建虚拟对象放置在物理世界中的错觉。 我们知道增强现实并不是新的,但由于Apple的新框架,AR现在正受到很多关注。...ARKit以卓越的性能完成所有这一切,并且有很好的文档记录。 需要一些想法才能使用ARKit?您可以查看madewitharkit,并通过在您的应用上加入此框架来了解可能实现的目标。...,所以我决定使用ARKit创建自己的测量应用程序。 我开始观看介绍ARKit:来自WWDC17的iOS增强现实视频。然后我阅读文档并使用演示应用程序(在增强现实中放置对象)。...从演示中,我了解到场景单元映射到ARKit中的米,所以这是一个很好的提示。 两个节点之间的距离 我想要一个基本的应用程序,只需点击屏幕选择点并计算最后一个点击与前一个点的距离。...增强测量 在第一次实现之后,我注意到测量不准确,因为您不能保证节点A和节点B在同一表面中。在那种情况下,我需要平面检测功能。
现在我们已经完成了正确运行ARKit项目的所有基本设置,我们希望我们的设备能够坐在水平表面上。这是飞机检测。在本节中,我们将学习如何激活平面检测。我们将熟悉锚点以及如何使用它们将对象放置在锚点上。...为了更多地了解Swift中的委派,我邀请您访问或查看本书第4章中的委托部分。 扩展课程 为了保持井井有条,让我们创建一个新文件来托管与ARSCNViewDelegate相关的所有代码。...import SceneKit import ARKit 延期 这个文件将作为ViewController类的扩展,这里的代码将成为该类的一部分。...那是因为我们已经在同一个类中采用了ARSCNViewDelegate。在ViewController.swift文件中,将其删除。...该函数将返回一个SCNNode,如右箭头所示。所以基本上,它输入一个平面锚并输出一个节点。 你应该在一个函数中错误地返回一个预期返回'SCNNode'的函数中的Missing return。
ARKit1.5多了识别图片功能 与常见的第三方相比方便了不少 效果图如下: [image.png] 下面是使用流程 1.在Assets里创建一个AR Resources文件夹(其他名字也可以) 2.把图片放进...AR Resources,然后使用Xcode面板设置识别图像的实际大小 [image.png] 如果不设置大小会蹦 不过你没设置大小也会报警告 可以在官网(https://developer.apple.com.../documentation/arkit/arreferenceimage )上找到答案 [image.png] 3.创建一个ARReferenceImage对象,并赋值给世界追踪类的detectionImages...*/ ARSessionRunOptionRemoveExistingAnchors 然后便可在代理方法中给目标图片添加3D模型了 - (void)renderer:(idSCNNode new]; CGFloat w = referenceImage.physicalSize.width;
jpARSCNView.delegate = self; -(void)renderer:(id)renderer didAddNode:(SCNNode...)node forAnchor:(ARAnchor *)anchor ; -(void)renderer:(id)renderer didUpdateNode:(SCNNode...)node forAnchor:(ARAnchor *)anchor ; -(void)renderer:(id)renderer didRemoveNode:(SCNNode...* jpNode = [SCNNode nodeWithGeometry:jpBox]; jpNode.position = SCNVector3Make(0, 0, -0.5);...(anchor.center.x, 0, anchor.center.z); // SceneKit 里的平面默认是垂直的,所以需要旋转90度来匹配 ARKit 中的平面
发布会上演示的四款ARKit游戏和应用 我们先来谈谈那四款在苹果秋季发布会上出尽风头的ARKit应用和游戏,他们分别是《The Machines》、《战锤40K:自由之刃》、《职业棒球联盟At Bat》...玩家们可通过摄像头在现实环境的背景下看到游戏里的虚拟世界,进行对战。值得一提的是,游戏音乐采用LBS定位,因此当玩家在不同区域的时候,还能听到风格各异的音乐。...通过ARKit,《战锤40k:自由之刃》允许玩家在现实场景中进行机械装甲的对抗。玩家只需要打开摄像头,就能部署机甲在自己的身边,通过操控机甲,攻击外星入侵者。...《职业棒球联盟At Bat》 在《职业棒球联盟At Bat》中,玩家可以清晰地看到叠加在屏幕上的球员的统计数据和得分,能够更加清楚地了解场上的情况。...在屏幕上显示出相关的星座资料,充实玩家们的天文知识。对于天爱好者来说,这将是一个不错的查找资料工具。 ? 网红ARKit为何如此讨人喜爱?
虽然我们可以用 SpriteKit 把 2D 的卡片放置到 3D 的 AR 世界中,但是考虑到扩展性,方便之后为 AR 页面添加新的功能,这里我们选用 3D 渲染引擎 SceneKit。...借助 UIGraphics 中的一些方法可以将绘制好的 UIView 渲染成一个 UIImage 对象。根据这张图片创建 SCNPlane,以作为 SCNNode 的外观。...这里列出一个在屏幕上具体的像素数与距离的粗略计算公式,为笔者在开发过程中摸索的经验值: ?...点击 熟悉 Cocoa Touch 的朋友都了解,UIView 的层级结构是通过 hit-testing 来判断哪个视图响应事件的,在 ARKit 中也不例外。...本文介绍了 ARKit 的一些使用细节,总结了在开发过程中遇到的问题以及解决方案,希望可以给其他开发者带来一点参考价值。 作者简介 曹宇,美团 iOS 开发工程师。
在本课程中,您将学习如何通过检测您喜欢的任何图像以及如何在呈现模型时更改模型的材质,将您自己的3D模型放置在任何对象之上。...第一个AR项目 如果这是您的第一个ARKit项目,我强烈建议您阅读我们的ARKit简介,因为我们不会在这里介绍基础知识。...{ let node = SCNNode() return node } 该渲染器允许您从渲染场景中的节点,所以你就可以将其添加在图像的顶部。...if anchor is ARImageAnchor { } 平面 在锚声明中,声明一个具有此大小的平面。我们之所以希望平面的尺寸大于盒子的大小,是因为我们希望标签的错觉漂浮在空中。...您刚学会了如何通过检测图像将3D模型放置在您的环境中。在本课程的其余部分,我将教你如何制作动画,以及与按钮的互动。最重要的是,您将玩光照和阴影。
在下面的教程中,我将向您展示如何使用Swift和ARKit制作有趣的Domino游戏。 这就是我们要做的: ?...将以下行添加到您的类的顶部: var detectedPlanes: [String : SCNNode] = [:] 在viewWillAppear,在let configuration = ARWorldTrackingConfiguration...此公式计算两个点相对于轴(在本例中为X轴)之间的角度。...这是一个非常长的教程,但我希望它能帮助您了解创建交互式ARKit应用程序所需的过程,更重要的是,我希望您能够创建它。 如果您有任何问题或建议,请在下面的评论中写下。...他对增强现实充满热情,他现在的主要焦点是ARKit。他相信AR眼镜将取代智能手机的未来。您可以在Twitter上关注他或在LinkedIn上与他联系。
iOS中的ARKit入门 在撰写本文的时候,ARKit是iOS 11的一部分,目前仍处于测试阶段。因此,要想开始,你需要在iPhone 6s及以上版本下载iOS 11测试版,以及新的Xcode测试版。...ARKit可以与Sprite SceneKit或Metal配合使用。在Apple ARKit的例子中,我们使用的是iOS SceneKit,由Apple提供的3D引擎。...ARSCNView是一个名为SCNView的SceneKit主视图的子类,但它使用一些有用的特性扩展了视图。...焦点方是由样例代码提供的,而不是ARKit库,这是我们开始使用这个示例代码的主要原因之一。您可以在示例代码中包含的readme文件中找到更多关于它的信息。...我真的试图尽量减少在这篇文章中使用数学,但有时在3D世界中是不可避免的。
用于调整Kubernetes集群中的CoreDNS资源/需求的指南 Chris O'Haver 我正在分享在Kubernetes(1.12)中使用CoreDNS(1.2.5)运行的一些测试结果,以便为将...除了在默认配置中测试CoreDNS之外,我还测试了CoreDNS并启用了可选的autopath插件。...这些测试在启用autopath时量化了内存/性能交易。 本文中的指南和公式基于GCE中的一组集群测试,您的环境可能会有所不同。...内存和Pod 在大规模Kubernetes集群中,CoreDNS的内存使用率主要受集群中Pod和服务数量的影响。 ?...使用autopath插件 CoreDNS中的autopath插件是一个减轻ClusterFirst搜索列表惩罚的选项。启用后,它会减少客户端在查找外部名称时进行的DNS查询次数。
ARKit1.5里,新增了检测竖直平面的功能。为此特意写一个demo。...[self.sceneView.session pause]; } - (void)renderer:(id)renderer didAddNode:(SCNNode...imageAnchor.referenceImage; if ([referenceImage.name isEqual: @"lcw"]) { SCNNode...* tempNode = [SCNNode new]; CGFloat w = referenceImage.physicalSize.width;
在第二部分将讨论计算两个位置,以及如何利用位置数据,并翻译成在ARKit场景的位置之间的轴承。 介绍 ? image.png 提到“增强现实”,跳入大多数人头脑的第一件事是PokemonGO。...ARKit结合了设备运动跟踪,摄像机场景捕捉,高级场景处理和显示便利性,简化了构建AR体验的任务。 在iOS 11中,Apple已经将ARKit的强大功能释放到了iOS开发社区。...定义 视觉惯性测距(VIO):ARKit分析手机摄像头和运动数据,以便跟踪周围的世界。计算机视觉记录了环境中的显着特征,无论iPhone的移动如何,都能够保持对现实世界中位置的了解。...ARSession:在ARKit中,ARSession协调创建增强现实体验所需的逻辑和数据。这包括摄像机和运动数据以及在周围移动时跟踪世界所需的计算。...image.png worldAlignment - Apple Docs 创建AR体验取决于能够构建用于将对象放置在虚拟3D世界中的坐标系,该虚拟3D世界映射到设备的真实位置和运动。
领取专属 10元无门槛券
手把手带您无忧上云