2012-04-13 2 views
0

Я создал шейдер, способный поворачивать изображение примерно на 180 ° и накладывать его на черный градиент, но теперь я хочу создать реальную прозрачность вместо черного цвета фоновый цвет.GLSL Shader - Shadow with transparent (glasstable effect)

Это то, что я до сих пор:

// Vertex Shader 
uniform highp mat4 u_modelViewMatrix; 
uniform highp mat4 u_projectionMatrix; 
attribute highp vec4 a_position; 
attribute lowp vec4 a_color; 
attribute highp vec2 a_texcoord; 
varying lowp vec4 v_color; 
varying highp vec2 v_texCoord; 
uniform int offset; 
uniform int space; 
uniform int vph; 
void main() 
{\ 
highp float h = float(offset)/float(vph); 
highp float s = float(space)/1000.0; 
highp vec4 pos = a_position; 
pos.y = pos.y - (h + s); 
gl_Position = (u_projectionMatrix * u_modelViewMatrix) * pos; 
    v_color = a_color; 
v_texCoord = vec2(a_texcoord.x, 1.0 - a_texcoord.y); 
} 

// Fragment Shader 
varying highp vec2 v_texCoord; 
uniform sampler2D u_texture0; 
uniform int gradient; 
void main() 
{ 
    lowp vec3 w = vec3(1.0,1.0,1.0); 
    lowp vec3 b = vec3(0.0,0.0,0.0); 
    lowp vec3 mix = mix(b, w, (v_texCoord.y-(float(gradient)/10.0))); 
    gl_FragColor = texture2D(u_texture0,v_texCoord) * vec4(mix, 1.0); 
} 

ответ

1

заменить черный цвет с полупрозрачным цветом в вашем пиксельный шейдер:

void main() 
{ 
    lowp vec4 w = vec3(1.0,1.0,1.0,1.0); 
    lowp vec4 b = vec3(0.0,0.0,0.0,0.0); 
    lowp vec4 mix = mix(b, w, (v_texCoord.y-(float(gradient)/10.0))); 
    gl_FragColor = texture2D(u_texture0,v_texCoord) * mix; 
} 
+0

Хорошо, что было легко и I'm довольно уверен, что я вы уже пробовали это раньше, но он не имел никакого эффекта ... может быть, время исцеляет все раны. Спасибо, Клем! – seveves