You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

8th Wall图像目标丢失后,如何让3D模型固定在初始位置不随相机移动?

解决8th Wall图像目标丢失后3D模型固定位置的问题

你的问题核心是模型仍依附于图像跟踪实体,导致目标丢失后跟着相机漂移。需要在目标丢失时将模型脱离跟踪实体,固定在场景的世界坐标中。

解决方案代码

替换你之前的组件,使用以下代码:

AFRAME.registerComponent('keep-fixed-on-lost', {
  init() {
    const el = this.el;
    let worldPos = new THREE.Vector3();
    let worldQuat = new THREE.Quaternion();

    // 检测到图像目标时,记录模型的世界空间位置与旋转
    el.sceneEl.addEventListener('xrimagefound', () => {
      el.object3D.getWorldPosition(worldPos);
      el.object3D.getWorldQuaternion(worldQuat);
    });

    // 图像目标丢失时,将模型固定到场景根节点
    el.sceneEl.addEventListener('xrimagelost', () => {
      // 将模型从跟踪实体的子节点转为场景根的子节点
      el.sceneEl.object3D.add(el.object3D);
      // 还原模型到目标丢失前的世界位置与旋转
      el.object3D.position.copy(worldPos);
      el.object3D.quaternion.copy(worldQuat);
      // 确保模型保持可见
      el.object3D.visible = true;
    });
  }
});

使用方法

将该组件添加到你的3D模型实体上:

<a-entity gltf-model="#your-3d-model" keep-fixed-on-lost></a-entity>

原理说明

  1. 记录世界坐标:当图像目标被检测到时,用getWorldPosition和getWorldQuaternion获取模型在场景中的绝对位置与旋转,而非相对于跟踪实体的相对坐标。
  2. 脱离跟踪实体:目标丢失时,将模型从图像跟踪实体的子节点转移到场景根节点,切断与跟踪实体的绑定。
  3. 固定姿态:把之前记录的世界坐标赋值给模型,让它保持在目标消失时的位置和角度,不再随相机或跟踪实体漂移。

内容的提问来源于stack exchange,提问作者Fatima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:44:58