Tag: arkit

ARKit —几何,材质,节点,手势哦,我的天哪!

本章是我的《 iOS开发者的ARKit》一书的一部分。 立即获取该书,并开始构建出色的增强现实应用程序。 在上一章中,您了解了创建默认ARKit应用程序所涉及的组件。 您还亲眼目睹了一只漂浮在您面前的太空船。 希望您已将其失踪的太空船告知了NASA! 在本章中,您将学习如何创建具有不同几何形状的虚拟对象,使用材质进行装饰,最后将它们作为SceneKit节点对象添加到现实世界中。 您还将学习如何使用手势和命中测试与虚拟对象进行交互。 让我们学习一些毕达哥拉斯定理。 几何: 几何表示与形状相对应的对象的线框。 SceneKit框架开箱即用地支持许多几何,此处显示了其中的一些。 SCNPlane :指定宽度和高度的矩形单边几何 SCNSphere :球形(或球形或球形)几何 SCNBox :六面多面体几何,其面均为矩形,可以选择带有圆角和圆角 SCNPyramid :直角金字塔几何 SCNTube :管的几何形状。 右圆柱体,其中心轴上有一个圆孔 每个类别代表一个特定的几何形状,可以一起使用以创建更复杂的形状。 材料: 默认情况下,几何图形只是线框。 您可以将几何体视为人类的骨骼。 材质就是您用肉装饰骨架的方式。 素材可以是颜色,图像甚至视频。 在阅读本节内容时,请确保您没有靠近食人族,否则他们可能会有错误的主意。 节点: 节点代表可以添加到场景中的对象。 只要未明确隐藏,添加到场景中的任何内容都可以被用户看到。 您可以将节点视为屏幕上的单个元素。 如果您要构建赛车游戏,那么一个节点可以代表一辆汽车。 如果要构建太空飞船游戏,则该节点可以是太空飞船,而一个单独的节点可以代表导弹。 节点也可以是复合节点,这意味着它们可以包含其他节点。 您可以想到一个代表大型卡车的节点,以及一个代表拖车,轮胎,货物等的子节点。 为真实世界添​​加形状: 首先,我们向增强现实世界添加一些形状。 在Xcode 9中创建一个新的Augmented Reality项目,并将清单1中的代码添加到viewDidLoad函数。 覆盖func viewDidLoad(){ super.viewDidLoad() //设置视图的委托 sceneView.delegate =自我 //创建一个新场景 让场景= SCNScene() let box = […]

开始在Xamarin中构建增强现实应用程序

为Dootrix工作的最大好处之一就是可以花时间在新技术上工作。 几个月前,我接到了一项激动人心的任务,即构建功能演示程序,以在iOS上使用增强现实技术向新老客户展示。 只是在寻找代码? 本文的源代码在这里🍷 什么是增强现实? 增强现实 ( AR )是物理现实世界环境的直接或间接实时视图,其元素被计算机生成的感知信息“增强” 增强现实应用程序的一个著名示例是Pokemon Go。 此移动应用程序将增强现实技术吸引了成千上万的年轻人。 此应用程序的前提是您可以前往不同的地方,并从字面上捕获移动设备上的Pokemon。 宠物小精灵看起来好像正站在地面上的前方。 然后,您将向上滑动以向其扔Pokeballs。 您如何在iOS中构建增强现实应用程序? 为iOS构建增强现实应用程序的技术被称为ARKit。 ARKit扩展了设备相机的功能,并允许您检测平面并将3D对象添加到虚拟世界中。 在线上的大多数示例向您展示了如何使用Objective-C或Swift进行此操作,但是此演示程序的要求之一是使用Xamarin和.NET进行此操作。 你是如何开始的? 您将需要一些入门知识: 运行macOS的计算机,例如MacBook Mac版Visual Studio 苹果设备(很遗憾,您无法使用模拟器进行测试😅) 您可能遇到的问题 无法部署到您的设备 在Visual Studio for Mac中首次构建项目时,它可能无法部署到设备。 要解决此问题,您需要: 在XCode中创建一个空白应用程序 让它自动为您生成发布配置文件 将其部署到您的设备 之后,您应该可以从VS for Mac deploy部署应用程序了 启动AR会话时,您的应用程序崩溃 这会吸引很多人。 我认识一些开发人员,他们花了一段时间研究为什么他们的应用程序崩溃时,如果他们想查看一切是否正常,却没有有意义的消息。 该解决方案将为您节省大量的时间和挫败感。 一旦知道,它就会被刻在您的大脑中😉 问题是您需要允许权限访问设备上的相机。 因此,您需要修改Info.plist文件并启用“隐私–摄像机使用说明”权限。 使用应用程序请求访问设备相机时将显示的值进行设置。 设置完之后,您的应用程序将不再崩溃。 不客气😎🎉 创建项目 如前所述,您将需要Visual Studio for Mac。 打开它,我们将选择iOS> […]

使用ARKit获取房间计划(大小很重要的情况)

故事作者:nomtek的iOS开发人员Przemek Olszacki 两年前,我写了一篇有关“用iPhone扫描房间”的文章,您可以在这里阅读。 我尝试使用三个内置传感器(加速度计,陀螺仪和磁力计)来测量墙壁的长度并绘制房间的平面图。 我处理了从这些传感器接收到的原始数据,并根据将加速度转换为距离的自写代码计算了墙之间的距离。 结果令人鼓舞,表明可以实现,但需要更高级的计算(或更精确的传感器)才能获得所需的精度。 回去工作! 自从我看到ARKit的发布以来,我一直在等待机会尝试一下。 这是两年前返回原型的好机会。 从公告和WWDC谈话中,ARKit看起来很有希望:它的准确性,实时渲染性能和易于实现。 现在该进行测试了。 返回测量室的另一个原因是运动传感器本身已更新。 从iPhone 5S开始,使用单独的协处理器收集和处理传感器数据。 自2013年以来,每年都会更新该芯片,并在iPhone 8、8 Plus和X上推出最新的M11。从理论上讲,这三款设备的结果应该是最准确的。 科学的力量! 在衡量最重要的帮助时,我们从ARKit获得的就是设备在太空中的放置。 使用相机图像和运动传感器,它可以确定手机的位置,方向以及与某些物体和表面的距离。 无需复杂且容易出错的代码即可根据传感器提供的原始数据来计算设备的运动。 苹果为我们完成了所有这一切。 唯一困难的部分是我们如何使用它。 我尝试了几种方法来找到最准确的一种。 让我引导您完成我的过程。 你在看什么? 在我的第一次尝试中,我只是尝试重新构建两年前的应用程序-通过在手机接触墙壁时获得其位置来测量墙壁之间的距离。 不同之处在于,我不是使用自写代码来计算距离,而是使用ARKit中的数据。 简而言之,它没有用。 ARKit使用相机图像来帮助确定手机在太空中的位置,并且当手机接触墙壁时,相机会被遮挡。 如果没有相机,数据将无法可靠使用。 需要进一步实验 下一个方法基于另一个ARKit组件-通过相交最近的特征点进行命中测试。 ARKit能够通过检测相机图像中的显着特征来找到物体的表面和轮廓。 从理论上讲,将击中测试与启用的检测特征点一起使用可以允许测量从手机到相机所指向的对象的距离。 用户将站在房间的中央,并将手机的摄像头对准墙壁。 来自ARKit的数据将用于确定3D空间中的墙位置。 设备的方向将用于获取墙的方向。 不幸的是,它不适用于墙壁,因为大多数墙壁没有明显的特征并且是单色的单色表面。 下一个。 要解决以前方法中的问题,必须更改测量点。 至少要考虑两个选项。 首先是打印可以被应用识别并用作功能点的特定图案。 例如,必须将打印内容粘贴在墙上,以便应用程序能够识别出来,而不是尝试在图像中查找平整的墙。 它可能会起作用,但对用户而言将非常不便,因此未实现该想法。 第二种选择是使用ARKit提供的其他类型的点击测试。 它基于对水平面的检测。 初始化AR世界追踪时,我们可以启用水平面检测。 启用此选项后,ARKit会不断寻找可用作跟踪锚点的水平面。 好了,所以我们可以检测到水平面,但是与找到显然是垂直表面的墙又有什么关系呢? 好吧,由于我们不需要墙的高度,因此可以通过在与墙连接的地方对地板进行碰撞测试来测量其位置。 与采用特征点的方法一样,墙壁的方向由手机的方向确定。 这次,距离精度令人满意,在良好的照明条件下,我们可以获得单个墙壁位置的可用测量值。 测量多个墙壁以绘制房间平面图时会出现问题。 检测到的墙壁方向取决于用户将手机与墙壁平行放置。 […]

ARKit印象

去年秋天,苹果公司通过在iOS 11更新中发布了名为ARKit的框架,回应了围绕增强现实已有一段时间的宣传。 开发人员一直在等待它,因为它很容易实现平易近人的集成摄像头和运动功能以将2D和3D内容添加到设备摄像头实时视图的方式,任何可以开发iOS应用程序的人现在都可以基本上开始开发AR应用程序了。 。 这增加了在AppStore中发现的AR应用程序的数量,这是很容易理解的。 最近,我获得了一个在工作中学习ARKit的机会,并且由于我以前没有3D编程的经验,我很高兴分享一些学习经验的话,以鼓励更多的新手通过演示如何参加3D编程。很简单。 关于生命的(最大)事情是,它往往会每天带给您很多意想不到的东西。 从今年年初开始,我开始在Siili Solutions(一家国际和现代的全方位服务技术公司)工作,该公司以其对员工技能发展的兴趣和支持而闻名。 但是实际上,这对我来说是一个很大的惊喜。 在我对Oulu的办公室和人们变得有点熟悉之后的头几天,我立刻就提供了使用ARKit学习3D编程的可能性。 我很激动。 这些年来,我注意到在学习新事物时,尽可能早地将理论与实践结合起来,可以给我最好的成绩。 有了ARKit,我决定使用相同的方法。 在半小时内,我们与一些同事提出了研究应用程序的想法,我们的站点经理希望我将工具(从新员工开始选择所需的工具)带到2018年。新员工选择工具后,便有可能看到新工作站的外观。 是时候让我包好袖子了。 我通过观看WWDC ’17关于ARKit的演示开始了这项任务,以了解它。 我以前从没看过任何WWDC演示,结果发现它们很有趣。 但是要当心,它们会变得非常昂贵(让我们看看我的新老板在问机票并从芬兰飞往加利福尼亚参加下一次活动时会说些什么)。 无论如何,这些演示文稿也非常有用,这些演示文稿中使用的可下载示例成为我学习中最重要的事情。 由于我们的虚拟工作站应该放置在真实世界中,因此第一件事就是弄清楚如何使应用程序了解真实世界的外观。 我以为,在现实打击我之前,这将是一件神奇的事情。 ARKit没有任何超能力,但是它仍然可以做一些非常酷的事情。 视频中显示,我需要启用平面检测以获取有关物理世界的信息。 顾名思义,目前只能检测平面,换句话说就是可以放置虚拟物品的表面。 在第一个版本中,这些平面只能是水平的,但是在新的Beta版本中它们已经包括了垂直平面。 因此,当打开平面检测功能时,ARKit所做的就是分析来自捕获的每个相机帧的特征点。 然后将这些特征点组合到锚点上,这些锚点用于跟踪设备在现实世界中的位置,方向和运动。 既然该应用程序(和我)已开始了解环境,现在该开始使用虚拟内容了。 我们办公室里有几位3D美术师,所以我寻求帮助来创建3D模型,而且我很快就有了用于桌子,电话和键盘的模型,可以开始使用XCode的场景编辑器进行游戏。 在我放弃对模型不必做任何事情的想法之后,事情变得非常简单。 从一开始从3DS Max导出模型时就有一些问题。 由于某种原因,直到从.obj切换到.dae之前,我们无法使粗糙纹理正常工作,但是我不确定是由于文件格式还是其他原因,因为3D行话来自一只耳朵然后从另一个出去 在编辑器中需要做的是,如果文件路径错误,则添加一个闪电环境,以手动设置纹理。 我还注意到,可以与编辑器中的物理机构一起工作,并最终浪费了大量时间来尝试使其工作,但不幸的是,这对我来说是死胡同。 出于某种原因,如果我将它们添加到编辑器或代码中,则它们与物理实体无关。 有时,当在编辑器中设置它时,根本没有包含该主体,有时,该形状不是应该的形状。 放置项目时具有此功能会很不错,因此,如果您知道如何使它工作(或者您发现我们的模型有问题),请告诉我! 现在我们已经可以使用模型并将其导入XCode,是时候将它们添加到现实世界了。 为此,我需要弄清的第一件事是如何获取要在现实世界中放置物品的地方的3D坐标。 通过遍历示例代码,我发现了有关命中测试的信息。 将虚拟平面添加到场景中之后,将在其上启用点击测试,以便我们可以使用设备屏幕上的2D坐标来获取添加平面上的对应3D坐标。 事实证明,命中测试对于从场景中查找已添加的虚拟内容也非常有用,这在进行交互时是必需的。 最后,是时候弄清楚手势是如何工作的,如何在没有物理的情况下将对象放置在桌子上,当然还有如何制作动画了。 事实证明,将物体放在桌子上非常简单,我们只需要在桌子足够靠近时提起物品,然后继续根据我们的手指位置进行命中测试。 但是当涉及到多个对象时,我需要对旋转和移动手势进行一些思考。 有了动画,没有什么特别的,并且在扩展SCNNode类之后,我使它们的工作方式与UIView.animation几乎相同。 除了Pokemon Go和Snapchat的面部过滤器外,还没有其他公认的AR突破,因此,看看新的创新将是一件非常有趣的事情。 该技术具有很大的潜力,所以让我们希望,未来将为我们带来应用,这些应用将以有意义的方式改变我们的日常生活。 该项目的源代码可以在以下位置找到 : 杰西·西波拉(Jesse […]

ARKit + SceneKit几何图形教程(第1部分)

越来越多的iOS开发人员正在使用ARKit创建有趣的应用程序,但是这些开发人员中的许多人总体上并未接触过3D图形。 我在这篇文章中谈论的3D图形的特定部分是几何。 这是学习OpenGL的人的起点,但使用SceneKit似乎更有吸引力,既可以使用内置几何类型,也可以从在另一个3D建模程序中创建的SCNScene文件导入节点。 自己生成这些几何图形有好处的地方,主要是因为您在沿途学习的东西! GitHub上的这个项目包含下面显示的所有示例 在本教程和第2部分结束时,您应该能够像下面这样在SceneKit中创建一个动画网格物体: 我们之前看过这个吗? 重点是什么? 关键是,一旦有了这些基础,您只需稍加戳戳即可创建稍微不同的几何形状,而无需引入外部模型。 上述立方体的尺寸为0.2×0.2×0.2。 如果创建一个我称为的新几何类型,例如SkewBox,它会引入一个额外的参数skew: CGPoint我可以这样更改顶点(也在GitHub上): 让 src = SCNGeometrySource(vertices:[ //底部4个顶点 SCNVector3(-w,-h,-l), SCNVector3(w,-h,-l), SCNVector3(w,-h,l), SCNVector3(-w,-h,l), //前4个顶点 SCNVector3(-w + skew.x,h,-l + skew.y), SCNVector3(w + skew.x,h,-l + skew.y), SCNVector3(w + skew.x,h,l + skew.y), SCNVector3(-w + skew.x,h,l + skew.y), ]) 输出: 从这里您可以创建任何六面体! 然后达到任何其他形状。 下一步是对几何图形进行动画处理以使其伸展和倾斜,这种方式无法简单地通过缩放节点,仅通过更改几何图形来完成,例如此处的示例: 单击此处查看第2部分。如果有任何不清楚的地方或对以后的帖子有任何建议,请随时在Twitter或LinkedIn上关注我/向我发送消息。 查看我的GitHub上的其他项目。

将DuckHunt与ARKit结合使用? -第2课:增强应用程序的体系结构

故事作者: nomtek的 iOS开发人员 Wojciech Trzasko 您可能还记得,最近我们从事了一个将经典NES游戏与我们的现实结合起来的小项目……哦,您不记得了吗? 没问题,这是一个偷偷摸摸的小故事,可以刷新您的记忆: 你还不记得吗 请查阅上一课,其中定义了Entity-Component-System模式和VIPER体系结构的基础。 目前,我们已经掌握了使用ECS模式为实时应用程序设计架构的知识,这与ARKit的经验非常吻合。 我们还了解了称为VIPER的广泛使用的iOS应用程序体系结构的基础。 因此,现在我们需要弄清楚如何连接这两个不同的世界。 为什么这两个有很大不同? 一方面,我们将ECS与ARKit相结合,该技术处理图像数据并基于结果提供实时信息。 在另一端,我们将使用以UIKit和VIPER架构为代表的基于事件的经典基础架构。 现在,该是最难的部分了。 如果有AR经验,我们将处理实时信息,而不是基于事件的基础结构。 现在,如果我们看一下经典的VIPER层,则演示者和交互者不太合适。 你是对的! 我们将尝试用ECS设计模式替换这些层。 为此,我们需要将用户的交互和对update方法的调用传递给ECS,但是由于ARKit和SceneKit的性质,此任务有些棘手。 要构建基于SceneKit的体验,您需要使用实现SCNSceneRenderer协议的对象。 对于AR场景,Apple提供了默认的AR渲染器实现,称为ARSCNView ,该渲染器将游戏逻辑和增强现实回调(例如updateAtTime , didSimulatePhysicsAtTime或didAddNodeForAnchor )返回给其委托。 因此,对于我们的ECS实施至关重要的所有回调,都将由严格连接到视图层的对象返回。 这是一个很大的障碍,如果我们不想实现自己的渲染器,则需要弄清楚如何处理它。 使它起作用的最简单方法是,从其大部分职责中裁剪视图图层并使其尽可能简单。 在我们的DuckHunt演示中,我们仅使用视图控制器对象来收集用户输入和所有逻辑回调,然后将它们传递给两个附加层: Scene和Gameplay 。 他们俩甚至都不知道视图的存在。 所有通信都通过这些层共享的接口进行。 那么,这两个新层的职责是什么? Scene是从SCNScene继承的类。 它加载并保存放置在世界上的3D对象图。 而且,它允许通过将动态对象公开来操纵它们。 游戏性是发生所有魔术的地方。 在这里,我们将介绍我们的ECS实施。 通常,它引用了我们的场景,并处理了世界上对象之间的所有交互。 让我们来看看DuckHunt游戏中的hunt模块。 HuntScene从scene.scn文件加载将在玩家周围显示的世界。 然后通过其公共界面共享鸭子生成点列表和一个其他节点。 我们允许HuntGameplay使用此节点为新生成的鸭子实体添加几何。 然后,我们将管理和确定系统顺序的逻辑从ECS模式转移到称为EntityManager的单独类。 因此,在他的最终形式中, HuntGameplay通过从EntityManager调用update来从View获取更新回调并将其传递给实体,然后根据需要生成新的Duck。 最后,它检查获胜条件。 如果满足,则要求线框移至下一个场景。 因此,如果您更深入地研究新层,您会发现与经典VIPER方法有些相似之处。 就像VIPER的视图等待演示者提供要显示的内容一样, 场景也等待游戏过程来确定世界上对象的新位置。 主要区别在于我们允许我们的游戏玩法向场景添加新的几何体。 […]

Unity ARKit示例:第2部分

创建一个Hello World应用程序。 本文是从Unity ARKit开始的系列文章的一部分, 示例:第1部分 。 你好,世界 我们首先构建使用Unity-ARKit-Plugin的绝对最小应用程序: 我们首先创建一个支持Unity-ARKit-Plugin的场景: 在Unity中 ,我们创建一个新文件夹, 资产>场景,并在其中创建一个新场景,例如Hello World。 我们修改主相机 ; 将“ 变换”>“位置”设置为(0、0、0),并将“ 摄像机”>“清除标志”设置为仅深度 我们将Unity AR Video脚本添加到主摄像机 。 然后我们将Unity AR Video> Clear Material设置为Assets> UnityARKitPlugin> Plugins> iOS> UnityARKit> Materials> YUVMaterial 我们将Unity AR Camera Near Far脚本添加到主摄像机 我们创建一个新的空GameObject ,例如ARCameraManager,并向其中添加Unity AR Camera Manager脚本。 我们将Unity AR Camera Manager> Camera设置为主摄像机 我们将预制资产Assets> UnityARKitPlugin> ARKitRemote> ARKitRemote添加到场景中 现在,我们为应用程序添加了一些特定的东西,例如,我们添加了具有以下内容的多维数据集 : 转换:(0,0,2) […]

探索ARKit:ARSCNPlaneGeometry

如果您听说过,Apple最近发布了ARKit的主要更新,称其为ARKit 1.5。 虽然很多注意力都集中在新的垂直平面检测功能上,而ARKit最初的版本已经明显忽略了这些功能,但关于其他新的平面检测功能的说法却很少。 令人兴奋的是失去了一些非常强大的新功能。 有争议的是,苹果公司的ARKit版本中最酷的功能是很少被提及的功能。 隐藏起来,我们为ARPlaneAnchor添加了一些新属性。 花一点时间看看这些。 在检测曲面的存在和位置/尺寸之前,在ARKit 1.5中,我们现在获取了轮廓和地面的位置。 ARPlaneGeometry — 3D网格,描述了在世界跟踪的AR会话中检测到的平面的形状。 此类以详细的3D网格形式提供检测到的平面的估计总体形状,该3D网格适用于各种渲染技术或导出3D资产。 与ARPlaneAnchor center和extent属性不同,后者仅估计检测到的平面的矩形区域,而平面锚的geometry属性则提供了该平面覆盖的2D区域的更详细的估计。 例如,如果ARKit检测到圆形桌面,则生成的ARPlaneGeometry对象将大致匹配表的一般形状。 随着会话的继续进行,ARKit提供了更新的平面锚,其关联的几何形状完善了平面的估计形状。您可以使用此模型更精确地放置应仅出现在检测到的平面上的3D内容-例如,确保虚拟对象不会掉到桌子的边缘。 您还可以使用此模型创建遮挡几何图形,该遮挡几何图形会将其他虚拟内容隐藏在相机图像中检测到的表面后面。平面几何图形的形状始终为凸形。 (也就是说,平面几何图形的边界多边形是一个最小的凸包,其中包含ARKit识别或估计的所有点都是该平面的一部分。) vertices-平面网格中每个点的顶点位置的缓冲区。 此缓冲区中的每个float3值代表坐标系统中顶点在网格中的位置,坐标系的原点由所属平面锚点的变换矩阵定义。vertexCount属性提供缓冲区中元素的数量。 triangleIndices缓冲区,描述覆盖平面整个表面的网格。 将此网格用于涉及填充形状的目的,例如渲染曲面的实体3D表示。 如果相反,您只需要知道形状的轮廓,请参阅boundaryVertices属性。 boundaryVertices —沿平面边界的每个点的顶点位置的数组。 该数组中的每个float3值均代表坐标系统中顶点沿估计平面边界多边形的位置,该坐标系的原点由所属平面锚点的transform矩阵定义。此数组定义平面的边界多边形。 将其用于仅需要该多边形的定义的目的,例如绘制平面的估计形状的轮廓或测试点是否在边界区域内。 如果相反,您需要填充的形状(例如,渲染曲面的实体3D表示),请参见vertices属性。 textureCoordinates —平面网格中每个点的纹理坐标值的缓冲区。 此缓冲区中的每个float2值代表vertices缓冲区中相应索引处顶点的UV纹理坐标。 ARSCNPlaneGeometry —平面的2D形状的SceneKit表示形式,用于AR会话中的平面检测结果。 此类是SCNGeometry的子类, SCNGeometry包装ARPlaneGeometry类提供的网格数据。 您可以使用ARSCNPlaneGeometry在ARSCNPlaneGeometry中快速轻松地可视化ARKit提供的平面形状估计。随着您的AR会话继续运行,ARKit会提供对检测到的平面2D形状的精确估计。 使用updateFromPlaneGeometry:方法将这些改进合并到平面的SceneKit表示中。 这是一台基本的3D扫描仪,尽管其准确度比使用激光传感器的3D扫描仪要低。 无论如何,这是巨大的。 多年来,人们一直在谈论这样一个时刻,即人们可以根据自己的环境快速便捷地创建3D扫描,以及可能带来的可能性。 好了,我们到了(尽管有一些警告) 首先,无论有没有平面几何的最新更新,我们都已经准备就绪。 据报道,苹果公司一直在寻求在其下一代iPhone型号中增加背面3D相机,以增强增强现实,因此,这只是我们今年夏天可能会看到的内容的预览。 这也不是最顺畅的用户体验,要完全检测到对象将非常耗时。 但是,看起来今年夏天有很多期待! 如果我不得不猜测,Apple可能会针对所有类型的表面/形状推出可用的表面检测。 希望2018年ARKit中所有遮挡难题也能结束! 导入UIKit 导入SceneKit 导入ARKit 类ViewController:UIViewController { @IBOutlet var […]

使用ARKit在iOS上的增强现实圣诞树

在圣诞节之前和iOS 11发布之后,Tamedia Digital的一些朋友认为,如果我们可以将iOS的新增强现实功能用于非常特殊的应用程序,那就太酷了。 我们称它为圣诞节那天。 想法是让我们的大堂全天打开iPhone,重点放在一棵圣诞树上,上面放着圣诞球,不断显示拍摄照片和视频的人的自拍照。 为了知道在哪里展示球,我们尝试了一些方法。 首先,我们使用了Yolo,这是一种经过预先训练的模型,能够检测我们的树(以及许多其他对象)并在图像中提供其位置。 这没有按我们预期的那样工作:这非常耗费资源,而且我们的树太近了以至于我们无法检测到它。 我们最终要做的是在树下的地面上放置一个QR代码,并使用Vision API对其进行检测,并猜测树在世界上的哪个位置,以便我们可以将圣诞球放在树上。 我们也可以检测到一个矩形,但是QR码被证明是非常快速和可靠的。 我们也可以使用2D对象检测,但是当时iOS尚没有。 一旦检测到QR码,我们就可以使用Vision API返回的VNRectangleObservation,它为我们提供了有关投影矩形区域的信息。 有了它,我们可以在场景中调用hitTest并猜测QR Code在我们的增强现实世界中的什么位置。 首先让我们开始介绍如何在这样的环境下建立我们的AR世界。 没有特别的顺序。 应用程序启动时会发生什么: 在应用程序启动时,我们确实创建了QR Code请求对象。 调用SCNSceneRendererDelegate的渲染器方法时,将使用此对象检测QR Code。 每秒发生60次:您可能希望每n帧进行一次检测,以保持应用程序流畅。 对于该应用程序,我们使用SceneKit在增强现实世界中显示对象。 成功检测到后,我们将计算QR码在AR世界中的位置,并渲染圣诞球。 let qrCodeRequest = VNDetectBarcodesRequest(completionHandler: {(request, error) 完成处理程序…您应在此处处理错误。 并注意以下力量: 结果为request.results! { 如果让条形码=结果为? VNBarcodeObservation { DispatchQueue.main.async { self.textManager.showMessage(“已检测到QR码”) } self.serialQueue.async { //让我们计算qrcode的位置并显示圣诞球 self.handleObservation(用于:条形码) } } } 不要忘了初始化ARKit并设置您的ARSCNView及其委托(ARSCNViewDelegate)。 您可能想要做的一件事就是更改您希望视图重绘其内容的速率。 让standardConfiguration:ARWorldTrackingConfiguration = { […]

从今以后,您将被称为ARKit-Emperor(ARKit 2.0示例代码)

很久以前,在一个遥远的星系中…… 这个时期iPhone SE和iPhone X从苹果商店中销毁了,AR市场受到了Pokemon GO的压力。 在战斗中,叛军间谍成功窃取了ARKit 2.0秘密计划的数据…… 这是什么? kboy-silvergym / ARKit-Emperor 功率! ARKit 2.0的强大功能! 通过在… github.com 上创建一个帐户为kboy-silvergym / ARKit-Emperor开发做出贡献 iOS 12已发布。 您已经使用过ARKit 2.0吗? 如果没有,请检查。 [ARKit-Sampler](https://github.com/shu223/ARKit-Sampler)的阴暗面。 Emperor为您提供了最实用的ARKit示例。 ARKit的力量无限! Doodle(ARKit 1.0〜) 您可以绘制真实空间! 此示例代码的性能并不理想,因为它每次您的手指移动都会添加一个新节点。 我所知道的最好方法是仅在您开始触摸屏幕并在移动手指期间更新其几何形状时添加节点。 请参阅[仅一行](https://justaline.withgoogle.com/)代码。 放置图片(ARKit 1.0〜) 将照片放入相框。 您可以在SceneKit上制作相框。 丰富平面检测(ARKit 1.5〜) ARKit 1.0可以使用平面检测,但是1.5可以使用更丰富的检测。 脸(ARKit 1.0〜) 通过ARKit2.0,您还可以检测到凝视和舌头。 本演示使用的是舌头检测。 永久备忘录(ARKit 2.0〜) 使用ARKit 2.0,您可以保存并加载ARWorldMap。 镜子(ARKit 2.0〜) 使用ARKit 2.0,它并不完美,但是对象会在环境中反射。 名片(ARKit 2.0〜) […]