2015-04-05 76 views
4

如何用无alphaMap的透明黑色制作纹理Lambert材质。三种js黑色透明材质

我有云彩纹理的球体。我需要黑色透明,如果我使用混合,它影响阴影,我需要像MeshPhong材料保持行为,但只有透明的黑色。

var cloudsMaterial = new THREE.MeshLambertMaterial({ 
         color: 0xffffff, 
         map: THREE.ImageUtils.loadTexture("img/planets/clouds.jpg"), 

         specular : new THREE.Color("rgb(255,255,255)"), 
         shininess : 0.1,        
         depthTest : 0, 
         blending : 1, 
         transparent: true, 
         bumpScale : 1, //0.8 
         bumpMap : THREE.ImageUtils.loadTexture("img/planets/bump.jpg"),              
         }); 

什么是正确的方法,设置混合或其他属性?

+1

尝试'共混:2'或'共混:THREE.AdditiveBlending'。混合模式常量是[here](http://threejs.org/docs/#Reference/Constants/Materials) – 2pha 2015-04-05 18:18:19

+0

加法混合将使纹理...添加剂。我试验自定义混合,没有组合做的伎俩。我只需要渲染器清晰的颜色透明(黑色)和其他颜色,因为它们是像素灰色(50%黑色)的颜色,应该有50%的透明度。我无法使用Alpha Map,因为它是自定义动画着色器,alphaMap不是动画。 – Martin 2015-04-05 21:29:15

+0

有办法做到这一点,例如定义自定义着色器,但似乎最简单的方法就是将Alpha通道添加到纹理中。如果你不能修改资源,你可以运行它。 – 2015-09-01 14:18:53

回答

0

解我是使用一个α映射(BW纹理其中白色混浊=少,黑色= 100%不透明):

var t = THREE.ImageUtils.loadTexture("clouds.jpg"); 
var a = THREE.ImageUtils.loadTexture("clouds_alpha.jpg"); 
var cloudsMaterial = new THREE.MeshLambertMaterial({ 
         map  : t, 
         alphaMap : map, 
         blending : 1, 
         transparent: true,              
})