我正在创建一个立方体,并将 6 种不同的纹理应用到它的每个面上。每个纹理都是一个 .png 文件并包含透明部分。我还在为立方体应用一种颜色——我想通过 png 透明度查看该颜色。
问题:透明度呈现为白色,所以我看不到立方体的基色(如果我删除 png 纹理,它会呈现正常)
如何使 png 透明度起作用?我尝试使用一些材质设置,但没有一个让它变得透明。
创建立方体和材质的代码:
var geometry = new THREE.CubeGeometry(150, 200, 150, 2, 2, 2);
var materials = [];
// create textures array for all cube sides
for (var i = 1; i < 7; i++) {
var img = new Image();
img.src = 'img/s' + i + '.png';
var tex = new THREE.Texture(img);
img.tex = tex;
img.onload = function () {
this.tex.needsUpdate = true;
};
var mat = new THREE.MeshBasicMaterial({color: 0x00ff00, map: tex, transparent: true, overdraw: true });
materials.push(mat);
}
cube = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));
cube.position.y = 150;
scene.add(cube);
编辑:
下图显示了问题 - 使用 senthanal 解决方案,左侧纹理现在呈现正常 - 这是一个没有透明度的 png 图像 - 我在代码中设置了透明度
materialArray.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('img/s2.png'), transparent: true, opacity: 0.9, color: 0xFF0000 }));
正确的纹理也是 png 图像 - 只是它具有透明区域(所有呈现白色的都应该是纯红色,因为它是透明的并且应该从立方体中获取颜色?)。我怎样才能使那个白色部分透明?