2015-01-07 2 views
0

У меня есть Ламберт материал сетки в threejs определены следующим образом:Прозрачный материал с ThreeJS

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

Мы решили превратить alphaTest до 0,1, так как, казалось бы, единственный способ действительно сделать материал прозрачным. В противном случае цвет фона за материалом становится четким цветом. Проблема с вышеописанным методом заключается в том, что мы получаем уродливую серовую линию вокруг непрозрачных частей. Эта текстура представляет текст, что еще хуже.

Есть ли лучший способ сделать прозрачный материал, который будет просто показывать объект позади него?

+0

ли вы установите непрозрачность? –

+0

@BobWoodley Я пробовал это. Непрозрачность делает всю текстуру более прозрачной (даже непрозрачные части). – Parris

+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/

Смежные вопросы