透明材质搭配ThreeJS

时间:2015-01-07 01:32:49

标签: javascript three.js textures transparency

我有三个定义如下的网格朗伯材料:

new three.MeshLambertMaterial({
    transparent: true,
    emissive: 0xffffff,
    map: texture,
    alphaTest: 0.1
});

我们决定将alphaTest变为0.1,因为这似乎是实际使材料透明的唯一方法。否则,材料背后的背景颜色最终是清晰的颜色。上述技术的问题在于我们在非透明部分周围得到一条丑陋的灰线。这个纹理代表文字,甚至更糟。

是否有更好的方法来制作透明材料,只显示背后的物体?

1 个答案:

答案 0 :(得分:0)

听起来你的纹理具有一定的透明度,你希望纹理的透明度决定了材质的透明度。我做对了吗?如果是这样,这个小片段着色器应该可以工作:

<script id="fs" type="x-shader/x-fragment">
    uniform sampler2D iChannel0;

    varying vec2 vUv;  
    varying vec4 vColor;
    void main() {
        vec2 uv = vUv;
        vec4 tex1 = texture2D( iChannel0,  vec2(uv.x, uv.y));
        gl_FragColor = vec4(tex1.r,tex1.g,tex1.b,tex1.a);
    }

</script>

这里的工作示例:http://rwoodley.org/MyContent/SO/02/