Spark AR:如何实现物体在目标追踪器下方隐藏的效果?
Spark AR实现物体低于追踪器时隐藏的方法
核心思路是通过比较物体与追踪器的Y轴位置,动态控制物体的可见性或透明度,以下是两种实现方式:
可视化Patch Editor实现(无需代码)
- 提取位置信息:在Patch Editor中,分别拖入你的3D物体和目标追踪器节点,获取它们的
World Position输出,用Split Vector3节点拆分出Y轴分量。 - 位置比较:添加
Compare节点,将物体的Y值与追踪器的Y值做对比,设置条件为物体Y值 ≤ 追踪器Y值。 - 控制可见性:将
Compare节点的布尔输出连接到3D物体的Visible输入端口。如果需要平滑过渡效果,可改用Lerp节点配合物体材质的Opacity属性,设置一个过渡范围(比如低于追踪器0.5米内逐渐透明)。
JavaScript代码实现(适合进阶用户)
先获取场景中的物体和追踪器,再通过响应式信号控制可见性:
const Scene = require('Scene'); const Reactive = require('Reactive'); // 替换为你的物体和追踪器名称 const targetObject = Scene.root.find('yourBuilding'); const groundTracker = Scene.root.find('yourGroundTracker'); // 获取两者的世界空间Y坐标 const objY = targetObject.worldTransform.position.y; const trackerY = groundTracker.worldTransform.position.y; // 当物体Y坐标低于追踪器时隐藏 const isVisible = objY.greaterThan(trackerY); targetObject.visibility = isVisible;
如果需要渐变消失效果,可替换最后两行代码,通过透明度过渡实现:
// 计算物体与追踪器的Y轴差值,设置0到0.5米的过渡范围 const deltaY = trackerY.sub(objY); const opacity = Reactive.lerp(deltaY, 0, 0.5, 1, 0); targetObject.material.opacity = opacity;
注意事项
- 优先使用世界空间位置(World Position)进行比较,避免因父级坐标系不同导致位置判断错误。
- 确认追踪器的Y轴方向为垂直向上(Spark AR默认世界空间Y轴向上,平面追踪器符合此设定)。
内容的提问来源于stack exchange,提问作者William Ericson
相关产品推荐
相关产品推荐

