展开

关键词

ARKit示例 - 第3部分:添加几何和物理乐趣

在上一篇文章中,我们使用ARKit来检测现实世界中水平平面,然后将这些平面可视化。在本文中,我们现在将开始为我们AR体验添加虚拟内容,并开始与检测到平面进行交互。 *)recognizer { // Take the screen space tap coordinates and pass them to the // hitTest method on 然后我们还给每个ARKit检测到物理体平面,以便立方体可以与平面交互(有关更多确切细节,请参阅github 仓库中Plane.m类)。 take effect [self.sceneView.session runWithConfiguration:configuration]; 下一个 在下一篇文章中,我们将向后退一小步,看看我们编写一些代码是否有用 我们还将使用光照和纹理来使插入几何图形看起来更逼真。

40310

ARKit 初探

ARKit主要负责AR计算,它将ARCamera捕获视频帧当作背景,使用视觉惯性测距(VIO)来精确跟踪周围世界,进行坐标转换,场景搭建及平面的捕获;然后,通过 SceneKit(3D)/SpritKit 追踪我们手动添加希望追踪点,例如我们手动添加一个虚拟物体 ARKit 使用视觉惯性测距技术,对摄像头采集到图像序列进行计算机视觉分析,并且与设备运动传感器信息相结合。 每个虚拟物体都可以 SCNNode 来代表,SCNNode 在 SCNScene 中展现,而无数SCNScene 组成 3D 世界。 它有几个重要方法需要特别强调一下: hitTest 方法 - (NSArray<ARHitTestResult *> *)hitTest:(CGPoint)point types:(ARHitTestResultType 当需要放置任意门时,就用+transDimenRoomAtPosition:方法创建一个transDimenRoom,当用户走进去时, -hideWalls: 隐藏四周墙壁,切换成全景背景。

54620
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

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

    苹果增强现实框架:ARKit

    与UIKit中hitTest不同,ARKitHitTest以设备方向配合视图坐标,建立一条世界中射线,所有在射 线上ARAnchor, 会以由近到远方式返回。 设计骨骼动画是,要求设计师把动画放在根节点上,不要分散地放在每个bone上,这样可以方便地读取出动画到CAAnimation。 ARKit如何做marker? 答:ARKit不会提供这样能力,如果想实现,可以 ARKit 提供特征点来跑自己计算机视觉。 答:可以在识别的物体位置上,添加一个node, 这样就能在之后处理中一直保持这个物体追踪。 可以使用旋转矩阵、欧拉角、四元数来定义空间旋转,ARKit这三种方式均有运用。 旋转矩阵 这个好理解,使用旋转变换矩阵即可,维度4*4,定义一次旋转需要16个数。

    1.3K00

    ARKit介绍

    您甚至可以使用Metal,SceneKit和Unity和虚幻引擎等第三方工具渲染3D对象。ARKit以卓越性能完成所有这一切,并且有很好文档记录。 需要一些想法才能使用ARKit? ,所以我决定使用ARKit创建自己测量应用程序。 我开始观看介绍ARKit:来自WWDC17iOS增强现实视频。然后我阅读文档并使用演示应用程序(在增强现实中放置对象)。 image.png 3D中欧几里德距离公式 我结束节点位置(两个3D矢量)减去起始节点位置,得到一个新矢量,然后我应用了公式|a| = sqrt((ax * ax) + (ay * ay) + ( 垂直平面检测不是一个特征(但是),但可以一行代码激活水平平面检测configuration.planeDetection = .horizontal然后ARKit将自动添加,更改或删除当前会话中平面锚点 我已经知道如何将节点放置在摄像机所在位置,但我如何获得距离最近平面的距离。答案是:hitTest(_:types:)。

    30220

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

    随着历史发展,让我们代码弄脏手,看看苹果增强现实吧! ARKit沉浸性 ARKit提供了两个主要功能;第一个是三维空间中相机位置,第二个是水平平面检测。 首先,我们应该确定使用哪种引擎。ARKit可以与Sprite SceneKit或Metal配合使用。在Apple ARKit例子中,我们使用是iOS SceneKit,由Apple提供3D引擎。 检测平面 ARKit可以探测到新平面,更新现有的平面,或者移除它们。 为了方便地处理平面,我们将创建一个虚拟场景节点,该节点包含平面位置信息和对焦点正方形引用。 平面是在X和Z方向上定义,Y是表面的法线。如果我们想让它看起来就像在平面上打印一样,我们应该始终保持我们绘图节点位置在相同Y值上。 平面探测是通过ARKit提供回调函数完成。 我们使用它来添加我们自己平面节点,它也是不可见,但是它包含关于anchor中平面方向和位置。 那么位置和方向如何保存在ARPlaneAnchor中?位置、方向和规模都被编码在一个4x4矩阵中。

    68210

    ARKit 进阶:物理世界

    写在前面 ARKit渲染能力是由其他框架实现,除了苹果SceneKit, Unity3D、UE, 或者其他自定义OpenGL、Metal渲染引擎都可以与ARKit相结合。 Demo 视频内容 视频内容 关于物理模拟 虽然物理引擎都具有真实物理变量,如质量、重力、摩擦力等,但当我们说道物理模拟,不是要真的去真实世界数值去模拟物理行为,事实上那样反而会失真。 这种情况看我回答,重点是当attach body之前如果没有指定形状,那么SceneKit才会使用scale信息,使用SCNPhysicsShapeScaleKey也有一样效果。 scene test SceneKit与ARKit中共有以下几种scene test,用以观察世界中物体关系,作用类似UIKit hitTest: 方法。 types:(ARHitTestResultType)types; 根据ARSCNView中点,构造一条3D世界射线,搜索ARAnchor或真实物体(特征点或检测出平面)。

    1K70

    将模型添加到场景中 - 在您环境中显示3D内容

    {} 与飞船场景类似,我们将使用我们指定名称调用场景。然后,检索该场景SketchUp节点。我们递归设置为false以返回具有该名称直接子节点。 然后,让我们一个小消息将它添加到场景中。 = hitTest.first?. 我们正在使用第一个返回满足条件第一个元素方法。如果节点从视角可见,它将返回true或false 。 在下一课中,我们将使用虚拟对象本身。敬请关注。 原文: https://designcode.io/arkit-adding-models

    43420

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

    在下面的教程中,我将向您展示如何使用Swift和ARKit制作有趣Domino游戏。 这就是我们要做: ? ARPlaneAnchor为我们提供了检测到曲面的中心和范围(宽度和高度)值。我们使用范围值来创建平面几何体并使用中心值来定位节点。 我们将平面不透明度设置为30%,因此它不会完全遮挡地板。 由于SCNPlanes在首次创建时是垂直,因此我们必须将平面旋转90度。创建平面后,将其添加到锚点附加节点。 每个锚都有唯一标识符。我们使用其唯一标识符作为关键字将平面节点添加到字典中。 我们使用简单SCNBox创建我们多米诺骨牌。为其添加绿色,创建一个放置在其中节点,并使用我们通过命中测试检测到坐标来定位它。 我们在节点Y位置添加一个“0.03”值来向上移动我们多米诺骨牌,否则一半多米诺骨牌会在地板内! 我们将多米诺骨牌节点添加到我们多米诺骨牌阵列中供以后使用。 现在运行应用程序。

    67830

    iOS ARKit教程:裸露手指在空中画画

    使用Apple ARKit将焦点正方形投影在桌子上 下一步是启动ARKit会话。每次出现视图时重新启动会话都是有意义,因为如果我们不再跟踪用户,我们就可以不使用以前会话信息。 在ARKit中检测平面 ARKit可以检测新平面,更新现有平面或删除它们。为了以方便方式处理平面,我们将创建一个虚拟SceneKit节点,该节点保存平面位置信息和对焦点方块引用。 平面在X和Z方向上定义,其中Y是表面的法线,即,如果我们想让它看起来好像在平面上打印,我们应该始终将我们绘图节点位置保持在平面的相同Y值内。 。 平面检测通过ARKit提供回调函数完成。 我们使用它来添加我们自己平面节点,该节点也是不可见,但保存有关平面方向和位置信息anchor。 那么如何保存位置和方向 ARPlaneAnchor?位置,方向和比例均以4x4矩阵编码。 下面的代码演示了这一点: sceneView.hitTest通过将此2D点投影到最近平面下方,搜索与屏幕视图中2D点对应真实平面。

    52330

    深入浅出 ARCore

    ARCore历史以及与苹果ARKit竞争我就不多讲了,在网上可以搜到一堆信息。但网上深入讲解ARCore的确实不多。 它是创建锚点(调用createAnchor方法)时,或者进行命中检测(调用hitTest方法)时,返回结果。 PointCloud ? 代码如下: MotionEvent tap = mQueuedSingleTaps.poll(); if (tap ! 另一方面,ARCore目前只有几款机型可能做测试,而这几款机型在国内的人不多,所以对于大多数人来说没法做实验,这也增加了学习难度。 通过以上三点,可以说目前学习ARCore门槛相较于苹果ARKit要难不少。

    1.3K10

    ElasticSearch5.0之后改变

    fielddata_fields已被使用参docvalue_fields来代替查询: filtered 使用bool查询,也支持filter子句。 and must在bool查询中 使用子句。 or should在bool查询中 使用子句。 删除对min_similarity参数支持fuzzy query,有利于fuzziness。 删除对filter和查询中no_match_filter字段支持indices,有利于query和no_match_query。 删除对minimum_should_match和 disable_coord在terms查询中支持,bool而不是使用查询。还删除了对execution参数支持。

    35120

    IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】

    就不会调用自己pointInside了,直接返回nil,然后系统就回去遍历兄弟节点。 来自STKit,这个category目的就是方便编写hitTest方法,由于hitTest方法是override,而不是delegate,所以使用默认实现方式就比较麻烦。 *这个方法就是hitTest:withEvent一个代替。 4.2.2使用示例 接下来我们说正事了,假定我们现在有一个View是hitTestView,命名为STImageView,现在我们想让这个image处理一些事情,比如所有的图片点下之后加一个灰色效果 关于灰色实现,我们暂定一个View贴在ImageView上named maskView,然后用hidden来控制是否显示(上一篇文章有说过,所有hiddenView默认不接受任何事件)。

    8110

    RxJS 5 到 6迁移指导

    确保所有操作符间.被移除,转而使用,连接。 记住!!!有些操作符名称变了!!! 其他RxJs6 Observable.if and Observable.throw Observable.if已被iif()取代,Observable.throw已被throwError()取代 您可使用rxjs-tslint将这些废弃成员方法修改为函数调用。 THROWERROR() // deprecated Observable.throw(new Error()); //use instead throwError(new Error()); 方法 根据迁移指南,以下方法已被或重构: merge import { merge } from 'rxjs/operators'; a$.pipe(merge(b$, c$)); // becomes

    51120

    升级到 Kubernetes v1.16 须知API问题总结

    Kubernetes v1.16 发布 Kubernetes v1.16 于 2019 年 9 月发布,大家最需要关注是部分API将。 下面列举部分 API 预告 extensions/v1beta1 从 v1.20 开始将不再提供 Ingress 资源。 export 自 v1.14 起,将在 v1.18 删除。 不推荐使用节点条件类型 OutOfDisk 已被删除。使用 DiskPressure 条件代替。 alpha.service-controller.kubernetes.io/exclude-balancer 不推荐使用云负载均衡器排除节点标签(使用 Service Type = LoadBalancer 更改 YAML 文件以引用新 API 更新自定义集成和控制器来调用新 API 更新第三方工具(ingress controllers、持续交付系统)来调用新 API 测试 可以通过配置 --runtime-config

    44040

    响铃:AR零售进入快车道,谁会成为第一批红利受益者?

    二、苹果公司等示范效应,将引起开发狂潮 事实上,苹果在AR上组建专业团队、收购相关专利和布局或有7年之久。 而自ARKit 发布之日算起,短短几个月,各种类型应用就层出不穷。 同时,ARkit将伴随着iPhone 8\X全面推向市场,全球近10亿苹果手机使用者都将成为潜在AR使用人群,这种现象级消费入口是AR零售获得成功先决条件。” 再比如丝芙兰在全球推出了多家带有AR设施门店,顾客只需要站在虚拟试妆镜 Tap and Try扫一下产品条形码即可在屏幕前看到自己上妆效果。 国内也有一颗叫“AR家居”“实境家居”导购APP,这款APP通过AR技术和移动端硬件结合,户可以让随时进入家居仓库,选择心仪家居(桌子、沙发、窗帘、椅子等)放入自己家中任意摆放,并能精确测量家居实际尺寸 3、汽车行业  根据媒体曝光资料看,之前就有开发人员使用iOS 11中开发者预览版ARKit工具制作了一个汽车AR体验。

    18530

    第134天:移动web开发一些总结(二)

    事件基础 touch触摸事件 下拉加载 300ms: 移动web页面上click事件响应都要慢上300ms 300ms判断是单击还是双击 (1) tap基础事件 300ms延迟怎么破? tap事件代替click事件。 (原因与300ms有关) tap透传解决方案: ①使用缓存动画,过渡300ms延迟 ②中间层dom元素加入,让中间层接收这个“穿透”事件,稍后隐藏 ③“上下”都使用tap事件,原理上解决tap穿透事件 所以建议直接js计算。 :hidden;/* 防止闪白 */ 6)更多图片优化,保留3个要使用节点,当前,上一个,下一个图片节点,剩余不需要删除 7)jQuery Mobile(JQM jQMobile) 是jQuery

    37610

    Electron 9.0.0发布!带来三项重大改进,不再支持Electron 6

    #21546 这是我们计划 remote 模块并将其移至用户区第一步。 #21560 此行为在 Electron 8.0 中。 #23208 API 新版或移除了以下 API: shell.openItem API 现已,并用异步 shell.openPath API 代替。 .getWebContents(在 Electron 8.0 中)现已移除。 webFrame.setLayoutZoomLevelLimits(在 Electron 8.0 中)现已移除。

    48710

    k8s 1.22发布:迈向新巅峰

    新版本包含53项增强功能:其中13项功能升级至稳定版,24项功能顺利步入beta阶段,16项功能刚刚开始alpha阶段。另有3项功能被彻底。 随着Kubernetes 1.22版本发布,新alpha功能可支持运行具有交换内存节点。这项变更使得管理员能够选择在Linux节点上配置交换,并将一部分块存储视为额外虚拟内存。 删除了几个beta API 1.22版本中删除了许多已经beta API,并发布这些APIGA通用版本。全部现有对象均可通过稳定API进行交互。 关于完整清单,请参阅API迁移指南[4]以及博文《1.22版本中Kubernetes API与功能删除:你需要了解一切[5]》。 更新至稳定版 限定服务账户令牌数量 CSI服务账户令牌 Windows对CSI插件支持 对于在操作中使用API警告机制 清退PodDisruptionBudget 重要功能更新 引入新PodSecurity

    39440

    扫码关注云+社区

    领取腾讯云代金券