使用alphaMap不会在我的素材中提供透明度

时间:2017-05-15 15:27:15

标签: javascript three.js alpha alphablending

我正在尝试创建chainlink表面。我有2个纹理;标准地图,具有金属链接的金属外观,带有白色背景(漫反射):

我也有一张alpha地图:

我试图将这两个都应用到MeshBasicMaterial但没有运气:

var chainlinkMask = THREE.ImageUtils.loadTexture('textures/chainlink_Large-Panels_mask.png');
chainlinkMask.wrapS = THREE.RepeatWrapping;
chainlinkMask.wrapT = THREE.RepeatWrapping;
chainlinkMask.repeat.set( 2, 2 );

var chainlinkDiffuse = THREE.ImageUtils.loadTexture('textures/chainlink_Large-Panels_Diffuse.png');
chainlinkDiffuse.wrapS = THREE.RepeatWrapping;
chainlinkDiffuse.wrapT = THREE.RepeatWrapping;
chainlinkDiffuse.repeat.set( 2, 2 );

material.map = chainlinkMask;
material.alphaMap = chainlinkDiffuse;
material.transparency = true;
material.side = THREE.DoubleSide;

这给了我以下内容:

如您所见,alpha地图尚未应用。

为什么不呢?

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:2)

尝试将transparent参数设置为true而不是transparency

material.transparent = true;

答案 1 :(得分:0)

如果您使用的是alpha贴图,请在定义材质时使用以下两种模式之一:

alphaMap: texture,
transparent: true,

alphaMap: texture,
alphaTest: 0.5, // if transparent is false
transparent: false,

如果可能,请使用后者,并避免在透明为真时可能出现的瑕疵。

three.js r.85

答案 2 :(得分:0)

例如,

直接使用file -P会导致渲染问题。您有2个corssing plane,每个应用man filematerial.transparent。旋转它你会看到渲染问题。 只需使用上面提到的@WestLangley解决方案。