当前位置: 首页 > 面试题库 >

ARKit将物体隐藏在墙后

诸龙野
2023-03-14
问题内容

如何使用ARKit跟踪的水平和垂直平面将对象隐藏在墙后面/真实对象后面?当前,当您离开房间和/或在应该位于其后的对象之前时,可以通过墙壁看到添加了3D的对象。因此,是否有可能使用ARKit给我的数据提供更自然的AR体验,而不会使物体穿过墙出现?


问题答案:

您在这里有两个问题。

(而且您甚至都没有使用正则表达式!)

如何为ARKit / SceneKit创建遮挡几何?

如果将SceneKit材质的colorBufferWriteMask值设置为空值([]在Swift中),则使用该材质的任何对象都不会出现在视图中,但是它们在渲染期间仍会写入z缓冲区,这会影响其他对象的渲染。实际上,您将获得一个形状类似于您的对象的“孔”,通过该孔可以显示背景(对于,ARSCNView则为照相机馈送),但仍然可以遮盖其他SceneKit对象。

您还需要确保被遮挡的渲染在它应该遮盖的任何其他节点之前进行。您可以使用节点层次结构进行此操作(我不记得是父节点是先于子节点还是以其他方式进行渲染,但是测试起来很容易)。在层次结构中作为对等节点的节点没有确定的顺序,但是无论该renderingOrder属性的层次结构如何,您都可以强制执行该顺序。该属性默认为零,因此将其设置为-1将先于所有内容呈现。(或为了更好地控制,将renderingOrder多个节点的s
设置为一系列值。)

如何检测墙壁/等,以便您知道将遮挡几何体放置在哪里?

在iOS 11.3和更高版本(也称为“ ARKit
1.5”)中,您可以打开vertical平面检测。(请注意,当您从那里获得vertical平面锚点时,它们会自动旋转。因此,如果将模型附加到锚点上,它们的本地“向上”方向将垂直于该平面。)iOS
11.3中的新增功能是,您可以不管其方向如何,每个检测到的平面的更详细的形状估计(请参阅ARSCNPlaneGeometry)。

但是,即使您具有水平和垂直方向,平面的外部界限也只是随时间变化的估计值。也就是说,ARKit可以快速检测出墙的一部分在哪里,但是如果用户不花一些时间挥动设备来绘制空间,它就不会知道墙的边缘在哪里。即使这样,映射的边缘也可能无法与真实墙的边缘精确对齐。

因此…如果您使用检测到的垂直平面来遮挡虚拟几何体,则可能会发现应该隐藏的虚拟对象通过透明的边缘隐藏的地方,或者通过某些地方可见的地方ARKit尚未绘制整个真实墙的位置。(您可以通过假设范围比ARKit大得多来解决后一个问题。)



 类似资料:
  • 我试图在某一元素条件下隐藏几个聚合物元素。我知道有几种可能性。在我的opinon中,最简单的方法是引入一个新的CSS类 并将其添加到聚合物元素的类列表中 但这对元素没有影响。元素仍然可见。对elment检查器的查看显示,添加了该类: 其中parent-elem是父元素的名称。 谁能解释一下为什么元素不会被隐藏? 谢谢。 问候你,梅森曼

  • WooCommerce可以用来展示产品,只要开启目录模式(Catalog Mode),即将与购买相关的内容去掉。本文介绍如何去掉价格和购买按钮。 2021年10月更新,请看这篇最新的文章WooCommerce目录模式Catalog Mode(2021). 去掉价格字段 把代码放在主题的functions.php下 //Hide price add_filter( 'woocommerce_get_

  • 问题内容: 在jar文件中隐藏某些类真的是不可能的吗? 我不想允许类的直接实例化以使其更加 灵活。该罐子只有工厂(或外墙)可见。 除了创建两个项目之外,还有什么其他方法可以解决此问题? (两个项目:第一个项目包含类(实现), 另一个项目引用第一个项目并包含工厂;稍后仅 引用第二个项目) 问题答案: 我认为如果您的公共工厂方法尝试返回“隐藏”的东西,您将遇到编译器故障或警告。 不,您不能在不重新实现

  • 我们想隐藏“有优惠券吗?添加一张…”在WooCommerce结账时,如果已添加优惠券或客户在结账页面上添加优惠券。 目前,我们在下面有此代码,当客户在购物车页面输入优惠券,然后导航到结帐页面时,此代码有效。在这种情况下,“拥有优惠券?添加一张…”消息不可见。如果购物车页面上未添加优惠券,则消息可见。 这很好用!但是,当客户在结账页面上添加优惠券时,它不起作用。 1.)我们收到消息“优惠券已添加”,

  • 问题:如果距离为空/null,我试图隐藏一个值。 我尝试了以下操作,但该值仍在显示: 和 什么是实现我所期待的正确方法。 以下是我在coldfusion中定义距离的方式: 当我做以下建议时: ng-show="e.distance===未定义" 当我执行其他建议时,例如ng hide=“e.distance”, 以下是提供商包含的内容:

  • 我在JavaFX中有一个这样的表: @FXML私有表视图表EF; 例如,当我按下一个按钮或更改ComboBox中的值时,如何将它从GUI中完全隐藏起来,当我按下另一个按钮或再次更改ComboBox中的值后,如何使它再次可见? 编辑: Edit2:问题“JavaFX - setVisible不会”隐藏“元素”不是一个解决方案,因为对他来说,setInvisible是有效的,因为它使vBox不可见,只