GLSL Shader — тень с прозрачностью (эффект стекла)

Я создал шейдер, который может поворачивать изображение примерно на 180° и накладывать на него черный градиент, но теперь я хочу создать настоящую прозрачность вместо использования черного цвета в качестве цвета фона.

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

// 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);
}

person seveves    schedule 13.04.2012    source источник


Ответы (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;
}
person Klem    schedule 17.04.2012
comment
Хорошо, это было легко, и я почти уверен, что уже пробовал это раньше, но это не дало никакого эффекта ... возможно, время лечит все раны. Спасибо Клем! - person seveves; 23.04.2012