首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ARKit 初探

只有这几个基本概念了解清楚之后,我们才能清楚的知道如何去写一个AR程序。 几个重要概念 空间定位与方向追踪 这个是通过 ARCamera 获取到视频帧,再经过 VIO 计算出来的。...随着用户在真实世界中的移动,就可以利用相应的特征点来估算 3D 姿态信息。用户移动地越多,就会获得越多的特征,并优化这些估算的 3D 姿态信息。 有没有可能检测不出特征点的情况呢?...快速移动 通常情况下检测和估算 3D 姿态只会借助图片,如果摄像头移动太快图片就会糊,从而导致追踪失败。但 ARKit 会利用视觉惯性里程计,综合图片信息和设备运动传感器来估计用户转向的位置。...什么是平面检测 ARKit 的平面检测用于检测出现实世界的水平面,也就是在 3D 空间中,Y值为0的一个区域。平面检测是一个动态的过程,当摄像机不断移动时,检测到的平面也会不断的变化。...[self handleUserInRoom:NO]; } } 小结 今天首先向大家介绍了一下 ARKit 的基本知识,然后通过 任意门 这个实例告诉了大家如何写一个

2.3K20

ARKit示例 - 第2部分:平面检测+可视化

ARKit - 检测到平面并映射到楼层 在我们的第一个hello world ARKit应用程序中,我们设置了我们的项目并渲染了一个虚拟3D立方体,可以在现实世界中渲染并在您移动时进行跟踪。...当用户移动更多并且我们获得越来越多的功能时,这些3D姿势估计会得到改善。 对于平面检测,一旦您在3D中有许多特征点,您就可以尝试将平面拟合到这些点,并在比例,方向和位置方面找到最佳匹配。...快速移动  - 这对于ARKit来说是主观的,通常如果您只使用图像来检测和估计3D姿势,如果您移动相机太快,最终会出现模糊图像,导致跟踪失败。...为此,我们创建一个继承自SCNNode 的Plane类。...注意平面如何延伸超过实际曲面的边缘。

2.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

SceneKit_中级04_约束的使用

SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit...SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测...SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点...我举个简单的例子,帮助大家理解它的用法 如果你想要玩第一视角的游戏,这是我们需要让摄像机捕捉到人物移动时的位置,这是需要给照相机节点添加一个SCNLookAtConstraint 类型的约束,就能实现这个效果...*node, SCNMatrix4 transform))block SCNIKConstraint(反向运动约束) 1.作用: 将一个节点链移动到一个目标位置 给张图理解一下: 让学习成为一种习惯

59410

平面检测-搜索真实世界的表面

这是飞机检测。在本节中,我们将学习如何激活平面检测。我们将熟悉锚点以及如何使用它们将对象放置在锚点上。此外,我们将能够在现实生活中看到我们发现的飞机锚。从现在开始,我们将更多地投入到代码中。...水平平面检测 首先,我们需要打开配置的平面检测属性并将其设置为水平,以检测平面(如地板或桌子)。...您现在正在学习如何在代码中应用它。 飞机位置 所以,就像我们为手表所做的步骤一样,我们需要定位它。将平面节点放在检测到的曲面的中心。...您会看到在移动设备时,表面的大小会相应更新。 删除锚点 有时会发生错误。场景可以检测同一表面的多个锚点。我们可以通过添加didRemove方法来解决这个问题。...检测平面锚点是允许我们添加模型,就像它们坐在它们上一样,使其成为更真实的体验。您在本教程中学到的内容不仅可以让您了解如何模拟真实曲面,还可以模拟现实生活中的事件。

2.8K30

iOS版 使用ARKit和Swift创建交互式Domino游戏

在下面的教程中,我将向您展示如何使用Swift和ARKit制作有趣的Domino游戏。 这就是我们要做的: ?...由于我们之前已将检测到的平面保存在字典中,因此我们可以使用锚点的唯一标识符并检索我们的平面并更新其值。 运行应用程序: ? image 了解ARKit如何不断更新飞机? 我们不再需要看地面了。...为其添加绿色,创建一个放置在其中的节点,并使用我们通过命中测试检测到的坐标来定位它。我们在节点的Y位置添加一个“0.03”的值来向上移动我们的多米诺骨牌,否则一半的多米诺骨牌会在地板内!...将手机移动一下,以便ARKit可以检测到地板并用手指在屏幕上绘制: ? 3.png 好吧,热门测试工作正常,但现在我们遇到了一个新问题:这么多的多米诺骨牌!...多米诺距离 当用户在屏幕上移动他的手指时调用平移手势。由于这是连续移动,因此该方法每秒被调用多次。 我们需要想办法在每个多米诺骨牌之间留出一些距离。

2.3K30

ARKit介绍

在那种情况下,我需要平面检测功能。...垂直平面检测不是一个特征(但是),但可以用一行代码激活水平平面检测configuration.planeDetection = .horizontal然后ARKit将自动添加,更改或删除当前会话中的平面锚点...用户应该知道水平面何时可用,以便开始添加测量点。在苹果公司的ARKit演示实现了一个方形指示器,我认为它可以使用该sceneView.debugOptions属性,但事实并非如此。 ?...平面检测在行动中 平面检测在行动中 所以,我FocusSquare从Apple的演示中借用了这个课程。 最后,最后一个问题:如何将节点放在最近的平面上?...我已经知道如何将节点放置在摄像机所在的位置,但我如何获得距离最近的平面的距离。答案是:hitTest(_:types:)。

2.3K20

SceneKit_入门12_物理行为

SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit...SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测...SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点...正式开始 物理行为的定义 定义一个或多个物理组织的高级行为,行为包括连接多个物体的关节,可以让他们一起移动,也可以定义车轮这种行为,让身体想骑车一样滚动。...; SCNNode *text3 = [self createTextNodeWithString:@"天"]; SCNNode *text4 = [self createTextNodeWithString

74730

SceneKit_入门05_照相机

SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit...SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测...SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点...camera.orthographicScale = 10; 运行结果: 学习是一件很开心的事 补充点内容 上面我们有个操作是开启控制照相机 scnView .allowsCameraControl = true; 到底如何操纵我详细讲解一下...1.一个手指头的时候,照相机对准(0,0,0)沿着球体表面旋转 2.两个手指头平移手势,照相机是在X轴和Y轴移动 3.捏合手势,是在Z轴移动 致读者 SceneKit 游戏框架的照相机使用,基本内容已经讲解完毕

83320

《 iPhone X ARKit Face Tracking 》

创建人脸AR体验 以上介绍了一下使用ARKit Face Tracking所需要了解的新增接口,下面来详细说明如何搭建一个app以完成人脸AR的真实体验。...updateFromFaceGeometry:faceAnchor.geometry]; } } 这里我们是直接将蒙皮node添加到face node作为其childNode,因而不需要对其位置信息做额外处理就能跟随人脸移动...实现的原理是当用户人脸检测不到时记一个标志,再次检测到用户人脸时将其3D蒙皮的贴图换掉。...:(SCNNode *)node forAnchor:(ARAnchor *)anchor; 那么如何知道face tracking失败呢?...self.isTrackFace = faceAnchor.isTracked; } } } 同样的,我们可以在人脸node上添加其他3D模型(比如3D眼镜)的node使其跟随人脸移动

3.5K00

iOS ARKit教程:赤手在空中绘画

为了实现这一目标,ARKit假设你的手机是一个在真实3D空间中移动的摄像头,这样一来,在任何时候,任何一个3D虚拟物体都会被固定在3D空间的那个点上。...通过检测这些点在一个帧之间移动的距离,我们可以估算出这个设备在3D空间中的位置。这就是为什么当设备被放置在一个毫无特色的白色墙壁上或者当设备移动得非常快导致图像模糊的时候,ARKit不能正常工作。...在下一节中,我们将解释如何检测飞机,以及如何相应地定位焦点广场。在下一节中,我们将解释如何检测平面,以及如何相应地定位焦点。 检测平面 ARKit可以探测到新的平面,更新现有的平面,或者移除它们。...绘图的方法是通过检测移动手指的每个新位置,在那个位置上放置一个顶点,然后将每个顶点与上一个顶点连接起来。如果我们需要一个平滑的输出,顶点可以通过一条简单的线连接起来,或者通过一条更细的曲线来连接。...对于手指的每一个新位置,我们将在检测到的计划上放置一个非常小的圆形,几乎为零的高度。它会显示为一个点。旦用户完成绘图并选择3D按钮,我们就会根据用户手指的移动来改变所有掉落的物体的高度。

1.7K10

SceneKit_大神01_掉落的文字

SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit...SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测...SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点...高级09_雾效果 SceneKit_大神01_掉落的文字 SceneKit_大神02_弹幕来袭 SceneKit_大神03_navigationbar上的3D文字 让学习成为一种习惯 今天教大家如何实现下面的动画效果...floorNode.physicsBody = [SCNPhysicsBody staticBody]; 添加一个聚焦灯光 SCNNode *lightNode = [SCNNode node];

50320

SceneKit_中级11_动画事件

SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit...SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测...SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点...3D文字 让学习成为一种习惯 本节内容 本节重点讲解一个SCNAnimationEvent的用法 官方解释 用于在动画播放过程中的特定时间执行的闭包的容器(关键字特定时间\闭包) 用法案例 1.移动或者移除节点时...SCNNode node?.geometry?.firstMaterial?.

44400

SceneKit_中级05_力的使用

SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit...SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测...SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点...5.如何让所有物体失重呢? ... 你在学习一个东西的时候,应该想出很多问题,这样我们才能带着疑问探索,你会觉得很好玩。我们现在就去玩玩....,-1,0)) // 注意它只对线性力有影响,比如重力 @property(nonatomic) SCNVector3 direction; 决定哪些节点可以被影响(高级用法,暂时不讲,当学习了碰撞检测之后

58820

SceneKit_入门07_几何体

SceneKit_入门01_旋转人物 SceneKit_入门02_如何创建工程 SceneKit_入门03_节点 SceneKit_入门04_灯光 SceneKit_入门05_照相机 SceneKit...SceneKit_中级05_力的使用 SceneKit_中级06_场景的切换 SceneKit_中级07_动态修改属性 SceneKit_中级08_阴影详解 SceneKit_中级09_碰撞检测...SceneKit_高级01_GLSL SceneKit_高级02_粒子系统深入研究 SceneKit_高级03_自定义力 SceneKit_高级04_自定义场景过渡效果 SceneKit_高级05 检测手势点击到节点...SceneKit_大神02_弹幕来袭 SceneKit_大神03_navigationbar上的3D文字 让学习成为一种习惯 学习目标 1.了解SceneKit 游戏框架中系统包含的几何对象. 2.学习如何将几何形状物体绑定的节点上...*pyramidNode = [SCNNode nodeWithGeometry:pyramid]; pyramidNode.position = SCNVector3Make(0, 0, 0); [

69220

碰撞以及如何检测碰撞详解

本节的学习目标 如何设置两个物理之间碰撞,有如何让两个物体不能进行碰撞 怎么能检测到两个物体进行了接触(注意是接触不是碰撞) ---- 解析 让学习成为一种习惯 首先确定一个问题: 是要用A去碰撞B...ANode.physicsBody.categoryBitMask = 0b001; BNode.physicsBody.collisionBitMask = 0b110; 提示: 注意千万不要将两者的顺序搞混了,有点绕 第二个学习目标-如何实现接触检测...注意一个词语'接触检测'不是碰撞检测哦!...categoryBitMask = 0b10; Scenekit_15.gif 如何设置接触检测呢? 设置正方体的允许那些物理身体接触自己发生代理事件 boxNode.physicsBody!....categoryBitMask=0x01; 命令行输出如下 '<SCNNode: 0x6080003c1a40 pos(0.000000 5.000000 -20.000000) | geometry

1.1K10
领券