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

如何用Three.js创建上下面为透明图片纹理、其余面为黄色的3D模型?

实现Box上下两面透明纹理、其余面黄色的方案

嘿,这个需求其实很好实现!Three.js的Mesh支持传入材质数组,对应几何体的每个面,刚好BoxGeometry默认有6个独立的面,我们只需要给上下两个面指定透明纹理材质,剩下的面用黄色材质就行。

具体步骤和代码示例

  1. 加载透明纹理并配置材质
    首先加载你的透明图片,别忘了开启材质的transparent属性,这样图片的透明通道才会生效:

    const textureLoader = new THREE.TextureLoader();
    // 加载透明纹理
    textureLoader.load('img.png', (texture) => {
      // 透明纹理材质
      const transparentMat = new THREE.MeshBasicMaterial({
        map: texture,
        transparent: true, // 必须开启,才能显示透明效果
        alphaTest: 0.5 // 如果图片有半透明边缘,可选添加这个参数优化显示
      });
    
      // 黄色基础材质
      const yellowMat = new THREE.MeshBasicMaterial({ color: 0xffff00 });
    
      // 材质数组:对应BoxGeometry的6个面,顺序是【右、左、上、下、前、后】
      const materials = [
        yellowMat,    // 右面
        yellowMat,    // 左面
        transparentMat, // 上面
        transparentMat, // 下面
        yellowMat,    // 前面
        yellowMat     // 后面
      ];
    
      // 创建几何体和网格
      const geom = new THREE.BoxGeometry(25, 25, 1);
      const boxMesh = new THREE.Mesh(geom, materials);
      scene.add(boxMesh);
    });
    
  2. 关键说明

    • BoxGeometry的6个面顺序是固定的:正X(右)、负X(左)、正Y(上)、负Y(下)、正Z(前)、负Z(后),所以我们把数组的第3、4位(索引2和3)设为透明材质,对应上下两面。
    • 一定要给透明材质设置transparent: true,否则图片的透明部分会显示为黑色或者完全不透明。
    • 如果你的图片半透明区域显示有问题,可以尝试添加alphaTest: 0.5,它会剔除透明度低于0.5的像素,优化边缘效果。

这样就能实现你想要的效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:03:24