Я очень новичок в GLSL и начал с простого оттенка серого. Я использовал код урока GamesFromScratch в:GLSL Grayscale Shader удаляет прозрачность
vertexshader:
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
uniform mat4 u_projTrans;
varying vec4 v_color;
varying vec2 v_texCoords;
void main() {
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
Fragmentshader:
#ifdef GL_ES
precision mediump float;
#endif
varying vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
uniform mat4 u_projTrans;
void main() {
vec3 color = texture2D(u_texture, v_texCoords).rgb;
float gray = (color.r + color.g + color.b)/3.0;
vec3 grayscale = vec3(gray);
gl_FragColor = vec4(grayscale, 1.0);
}
эффект и проблема: все оказывается только в оттенках серого, но прозрачные части текстур становятся белый. Например: простой заполненный круг обычно рисуется как круг. Теперь его круг в белом ящике. Рядом с удаленными прозрачными частями изменения на альфе не видны.
Вы устанавливаете альфа выходного сигнала на «1.0». Почему вы ожидаете увидеть прозрачность, если вы сделаете вывод полностью непрозрачным? –
Несвязанный, но все, что связано с 'v_color', можно удалить из этого шейдера, поскольку оно не используется. – Tenfour04