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

Three.js动态实现GLTF模型子对象平滑透明过渡的问题

Three.js动态实现GLTF模型子对象平滑透明过渡的问题

嘿,我来帮你排查下这个TWEEN动画没生效的问题~

你遇到的情况其实是Three.js结合TWEEN库时很常见的新手坑,主要有几个关键点没注意到:

  • TWEEN动画需要在渲染循环里更新:TWEEN库本身不会自动跟着Three.js的渲染帧走,你必须在每一帧的渲染函数里调用TWEEN.update(),不然动画根本不会启动。
  • 材质更新需要通知Three.js:克隆材质后,手动设置needsUpdate: true,确保Three.js识别到材质属性的变化,不然可能不会实时渲染透明度的变化。
  • 动画目标的引用要准确:虽然你已经把child.material替换成了克隆的新材质,但直接用newMaterial作为TWEEN的目标会更稳妥,避免潜在的引用问题。

下面是修改后的完整代码片段:

loadedObject.traverse((child) => {
  if (child.material) {
    console.log('Alpha', child.name);
    if (child.name === 'Crossbars') {
      let newMaterial = child.material.clone();
      newMaterial.transparent = true;
      newMaterial.needsUpdate = true; // 通知Three.js材质已更新
      child.material = newMaterial;
      // 对新材质执行平滑透明度动画
      new TWEEN.Tween(newMaterial)
        .to({ opacity: 0.1 }, 50000)
        .start();
    }
  }
});

另外,一定要记得在你的渲染循环中添加TWEEN的更新逻辑,比如:

function animate() {
  requestAnimationFrame(animate);
  TWEEN.update(); // 这行必须加,驱动TWEEN动画
  renderer.render(scene, camera);
}
animate();

这样调整后,你的Crossbars子对象应该就能平滑过渡到0.1的透明度了~

备注:内容来源于stack exchange,提问作者Bob Haslett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:54:31