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

在ARkit中,如何创建与网格相同的物理体?现在我已经创建了边界框

在ARKit中,要创建与网格相同的物理体,可以按照以下步骤进行操作:

  1. 首先,确保你已经创建了一个ARSCNView实例,并设置其session的delegate为当前的视图控制器。
  2. 在视图控制器中,实现ARSessionDelegate协议的session(_:didUpdate:)方法,该方法会在每一帧更新时被调用。
  3. session(_:didUpdate:)方法中,获取当前帧的ARFrame对象,并从中获取到相机的位置和方向。
  4. 使用ARFrame的hitTest(_:types:)方法,传入屏幕中心的CGPoint以及需要检测的物理体类型(例如平面、特征点等),获取到与屏幕中心相交的ARHitTestResult对象。
  5. 从ARHitTestResult对象中获取到相交点的位置和法线方向。
  6. 创建一个SCNBox或其他几何体的SCNGeometry对象,并设置其位置为相交点的位置。
  7. 创建一个SCNPhysicsBody对象,并将其应用到几何体上,以使其具有物理特性。
  8. 将几何体添加到场景中的一个SCNNode节点上,并将该节点添加到ARSCNView的scene中。

下面是一个示例代码:

代码语言:swift
复制
func session(_ session: ARSession, didUpdate frame: ARFrame) {
    guard let hitTestResult = frame.hitTest(view.center, types: [.existingPlaneUsingExtent]).first else {
        return
    }
    
    let position = hitTestResult.worldTransform.columns.3
    let normal = hitTestResult.worldTransform.columns.2
    
    let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
    let boxNode = SCNNode(geometry: box)
    boxNode.position = SCNVector3(position.x, position.y, position.z)
    
    let physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)
    boxNode.physicsBody = physicsBody
    
    sceneView.scene.rootNode.addChildNode(boxNode)
}

这段代码会在每一帧更新时,通过屏幕中心的点进行射线检测,获取到与平面相交的结果,并在相交点处创建一个0.1x0.1x0.1大小的立方体,并将其添加到场景中。

注意:在使用ARKit创建物理体时,需要确保已经设置了场景的物理特性,例如设置了场景的physicsWorld属性和sceneView.scene.physicsWorld.contactDelegate。此外,还需要在info.plist文件中添加相机权限的描述,以便应用程序能够访问相机。

关于ARKit的更多信息和示例代码,你可以参考腾讯云的ARKit开发文档:ARKit开发文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SceneKit 场景编辑器-为您AR体验构建3D舞台

对于我们来说,我们宁愿要使用方向X,Y和Z轴。 Euler Angles 缩放 Scale允许我们调整模型大小。 边界 边界是您资产尺寸,以米为单位。...发射前地球 自定义模型 现在我们已经了解了场景编辑器方法,我们如何使自己成为自定义模型?为了与我们概念保持一致,我们将从Apple中选择一种设备。...胶囊颜色 对于胶囊颜色,请执行圆柱体相同步骤。 胶囊体位置 对于“ 位置”,将z设置为0以使其居中,将x设置为1.4。至于y,将绿色箭头向上和向下拖动到约-0.7。...双击该节点图标以调整视图。正如你所看到,一旦调整了盒子大小,它所有孩子都一样。 预览观看场景 我们如何才能真实地看到手表应用外观?运行应用程序,您可以按cmd+ R了。...编辑是设计师最好朋友。但是,它非常适合修改场景属性,但不能用于创建3D内容。其他3D建模程序是设计杰作地方。在下一节,我们将导入已经制作模型。

5.5K20

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

现在我们已经完成了正确运行ARKit项目的所有基本设置,我们希望我们设备能够坐在水平表面上。这是飞机检测。本节,我们将学习如何激活平面检测。我们将熟悉锚点以及如何使用它们将对象放置锚点上。...为了更多地了解Swift委派,邀请您访问或查看本书第4章委托部分。 扩展课程 为了保持井井有条,让我们创建一个新文件来托管ARSCNViewDelegate相关所有代码。...如何将度数转换为弧度?我们应该回顾一下我们高中数学。为了找到弧度等价物,这里是等式。 根据图表,你会得到90度是pi一半。函数createPlane,我们将在x轴上旋转网格以使其成为水平。...因此,我们能够检测到表面时将其可视化,示例是地板。但我们知道地板比那更大。不幸是,当我四处走动时,网格并没有变大。 ?...例如,您可以将物理应用于水平表面以使虚拟对象掉落,在其上驾驶汽车或在场景上为角色设置动画。 与此同时,希望您能够在场景编辑器中学到概念代码受到教育。

2.9K30

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

ARKit - 检测到平面并映射到楼层 我们第一个hello world ARKit应用程序,我们设置了我们项目并渲染了一个虚拟3D立方,可以现实世界渲染并在您移动时进行跟踪。...渲染飞机 通过上述信息,我们现在可以虚拟世界绘制SceneKit 3D平面。为此,我们创建一个继承自SCNNode Plane类。...,还在SCNPlane几何上设置了网格材质,以使可视化看起来更好,为简洁起见,在此省略了该代码。...SCNPlane几何添加了Tron样式网格纹理,在这里省略了它,但你可以查看源代码。...image.png 下面是上面相同场景,但几秒钟后,ARKit将所有上述平面合并到一个平面上。

2.9K20

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

在下面的教程将向您展示如何使用Swift和ARKit制作有趣Domino游戏。 这就是我们要做: ?...4.png 现在,多米诺骨牌被放置一个漂亮而均匀距离。 多米诺取向 由于多米诺骨牌首次创建时没有给出旋转值,因此它们都面向相同方向。...要在SceneKit创建一个物理,我们必须给它一个type和一个shape。 有三种不同类型物理实体: 静态:不受力或碰撞影响且不能移动物理。 动态:可受力和碰撞影响物理。...运动学:一种物理,不受力或碰撞影响,但在移动时会导致碰撞影响其他物体。 我们例子,我们需要为地板使用静态主体,为多米诺骨牌使用动态主体。 物理形状决定了SceneKit如何处理碰撞。...这是一个非常长教程,但我希望它能帮助您了解创建交互式ARKit应用程序所需过程,更重要是,希望您能够创建它。 如果您有任何问题或建议,请在下面的评论写下。

2.3K30

ARKit介绍

AR - 使用相机创建虚拟对象放置物理世界错觉。 我们知道增强现实并不是新,但由于Apple新框架,AR现在正受到很多关注。...Pokemon Go是第一个也许是最着名应用程序之一,它向我们展示了应用程序AR强大功能。实现Pokemon Go具有相同交互性应用程序并不容易,这就是为什么认为ARKit会有所作为。...在那之后,了解了可以使用什么以及如何工作。从演示了解到场景单元映射到ARKit米,所以这是一个很好提示。...两个节点之间距离 想要一个基本应用程序,只需点击屏幕选择点并计算最后一个点击前一个点距离。所以,使用Swift和SceneKit创建了一个新项目: ? 创建项目步骤1 创建项目步骤1 ?...已经知道如何将节点放置摄像机所在位置,但我如何获得距离最近平面的距离。答案是:hitTest(_:types:)。

2.3K20

ARKit 简介-使用设备相机将虚拟对象添加到现实世界 看视频

到目前为止,你一定听说过关于增强现实这个相当新概念。这项技术并不新鲜,您已经电影中看到它或在电子游戏中体验过它。意思是,如果不是免费的话,一般人群现在可以以最低成本轻松获得它。...尽管ARKit仅在2017年于2017年发布,但它很快受到欢迎,其可能性无穷无尽。一些人声称这是“下一次大转变”或“改变游戏规则”。 本课程,您将了解到ARKit,您将学习如何制作自己游乐场。...增强现实 增强现实定义了通过设备摄像头将虚拟元素(无论是2D还是3D)集成到现实世界环境用户体验。它允许用户自己周围环境交互数字对象或角色,以创建独特体验。 什么是ARKit?...喜欢分段,所以我要选择那个类别。认为灰色在这里看起来不错。我们来试试吧。现在我们正在检测地板。一旦完成,沙发就会弹出屏幕。现在要做就是将它正确放置房间里,看看它是否合适。...至于我,它在桌面上。单击“ 创建”。恭喜!你创建了第一个AR应用! 接口 这是您刚刚创建新项目后第一个屏幕。左侧第一个面板是Project Navigator,其中显示了项目的所有文件。

3.6K30

使用单一卷积网实时进行端到端3D检测,跟踪和运动预测

2、相关工作 二维目标检测:在过去几年里,许多利用卷积神经网络来产生精确二维目标检测方法,通常是从单个图像已经发展出来。这些方法通常分为两类,这取决于它们是否利用了创建对象建议第一步。...我们称我们方法为快速和愤怒(FaF),因为它能够30毫秒内创建非常精确估计。 在下面,我们首先在3.1节描述我们数据参数化,包括素化和我们如何整合时间信息。...注意,如果我们网格分辨率很高,我们方法相当于每个点上应用卷积而不丢失任何信息。我们让读者参考图2,了解如何从三维点云数据构造三维张量。 ?...现在每个帧都表示为一个三维张量,我们可以沿着一个新时间维度附加多个帧来创建一个4D张量。这不仅提供了更多三维点作为一个整体,而且还提供了有关车辆航向和速度线索,使我们能够做运动预测。...我们为所有模型保持相同素化,并且针对具有至少三个3D点地面实况车辆边界评估检测。少于三点车辆被认为是不关心区域。如果对任何大于0.7地面实况车辆边界具有IoU,我们认为检测是正确

96720

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

在上一篇文章,我们使用ARKit来检测现实世界水平平面,然后将这些平面可视化。本文中,我们现在将开始为我们AR体验添加虚拟内容,并开始检测到平面进行交互。...这是一个显示应用程序运行视频,您可以看到我们首先如何捕获水平平面,然后我们添加一些3D立方场景交互,然后最终导致一些小型爆炸使立方跳转: youtube 往常一样,您可以按照以下代码进行操作:...现在我们有平面检测,我们想要添加这些平面交互内容。这将使应用程序看起来像桌子,椅子,地板等顶部有物体。...然后我们还给每个ARKit检测到物理平面,以便立方可以平面交互(有关更多确切细节,请参阅github 仓库Plane.m类)。...停止飞机检测 一旦我们绘制了世界并拥有多个平面,我们就不希望ARKit继续为我们提供新平面并可能更新现有的平面,因为这可能会影响我们已经添加到世界几何

96110

用Wolfram语言建立基于格子玻尔兹曼风洞

由于物体本身无法管道内移动,因此通常采用高速风扇提供可控气流,而将物体放置气流路径,从而产生物体静止空气中移动相同效果。这种实验对于理解物体空气动力学非常有用。 风洞有不同类型。...读者有兴趣的话,可以去网上找到很多人们使用LBM方法进行模拟精彩范例。 我们已经了解了LBM基本机制,下一个显而易见问题是:基于格子系统执行模拟如何转换到物理世界来?...向风洞添加物体 现在我们来讨论下如何将物体放到风洞。一种方法是将原始物体离散化成锯齿状,并将其网格对齐,然后每个步长边和角上施加无滑动边界条件: 这种方法并不理想,因为它扭曲了原始物体。...此模拟将花费几分钟: 可视化流线: 高箱场景顶壁附近形成了一个主旋涡,而该旋涡又在其下方创建了另一个旋涡。如果第二个涡旋强度足够大,它将在箱底角产生涡旋。...我们已经看到风洞为我们提供灵活性。现在让我们风洞中放置一个物体并观察气流行为。对于此示例,使用圆形物体: 这与通道流体相同(我们第一个示例),但物体是放置通道

1.2K20

ARKit by Example - 第1部分:AR立方

这篇第一篇文章将使用ARKit创建一个非常简单hello world AR应用程序。最后,我们将能够增强世界定位3D立方,并使用我们iOS设备移动它。...image.png 示例项目中上述示例实际上比我们要创建更高级,但这里重点是学习如何从头开始编写这些项目,以便打开项目,并从viewDidLoad方法删除所有代码(除了超级电话)。...如果您现在运行该示例,您应该会看到一个漂浮在空间中小型立方,当您四处移动时,它可以保持它位置,您应该能够一直走动,向下看,它上面。...我们想要做一个快速调整是3D场景添加一些默认光照,这样我们就可以看到立方两侧,我们可以稍后添加一些更高级光照但是现在我们可以SCNScene实例上设置autoenablesDefaultLighting...: self.sceneView.autoenablesDefaultLighting = YES; 下一篇文章 在下一篇文章,我们将开始使我们应用程序更有趣,添加一些更复杂对象,检测场景平面以及场景几何交互

1.2K30

你们还在做2D物体检测吗?谷歌已经开始玩转 3D 了

随着ARCore 、ARKit等工具出现,数亿部智能手机现在具备了AR 功能,能够 AR会话期间捕捉到额外信息,包括摄像机姿势、稀疏3D点云、估计照明和平面。...谷歌提出新方法,叫做AR 合成数据生成(AR Synthetic Data Generation),将虚拟物体放置到已有 AR 会话数据场景,可以利用摄像机姿势、检测到平面以及估计照明情况来生成物理世界可能存在以及照明条件能够场景匹配位置...形状预测依赖数据标注质量,如果数据没有形状标注,那么此选项可以不选。 对于检测任务,使用标注好边界,并用高斯拟合。其中,中心中间,标准差大小成正比。...为了获得边界最终3D坐标,谷歌利用了一种完善姿势估计算法(EPnP),这个算法能够无需了解目标大小情况下,恢复目标的3D 边界,只要有了3D边界,就可以轻松计算目标的姿势和大小。...4 MediaPipe上检测和跟踪 让模型实际应用时,由于针对是移动设备捕获每一帧,而这些帧3D边界可能是模糊,所以模型可能会被干扰。

98620

ARKit和CoreLocation:第三部分

第一部分,我们介绍了ARKit基础知识并放置了对象,第二部分,我们想出了如何计算我们需要进行旅行坐标以及如何将这些位置从二维图转换为三维图真实世界。 现在是时候应用我们学到东西了。...已经创建了一个演示项目,其中包含了我们之前已经进入实际应用所有内容。如果您尝试运行它,请务必更改目标位置。否则,如果你太遥远,它可能会崩溃(我们稍后会修复它。)这只是粗略功能。...你必须在Pokemon某个半径范围内才能搞定它。这导致了一个有趣效果。你可以坐在某个地方玩耍,然后翘曲到几个街区外地方,并且能够位置口袋妖怪交战,然后再扭曲到原来位置。...定位服务 现在我们已经让我们代理平手了,让我们转移到LocationService!...包起来 这应该包括现在位置监控。在下一篇文章,我们将设置MapKit来帮助我们进行导航。

1K20

ARKit和CoreLocation:第一部分

演示代码 ARKit和CoreLocation:第一部分 ARKit和CoreLocation:第二部分 ARKit和CoreLocation:第三部分 背景 自从写了一篇新博客帖子以来,已经有一段时间了...ARKit结合了设备运动跟踪,摄像机场景捕捉,高级场景处理和显示便利性,简化了构建AR体验任务。 iOS 11,Apple已经ARKit强大功能释放到了iOS开发社区。...定义 视觉惯性测距(VIO):ARKit分析手机摄像头和运动数据,以便跟踪周围世界。计算机视觉记录了环境显着特征,无论iPhone移动如何,都能够保持对现实世界位置了解。...ARSession:ARKit,ARSession协调创建增强现实体验所需逻辑和数据。这包括摄像机和运动数据以及周围移动时跟踪世界所需计算。...image.png 我们可以一个非常简单矩阵中表达相同向量(1,0): !

2.2K20

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

ARKit教程插图:iOS ARKit应用程序虚拟对象交互 在这篇文章,我们将使用iOS ARKit创建一个有趣ARKit示例项目。用户将手指放在桌子上,好像他们握笔,点击缩略图并开始绘图。...在下一节,我们将解释如何检测平面,以及如何相应地定位焦点平方。 ARKit检测平面 ARKit可以检测新平面,更新现有平面或删除它们。...以下代码显示了PointNode表示点类: 您将在上面的代码中注意到我们将几何沿y轴平移了一半高度。这样做原因是为了确保对象底部始终位于y = 0,以便它出现在平面上方。...接下来,SceneKit渲染器回调函数,我们将使用相同PointNode类绘制一些像笔尖点一样指示器。...ARKit和未来 在这篇文章,我们已经演示了AR如何通过用户手指和现实生活表交互来沉浸其中。

2.2K30

【visionOS】从零开始创建第一个visionOS程序

visionOS,您可以同一个场景包含2D和3D视图,并且可以将这些视图呈现在窗口中或作为人周围环境一部分。...当一个人手指屏幕上项目占据相同空间时,系统就会报告一个交互。额外手指和手部动作定义手势类型。 这张照片显示了一个人桌子上物理键盘上打字。一个虚拟建议条显示物理键盘上方。...人们可以使用连接鼠标、触控板或键盘项目交互、触发菜单命令和执行手势。 构建并运行你app页面链接 模拟器构建并运行你应用,看看它看起来如何。...下面的例子创建了一个带有一些气球静态3D模型volume,这些气球存储应用程序bundle: struct MyApp: App { var body: some Scene {...获得用户许可后,您还可以使用ARKit沉浸式空间将内容整合到他们周围环境。例如,您可以使用ARKit场景重建来获得家具和附近物体网格,并让您内容网格进行交互。

70540

ARKit示例 - 第4部分:现实主义 - 照明和PBR

柜台上虚拟立方 本文中,我们将在场景插入更逼真的虚拟内容。我们可以通过使用称为基于物理渲染(PBR)技术使用更详细模型来实现这一点,并且还可以更准确地表示场景光照。...如果我们关闭场景灯光并插入一些立方,您将看到以下结果: 真实世界表面上两个虚拟立方,在场景没有任何光照 现在我们需要为场景添加一些灯光,3D图形,可以添加各种不同类型灯光到场景: 不同照明模式示例...这个过程上面类似,将从这里省略。当我们这样做时,我们现在可以插入一块几何,让它感觉更像它实际上是场景一部分。...文章,请查看这篇文章: 惊人基于物理渲染使用新IOS 10 SceneKit 如何简单地使用新推出iOS版10基于物理渲染器,并没有得到很大期待结果...medium.com 不会在本文中尝试解释此过程所有细节...= env; UI改进 改变了UI,所以现在如果你用一根手指在平面上按住,它将改变材料,对于立方也是如此,按住以更改立方材料。

1.2K30

SwiftShot:为增强现实创建游戏

SwiftShot:为增强现实创建游戏 了解Apple如何为WWDC18构建精选演示,并获得使用ARKit,SceneKit和Swift制作自己多人游戏技巧。...概观 SwiftShot是一款针对2到6名玩家AR游戏,WWDC18主题演讲中有所体现。使用此示例代码项目您自己设备上体验它,查看它是如何工作,并构建您自己自定义版本游戏。 ?...SceneKit仅在一个设备上模拟物理,因此SwiftShot需要确保会话所有玩家看到相同物理结果,同时仍然提供逼真的平滑动画。...SwiftShot使用两种技术来解决这些问题: 会话每个对等都运行自己本地物理模拟,但同步物理结果。为了确保所有同伴游戏相关物理结果一致,游戏将开始游戏玩家指定为真相来源。...该“服务器”角色对等不断地将物理状态信息发送给所有其他对等,这些对等相应地更新其本地物理模拟。

1.7K30

前沿 | 超越像素平面:聚焦3D深度学习现在和未来

上面的其他三种表示不同,多视图表示通常只用于将 3D 数据转换为易于处理或可视化格式。 理解 现在,你已经将你三维数据转化成了易于理解形式,你需要做是真正构建一个计算机视觉处理流程来理解它。...通过这种方式,VoxNet 通过输入网格不同旋转方向上共享相同学到卷积核权值来学习这种旋转不变性。 VoxNet 代表着我们向真正三维学习迈进了一大步,但是网格仍然具有一些缺点。...首先,点云相比,它们丢失了分辨率。因为如果代表复杂结构不同点距离很近,它们会被被绑定在同一个。与此同时,稀疏环境点云相比,网格可能导致不必要高内存使用率。...首先,他们建议首先使用标准卷积神经网络二维图像上进行物体检测,提取出一个待检测物体可能从属点云区域相对应三维边界,然后点云这个「切片」上进行搜索。...其次,Qi 等人设计了一种新颖基于 PointNet 架构,它可以直接对实例进行分割(将点云分割为一个个独立物体),并一次性地整个三维边界中进行边界估计,而不是边界搜索过程执行经典滑动窗口分类工作

1.2K20

Three.JS第一个三弟(3D)案例

场景可以包含几何、光源、相机等,它们共同构成了一个完整 3D 世界。 Three.js ,场景是通过 THREE.Scene 类来表示。...网格(Mesh):网格是 Three.js 一个核心概念,它表示 3D 世界物体,由几何和材质组成。Three.js 提供了 THREE.Mesh 类来表示网格。...Three.js 提供了多种碰撞检测算法,如轴对齐边界(AABB)、球面边界(Sphere)等。...以下是一个简单 Three.js 示例,展示了如何创建一个几何、材质和网格,并将其添加到场景:// 创建几何var geometry = new THREE.BoxGeometry(1, 1,...(geometry, material);// 将网格添加到场景scene.add(mesh);在这个示例,我们创建了一个立方几何、一个基本材质和一个网格,并将其添加到场景

12820

3D检测新SOTA | PointPillarFaster RCNN结合会碰撞出怎样火花

应该强调是,由于高效优雅Pillar R-CNN架构,现在可以对涉及自动驾驶应用进行BEV感知进一步探索。 1、简介 点云3D目标检测机器人和自动驾驶3D场景理解起着至关重要作用。...通过识别每个网格点是图3投影GT旋转内部还是外部,可以从3D标注中直接生成分割层,因为3D目标BEV平面上不重叠。 此外,辅助分段监督分支仅在训练期间使用,因此没有额外推理计算开销。...采用CenterNet3D中使用金字塔规模相同区域建议损失。遵循PV-RCNN并将相同建议细化损失用于类别不可知置信预测和回归。...使用二进制交叉熵损失简单地监督辅助分割,每个网格分类标签由其相对于相应GT边界投影位置确定。...原因可以解释为具有较大网格大小R-CNN第一个完全连接层具有更多可学习参数,因此容易过度拟合训练集。这里,采用7×7网格大小,以保持其2D对应项相同设置。

1.2K20
领券